自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CPU明明8個(gè)核,網(wǎng)卡為啥拼命折騰一號(hào)核?

新聞
大家好,我是CPU一號(hào)車間的阿Q!我們?nèi)粘5墓ぷ骶褪遣粩鄨?zhí)行代碼指令,不過(guò)這看似簡(jiǎn)單的工作背后其實(shí)也并不輕松。咱不能悶著頭啥也不管一個(gè)勁的只管執(zhí)行代碼,還得和連接在主板上的其他單位打交道。

大家好,我是CPU一號(hào)車間的阿Q!

我們?nèi)粘5墓ぷ骶褪遣粩鄨?zhí)行代碼指令,不過(guò)這看似簡(jiǎn)單的工作背后其實(shí)也并不輕松。

咱不能悶著頭啥也不管一個(gè)勁的只管執(zhí)行代碼,還得和連接在主板上的其他單位打交道。經(jīng)常保持聯(lián)系的有鍵盤、鼠標(biāo)、磁盤,哦對(duì),還有網(wǎng)卡,這家伙最近把我惹到了,待會(huì)再說(shuō)這事兒。

原以為內(nèi)存那家伙已經(jīng)夠慢的了,沒想到跟上面這幾位通個(gè)信比他更慢,咱CPU工廠的時(shí)間一刻值千金,不能干等著,耽誤工夫。后來(lái)廠里一合計(jì),想了個(gè)叫中斷的辦法。

在我們車間裝了個(gè)大燈,這些單位想聯(lián)系我們辦事兒,就先給我們發(fā)一個(gè)中斷信號(hào),大燈就會(huì)自動(dòng)亮起。我們平時(shí)工作執(zhí)行代碼指令的時(shí)候,每執(zhí)行一條指令就會(huì)瞅一眼看看大燈有沒有亮起來(lái)。一旦發(fā)現(xiàn)燈亮了,就把手頭的工作先放一邊,去處理一下。

我們記性很差的,等會(huì)處理了完了還得回來(lái)接著原來(lái)的活繼續(xù)干,為了等會(huì)回來(lái)還能接的起來(lái),走之前得把當(dāng)前執(zhí)行的這個(gè)線程的各個(gè)寄存器的值,執(zhí)行到哪里了等等這些信息都保存在這個(gè)線程的棧里去。

不過(guò)有時(shí)候我們?cè)趫?zhí)行非常重要的事情的時(shí)候,就不想被他們打斷。于是我們又在車間里那個(gè)eflags寄存器中設(shè)置了一個(gè)標(biāo)記,如果是1我們才允許被打斷,如果是0那就算天王老子找我們也不管了。

哦不對(duì),還有一種不可以屏蔽的中斷NMI,走得是綠色通道。不過(guò)我可不期望有這種事情發(fā)生,因?yàn)橐话愣紱]有好事,不是電源斷電就是溫度過(guò)高,或者總線出了錯(cuò)誤等這之類嚴(yán)重的事情。

8259A PIC

還有一個(gè)問題,找我們辦事兒的單位有很多,我們得要區(qū)分開來(lái),到底是誰(shuí)來(lái)消息了,而且要是他們一起來(lái)找,按什么樣優(yōu)先級(jí)順序處理,也是一件頭疼的事情。

為此,廠里單獨(dú)組建了一個(gè)全資的子公司來(lái)負(fù)責(zé)這事兒,他就是可編程中斷控制器PIC,外號(hào)8259A,其他單位想聯(lián)系我們都得通過(guò)這個(gè)PIC,我們只需要和PIC進(jìn)行對(duì)接就可以了。

我們給辦事單位都分配了一個(gè)編號(hào),叫做中斷向量。我們還準(zhǔn)備了一個(gè)表格叫中斷描述符表IDT,表格里記錄了很多信息,其中就有處理這個(gè)中斷號(hào)對(duì)應(yīng)的函數(shù)地址。我們找PIC拿到編號(hào)后就執(zhí)行處理函數(shù)就OK了。

這個(gè)表格有點(diǎn)大,足足有256項(xiàng),咱CPU車間空間有限,放不下,就把它放在內(nèi)存那家伙那里了,為了能快速找到這個(gè)表,專門添置了一個(gè)叫idtr的寄存器指向這個(gè)表格。

其實(shí)除了中斷,我們?cè)趫?zhí)行指令的時(shí)候如果遇到了異常情況,也會(huì)去這個(gè)表里執(zhí)行異常處理函數(shù),最常見的比如遇到了除數(shù)是0,內(nèi)存地址錯(cuò)誤等等情況。

這種情況下,我們必須主動(dòng)放下手里的活,去處理異常,所以我們也說(shuō)異常是同步的,而中斷不知道什么時(shí)候發(fā)生,所以是異步的。

APIC

8259A干的挺不錯(cuò)的,不過(guò)后來(lái)咱們廠擴(kuò)大規(guī)模,從單核CPU變成了多核,他就有點(diǎn)應(yīng)付不過(guò)來(lái)了。

終于有一天,廠里召開會(huì)議,把8259A給撤了,成立了一個(gè)新的全資子公司叫高級(jí)可編程中斷控制器APIC,名字就多了個(gè)高級(jí)兩個(gè)字,干的活還是一樣的。

不過(guò)你還別說(shuō),這兩個(gè)字還真不是吹噓,比8259A不知道高到哪里去了。

這個(gè)APIC的新公司一上臺(tái),就成立了兩個(gè)部門,一個(gè)叫I/O APIC,負(fù)責(zé)接待那些要找我們辦事兒的單位,一個(gè)叫Local APIC,以外包的形式入駐到我CPU的各個(gè)車間工作,因?yàn)榫桶ぶ覀冝k公,所以取名叫Local。

I/O APIC收到中斷信號(hào)以后,根據(jù)自己的策略就分發(fā)到對(duì)應(yīng)的Local APIC,咱們八個(gè)車間就可以專心處理了,為我們省了不少事兒。

不僅如此,通過(guò)這個(gè)外包團(tuán)隊(duì),我們八個(gè)車間還能向彼此發(fā)起中斷請(qǐng)求,我們把這個(gè)叫做處理器間中斷Inter-Processor Interrupt,簡(jiǎn)稱IPI。

中斷親和性

每當(dāng)網(wǎng)絡(luò)中有數(shù)據(jù)包到來(lái),網(wǎng)卡那家伙就發(fā)送一個(gè)中斷消息過(guò)來(lái),告訴我們?nèi)ヌ幚怼?/p>

不過(guò)最近不知道怎么回事,網(wǎng)絡(luò)數(shù)據(jù)量激增。咱們廠里明明有8個(gè)車間,他非得一個(gè)勁的只給我們發(fā)消息,搞得我們手頭的工作老是被打斷,忙得不可開交。

終于,我忍不住了,去找網(wǎng)卡那家伙理論了一番。不過(guò)他告訴我,這也不能怪他,分發(fā)給誰(shuí)處理,那是APIC在負(fù)責(zé)。

想想也是,回頭我就去了APIC那里,要求他們分?jǐn)傄稽c(diǎn)給別的車間處理。

APIC表示這他們做不了主,得讓廠里來(lái)決定。

沒過(guò)幾天,廠里開了個(gè)會(huì),參會(huì)的有各車間代表、APIC負(fù)責(zé)人,還請(qǐng)了操作系統(tǒng)那邊的相關(guān)代表過(guò)來(lái)。

會(huì)上,大家為了此事爭(zhēng)執(zhí)不休。

二號(hào)車間虎子:“阿Q,誰(shuí)叫你們一號(hào)車間是Bootstrap Processor,你們就多辛苦一點(diǎn)嘛”

三號(hào)車間代表:“你這話說(shuō)的不合適,大家是一個(gè)Team,要互相幫助!要不這樣,既然有這么多單位要聯(lián)系我們,咱就分下工,比如一號(hào)車間負(fù)責(zé)網(wǎng)卡,二號(hào)負(fù)責(zé)磁盤,我們?nèi)?hào)負(fù)責(zé)鍵盤,以此類推”

五號(hào)車間代表:“你想的倒是挺美哦,鍵盤一天能發(fā)多少中斷,網(wǎng)卡一天要發(fā)多少中斷,你凈挑輕松的干。這樣吧,咱就用隨機(jī)分發(fā)進(jìn)行負(fù)載均衡你們覺得怎么樣?”

?八號(hào)車間代表:“隨機(jī)個(gè)啥啊,多麻煩,依我看吶咱8個(gè)車間就輪流來(lái)唄”

這時(shí),領(lǐng)導(dǎo)問操作系統(tǒng)代表有沒有什么建議。

這代表站起身來(lái),推了推眼鏡說(shuō)到:“幾位有沒有聽過(guò)線程的CPU親和性?”

大家都搖了搖頭,問到:“這是個(gè)什么意思?”

“就是有些線程想綁定在你們之中的某一個(gè)核上面執(zhí)行,不希望一會(huì)兒在這個(gè)核執(zhí)行,一會(huì)兒在那個(gè)核執(zhí)行”

我接過(guò)他的話:“好像是有這么回事兒,之前有遇到過(guò),有個(gè)線程一直被分配到我們一號(hào)車間,不過(guò)我們對(duì)這個(gè)不用關(guān)心吧,執(zhí)行誰(shuí)不是干活啊,對(duì)我們都一個(gè)樣”

代表?yè)u了搖頭,“唉,這可不一樣!你們每個(gè)核的一二級(jí)緩存都是自己在管理,要是換到別的核,這緩存多半就沒用了,又得重新來(lái)建立,這換來(lái)?yè)Q去的豈不是瞎耽誤功夫嘛!對(duì)于一般的線程他們倒是不關(guān)心,但是有些線程執(zhí)行大量的內(nèi)存訪問和運(yùn)算處理,又對(duì)性能要求很高的話,那就很在意這個(gè)問題了”

我們幾個(gè)都恍然大悟,紛紛點(diǎn)頭。

虎子起身問到:“那你們是如何實(shí)現(xiàn)這個(gè)親和性的呢?這跟我們今天的會(huì)議又有什么關(guān)系呢?”

代表繼續(xù)回答說(shuō)到:“我先回答你的第一個(gè)問題。線程調(diào)度是我們操作系統(tǒng)完成的工作,我們提供了API接口,線程通過(guò)調(diào)用這些接口表明自己的親和性意愿,我們?cè)谡{(diào)度的時(shí)候就能按照他們的意愿把線程分配給你們來(lái)執(zhí)行?!?/p>

代表喝了一口水接著說(shuō)到:“我再回答你的第二個(gè)問題。既然線程可以有親和性,那中斷也可以按照這個(gè)思路來(lái)分發(fā)啊!APIC默認(rèn)有一套分發(fā)策略,但是也提供親和性的設(shè)置,可以指定誰(shuí)哪些核來(lái)處理,這樣不用把規(guī)矩定死,靈活可變,豈不更好?”

剛說(shuō)完,會(huì)議室門口突然出現(xiàn)一年輕少年,揮手將操作系統(tǒng)代表喚了出去。

接下來(lái),我們?cè)敿?xì)討論了這種方案的可行性,最后大家一致決定,就照這么辦,我們一起提出了一個(gè)叫中斷親和性的東西,操作系統(tǒng)那邊提供一個(gè)可配置的入口smp_affinity,可以通過(guò)設(shè)置各處理器核的掩碼來(lái)決定中斷交由誰(shuí)來(lái)處理,APIC回去負(fù)責(zé)落地支持。

有了這套方案,再遇到網(wǎng)絡(luò)高峰期,咱們一號(hào)車間的壓力就有辦法緩解了。

我們剛剛達(dá)成一致,操作系統(tǒng)代表返回會(huì)議室,神色凝重的說(shuō)到:“不好意思各位,操作系統(tǒng)那邊有點(diǎn)事情需要趕回去處理一下,先走一步了”

責(zé)任編輯:未麗燕 來(lái)源: SDNLAB
相關(guān)推薦

2020-06-28 09:12:31

CPU網(wǎng)卡中斷

2020-07-21 09:05:47

CPU1號(hào)核寄存器

2020-05-27 08:31:33

CPU寄存器緩存

2020-05-11 13:14:13

CPU寄存器緩存

2009-07-28 19:28:37

四核CPU多核

2009-08-27 10:26:42

12核CPU TDP

2011-01-18 09:20:49

Linux嵌入式

2009-04-18 14:52:54

雙核四核服務(wù)器

2009-04-10 13:32:46

Nehalem多核intel

2018-06-20 11:13:00

Intel8核22核

2023-07-03 07:06:17

CPU頻率單元

2009-09-17 14:25:49

通用CPU芯片龍芯一號(hào)

2021-09-16 18:29:17

CPU緩存虛擬

2021-10-29 06:46:42

CPU緩存TLB

2010-09-28 14:24:15

AMD12核處理器

2023-11-10 15:47:06

線性回歸內(nèi)核技巧

2023-08-14 06:51:06

芯片蘋果

2013-12-18 11:04:57

CPU雙核

2021-11-29 10:34:33

汽車智能芯片
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)