最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

linux內(nèi)核調(diào)度算法-多核系統(tǒng)的負(fù)載均衡(有這一文就足夠)

2022-06-13 20:34 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿
  • 多核CPU現(xiàn)在很常見(jiàn),那么問(wèn)題來(lái)了,一個(gè)程序在運(yùn)行時(shí),只在一個(gè)CPU核上運(yùn)行?還是交替在多個(gè)CPU核上運(yùn)行呢?LINUX內(nèi)核是如何在多核間調(diào)度進(jìn)程的呢?又是內(nèi)核又是CPU核,兩個(gè)核有點(diǎn)繞,下面稱CPU處理器來(lái)代替CPU核。

  • 實(shí)際上,如果你沒(méi)有對(duì)你的進(jìn)程做過(guò)特殊處理的話,LINUX內(nèi)核是有可能把它放到多個(gè)CPU處理器上運(yùn)行的,這是內(nèi)核的負(fù)載均衡。上文說(shuō)過(guò),每個(gè)處理器上有一個(gè)runqueue隊(duì)列,表示這顆處理器上處于run狀態(tài)的進(jìn)程鏈表,在多處理器的內(nèi)核中,就會(huì)有多個(gè)runqueue,而如果他們的大小很不均衡,就會(huì)觸發(fā)內(nèi)核的load_balance函數(shù)。這個(gè)函數(shù)會(huì)把某個(gè)CPU處理器上過(guò)多的進(jìn)程移到runqueue元素相對(duì)少的CPU處理器上。

  • 舉個(gè)例子來(lái)簡(jiǎn)單說(shuō)明這個(gè)過(guò)程吧。當(dāng)我們剛fork出一個(gè)子進(jìn)程時(shí),子進(jìn)程也還在當(dāng)前CPU處理器的runqueue里,它與父進(jìn)程均分父進(jìn)程的時(shí)間片。當(dāng)然,時(shí)間片與多處理器間的負(fù)載均衡沒(méi)有關(guān)系。假設(shè)我們的系統(tǒng)是雙核的,父進(jìn)程運(yùn)行在cpu0上,那么這個(gè)fork出來(lái)的進(jìn)程也是在cpu0的runqueue中。

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ? ?


那么,什么時(shí)候會(huì)發(fā)生負(fù)載均衡呢?

  1. 當(dāng)cpu1上的runqueue里一個(gè)可運(yùn)行進(jìn)程都沒(méi)有的時(shí)候。這點(diǎn)很好理解,cpu1無(wú)事可作了,這時(shí)在cpu1上會(huì)調(diào)用load_balance,發(fā)現(xiàn)在cpu0上還有許多進(jìn)程等待運(yùn)行,那么它會(huì)從cpu0上的可運(yùn)行進(jìn)程里找到優(yōu)先級(jí)最高的進(jìn)程,拿到自己的runqueue里開始執(zhí)行。

  2. 第1種情形不適用于運(yùn)行隊(duì)列一直不為空的情況。例如,cpu0上一直有10個(gè)可運(yùn)行進(jìn)程,cpu1上一直有1個(gè)可運(yùn)行進(jìn)程,顯然,cpu0上的進(jìn)程們得到了不公平的對(duì)待,它們拿到cpu的時(shí)間要小得多,第1種情形下的load_balance也一直不會(huì)調(diào)用。所以,實(shí)際上,每經(jīng)過(guò)一個(gè)時(shí)鐘節(jié)拍,內(nèi)核會(huì)調(diào)用scheduler_tick函數(shù),而這個(gè)函數(shù)會(huì)做許多事,例如減少當(dāng)前正在執(zhí)行的進(jìn)程的時(shí)間片,在函數(shù)結(jié)尾處則會(huì)調(diào)用rebalance_tick函數(shù)。rebalance_tick函數(shù)決定以什么樣的頻率執(zhí)行負(fù)載均衡。

  • 當(dāng)idle標(biāo)志位是SCHED_IDLE時(shí),表示當(dāng)前CPU處理器空閑,就會(huì)以很高的頻繁來(lái)調(diào)用load_balance(1、2個(gè)時(shí)鐘節(jié)拍),反之表示當(dāng)前CPU并不空閑,會(huì)以很低的頻繁調(diào)用load_balance(10-100ms)。具體的數(shù)值要看上面的interval了。

  • 當(dāng)然,多核CPU也有許多種,例如INTEL的超線程技術(shù),而LINUX內(nèi)核對(duì)一個(gè)INTEL超線程CPU會(huì)看成多個(gè)不同的CPU處理器。

  • 上面說(shuō)過(guò),如果你沒(méi)有對(duì)你的進(jìn)程做過(guò)特殊處理的話,LINUX內(nèi)核是有可能把它放到多個(gè)CPU處理器上運(yùn)行的,但是,有時(shí)我們?nèi)绻M覀兊倪M(jìn)程一直運(yùn)行在某個(gè)CPU處理器上,可以做到嗎??jī)?nèi)核提供了這樣的系統(tǒng)調(diào)用。系統(tǒng)調(diào)用sched_getaffinity會(huì)返回當(dāng)前進(jìn)程使用的cpu掩碼,而sched_setaffinity則可以設(shè)定該進(jìn)程只能在哪幾顆cpu處理器上執(zhí)行。當(dāng)我們對(duì)某些進(jìn)程有強(qiáng)烈的期待,或者想自己來(lái)考慮CPU間的負(fù)載均衡,可以這么試試。


linux內(nèi)核調(diào)度算法-多核系統(tǒng)的負(fù)載均衡(有這一文就足夠)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
永德县| 静乐县| 汉川市| 平南县| 揭阳市| 北海市| 龙山县| 桃源县| 怀远县| 新昌县| 和平区| 昭觉县| 濮阳县| 通化市| 泽普县| 资源县| 长宁区| 雷山县| 罗源县| 玉门市| 炎陵县| 启东市| 西安市| 吉水县| 商南县| 灌南县| 石阡县| 浦江县| 绵竹市| 文安县| 垦利县| 丰都县| 天峻县| 卢湾区| 河津市| 江陵县| 平塘县| 襄垣县| 台州市| 信丰县| 弋阳县|