国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
石阡县| 北流市| 莲花县| 敖汉旗| 勐海县| 潮州市| 济宁市| 昌图县| 天气| 皮山县| 宣化县| 扎鲁特旗| 阳泉市| 盐山县| 淳安县| 牟定县| 莱西市| 马公市| 南康市| 清涧县| 浏阳市| 泸溪县| 灵宝市| 琼海市| 临城县| 忻州市| 成都市| 湖口县| 田东县| 黄陵县| 彭山县| 辉县市| 屯门区| 贵德县| 民勤县| 新昌县| 江山市| 搜索| 合作市| 修水县| 达日县|