更新時(shí)間:2020-12-17 17:55:36 來源:動(dòng)力節(jié)點(diǎn) 瀏覽4003次
在當(dāng)前已經(jīng)是多核心SMP時(shí)代,作為多用戶,多任務(wù)的Linux操作系統(tǒng)仍然通過分時(shí)復(fù)用的方式,即給一個(gè)個(gè)任務(wù)分配不同的時(shí)間片從而實(shí)現(xiàn)用戶感知上的多任務(wù)。而各種中斷則擁有最高的響應(yīng)權(quán)限,可以直接導(dǎo)致線程的切換。這時(shí)候就需要用到Linux內(nèi)核的tick機(jī)制來調(diào)節(jié)這一現(xiàn)象。
我們要知道低時(shí)延和大吞吐量有的時(shí)候是沖突的。解決低時(shí)延,系統(tǒng)需要多個(gè)不斷切換的線程接收用戶端的數(shù)據(jù)——想象一下加特林機(jī)槍的射速是通過多槍管輪流發(fā)射達(dá)到低時(shí)延的目的;而大吞吐量往往需要一個(gè)不受干擾的持續(xù)運(yùn)行狀態(tài)——就如一條生產(chǎn)線,每一次更換產(chǎn)品都會(huì)帶來一系列的時(shí)間損失。
傳統(tǒng)上非實(shí)時(shí)搶占內(nèi)核Linux采用了一個(gè)相對(duì)固定的時(shí)間周期為不同的進(jìn)程、線程切換CPU時(shí)間。在運(yùn)行的過程中,如果kernel需要獲得控制權(quán)——主要是完成一些CPU重新調(diào)度以及定時(shí)器觸發(fā)之類的任務(wù),則需要通過timer tick方式以一個(gè)固定的周期觸發(fā)。這個(gè)過程其實(shí)對(duì)于該CPU上正在運(yùn)行的任務(wù)來說是非常不友好的。考慮到在大多數(shù)的機(jī)器上任務(wù)的數(shù)量遠(yuǎn)遠(yuǎn)多于CPU核心的數(shù)量,一次強(qiáng)行的中斷將直接導(dǎo)致出現(xiàn)流水線清空的問題。可見這個(gè)時(shí)間的設(shè)定對(duì)整個(gè)系統(tǒng)的時(shí)延/吞吐量非常關(guān)鍵。在不斷的均衡 latency和throughput的幾次修改之后,社區(qū)總算決定修改這一部分的設(shè)定。
然后就有了tickless idle(dyntick)模式,Ubuntu desktop版本默認(rèn)就是選擇了這個(gè)模式。個(gè)人覺得這個(gè)模式完全是為了筆記本電腦這類的能耗敏感設(shè)備設(shè)計(jì)的。CPU在啟用了能耗管理功能之后會(huì)對(duì)空閑的CPU降頻節(jié)能,而這個(gè)過程并不一定能在1ms內(nèi)結(jié)束。如果這個(gè)空閑的CPU在此時(shí)接受了每1ms就會(huì)發(fā)送的time ticket之后,立馬又被喚醒,往復(fù)這個(gè)過程之后,系統(tǒng)無法進(jìn)入節(jié)能模式。一句話解釋tickless idle模式:不向沒有任務(wù)的CPU發(fā)送定時(shí)器中斷。
另外一個(gè)就是tickless模式,這個(gè)才是重點(diǎn),Centos 操作系統(tǒng)默認(rèn)就是啟用了這個(gè)模式。這是一個(gè)完全針對(duì)吞吐量優(yōu)化的模式。同樣一句話的解釋:在多CPU系統(tǒng)上,如果當(dāng)前的CPU沒有任務(wù)或者只有一個(gè)任務(wù)的前提下,系統(tǒng)將不向該CPU發(fā)送timer tick。
在當(dāng)前的Linux內(nèi)核配置中g(shù)eneral setup -> timer subsystem配置中可以實(shí)現(xiàn)對(duì)上述3個(gè)模式進(jìn)行切換,編譯安裝內(nèi)核之后生效。從timer ticker的發(fā)送策略上講,如果要完全體現(xiàn)tickless的優(yōu)勢,CPU必須滿足如下嚴(yán)苛條件:
1.該CPU上只有一個(gè)任務(wù)。
2.這個(gè)唯一的任務(wù)不需要系統(tǒng)調(diào)用,即始終保持在用戶態(tài)。
3.長時(shí)間不間斷地任務(wù),并保持內(nèi)核不會(huì)再這個(gè)過程中重新調(diào)度此CPU。
滿足這個(gè)配置的簡單方式就不得不提到一個(gè)內(nèi)核啟動(dòng)入?yún)ⅲ篿solcpus=<CPUs>。這個(gè)入?yún)⒌男Ч歉綦x部分CPU不參與內(nèi)核調(diào)度。用戶必須通過taskset/cgroup的方式實(shí)現(xiàn)用戶調(diào)度。而且如果涉及多任務(wù),同樣需要用戶調(diào)度。這也是Linux內(nèi)核的tick機(jī)制的關(guān)鍵所在。
Linux內(nèi)核的tick機(jī)制可謂神秘莫測,然而令你意想不到的是,Linux的奧妙遠(yuǎn)不止如此,在本站的Linux教程中還有Linux系統(tǒng)中各種各樣的機(jī)制的詳細(xì)介紹和原理分析,這些機(jī)制共同構(gòu)建了Linux的內(nèi)核體系結(jié)構(gòu),為Linux的各種功能的實(shí)現(xiàn)發(fā)揮著獨(dú)特的作用。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743