【知乎】X86架構(gòu)與linux內(nèi)核系列(六) UBOX and PCU
X86架構(gòu)與linux內(nèi)核系列(六) UBOX and PCU

雪瀑牽裳
IT 老棒槌
關(guān)注他
21 人贊同了該文章
2020春節(jié)后開局第一篇技術(shù)文,動筆的這一刻居然有些懈怠的感覺。
就如同年輕時曾被安排和一個小姑娘見面,第一面的感覺說不上好也說不上不好。但之后恰好去波士頓培訓(xùn)了兩周,回來以后,就是這種懈怠的感覺。那時偷懶,斷了線就再也沒有和那個妹子聯(lián)系。——其實這樣生活態(tài)度是不好不好的,不去努力爭取,卻將失敗歸結(jié)于緣分,也就年輕時能有這臉皮。唉,第一次見面就跟我說將來不用為買房操心、她家有兩套房的妹子啊……
今夜?jié)辖K于下雪了,算是此冬第一場雪。坐在書房桌前,倒上一杯ALC 14.5%的 Grand Vin Selection,透著迷離的嫣紅,看窗外雪花飄舞,挺好。
言歸正傳,接著聊技術(shù),聊一下沒有投入產(chǎn)出比的技術(shù),哈哈。
從節(jié)前的上上上篇的內(nèi)容: skyX CPU的內(nèi)部結(jié)構(gòu),再溫習(xí)一下這些部件。
如上圖,在一個skyX CPU Socket 內(nèi)部,各個部件的名稱:
Cores
CHA
UBOX
PCU
IIO
IMC
——除了core以外,上圖中所有部件都被intel 統(tǒng)稱為 uncore modules。
此系列的第二篇里,我在粗略介紹PCIE的時候,曾將CPU比喻成中央朝廷,而將PCH比喻成安西都護府;那么在這里,我們將繼續(xù)延伸之前的比喻(該比喻局限于單CPU系統(tǒng)):
1、CPU內(nèi):
程序 相當(dāng)于皇帝的……想法;
數(shù)據(jù) 相當(dāng)于皇帝實現(xiàn)想法所需要的……金錢;
在中央朝廷(CPU)里,有皇帝(Core);
包圍在皇帝身邊最近的,是司禮監(jiān)掌印大太監(jiān)(CHA and cache)?!獮⒓沂腔实坭F桿的心腹,貼心老棉襖啊;
在朝廷里中最核心的打雜的是內(nèi)閣首輔(UBOX),匯總處理皇帝與各地之間的消息和奏折(irq,MSI,event等等),并通知皇帝和官員;
朝廷里的吏部尚書(PCU),接到皇帝或上帝的旨意,負(fù)責(zé)讓官員們嗝屁,關(guān)禁閉;給皇帝和上帝報告各位官員的死活狀態(tài)。
朝廷里的工部尚書(IIO ),負(fù)責(zé)讓下面的能吏(火箭一般的GPU,IB卡)快速賺錢(獲取數(shù)據(jù));
朝廷里的戶部尚書(IMC),連接的內(nèi)存代表國庫,負(fù)責(zé)保存國家的金錢;
2、CPU外:
PCH 相當(dāng)于安西都護府,管理被發(fā)配到邊疆的庸吏(龜速硬盤,usb接口)。
BMC 相當(dāng)于紅衣主教,呃,代表上帝監(jiān)督你們。你們這些官員若踩了紅線,我要給你們亮紅牌。
BIOS 相當(dāng)于盤古大神,呃,混沌初開(服務(wù)器加電)時開天地(basic Input/output init),然后就躲在都護府邊上的犄角旮旯修仙去了,只給世人留下一個背影,深藏功與名。
嗯,好滴好滴,節(jié)前我們已經(jīng)捋完了Cores以及 CHA,那么今天我們將捋一下uncore 部分的 UBOX 和 PCU。

在上邊的比喻中說過,在朝廷里中最核心的打雜的是內(nèi)閣首輔(UBOX),匯總處理皇帝與各地之間的消息和奏折(int 中斷),并通知皇帝和官員;
那么在intel的相關(guān)正式技術(shù)資料里是怎么描述ubox的呢?
1、Intel的說明:
UBOX 又叫configuration agent。
UBOX 負(fù)責(zé) 處理和分發(fā)CPU與CPU、CPU和設(shè)備之間的中斷和事件:
不論什么IPI中斷,還是傳統(tǒng)INT中斷,還是消息信號型中斷,還是設(shè)備與cpu之間的event,都統(tǒng)統(tǒng)交由UBOX進行匯總處理——ubox簡直就是一個消息橋。
UBOX 又給bios提供了一些寄存器 用于負(fù)責(zé)資源事務(wù)仲裁:
其實此處將bios換成UEFI更好。在UEFI初始化時,系統(tǒng)中的內(nèi)存memory還沒有初始化。而UEFI作為一個系統(tǒng)仍然是需要一些系統(tǒng)資源的。于是,在UEFI初期,cpu中的cache成了UEFI系統(tǒng)的運行內(nèi)存,而UBOX中的某些寄存器也成了UEFI的信號量(Semaphore)系統(tǒng)資源。
——所以應(yīng)該好好體會UBOX這個名字的“U”,乃是Utility也。
寫到這里,我發(fā)現(xiàn)雖然寫這個Intel X86 架構(gòu)已經(jīng)夠底層的了,但是在寫作過程中仍然涉及到了更底層的知識,讓我很糾結(jié)講還是不講:
A、什么是中斷,什么是msi,以及APIC,XAPIC;——這個就不講了,自己約度娘吧。
B、什么是uefi,uefi的啟動過程以及六大階段;——這個到了以后的專題講intel error report機制時會講;
C、什么是msr,什么是csr,什么是配置空間,什么是內(nèi)存映射空間?——這個到了以后的專題講intel 診斷體系的寄存器日志分析的時候會講。
D、什么是信號量(Semaphore)?這個到下個系列(有點遙遠(yuǎn)了,呵呵) linux crash分析時再講。
2、作者的補充:
既然UBOX負(fù)責(zé)匯總和分發(fā)中斷。而當(dāng)設(shè)備發(fā)生硬件錯誤時,設(shè)備往往會發(fā)硬件中斷給UBOX。因此UBOX會記錄硬件錯誤中斷的信息。所以在X86 架構(gòu)中,UBOX是RAS 的重要組成部分。
UBOX內(nèi)的寄存器值與硬件故障的定位有最直接的聯(lián)系。在intel 診斷體系中,UBOX是除了MSR寄存器之外,最重要的狀態(tài)寄存器聚集地。UBOX的寄存器與硬件故障定位的關(guān)系,將在后續(xù)的內(nèi)容中描述。
3、作者對intel文檔的吐槽:
吐槽點1:
intel的文檔中ubox示意圖,如下圖所示:
我們看:上面的圖中藍(lán)圈處,Ubox畫在了PCIE2處;而上面截取的Intel eds 的文字描述,卻又說UBOX和 PCIE1 module共用一個Mesh stop;——這圖片和文字二者之間是矛盾的。
若依據(jù)文字描述,那么圖中Ubox部分應(yīng)該右移到 PCIE1 and DMI3 那個方塊下才對。
吐槽點2:
另外即使是文字描述是正確的,但文字描述也是很模糊的。其實UBOX和PCIE1毛關(guān)系都沒有,UBOX其實是和DMI3在一個路徑上的。而DMI3和PICE1是共用一個Meshstop。所以我認(rèn)為這句話應(yīng)改成:“UBOX和 DMI3共用一個Meshstop”,應(yīng)更好一些。
在上邊的比喻中說過,朝廷里的吏部尚書(PCU),接到皇帝或上帝的旨意,負(fù)責(zé)讓官員們關(guān)禁閉,或者嗝屁;給皇帝和上帝報告各位官員的死活狀態(tài)。
為什么這么說呢?在intel的相關(guān)正式技術(shù)資料里又是怎么描述PCU的呢?
1、Intel的說明:
PCU,就是 power control unit;
PCU,負(fù)責(zé)CPU的供電和溫度控制:
哇,這個信息量好大,這么說,PCU將會和Cstate Pstate,ACPI等概念都會有聯(lián)系?對的,intel的資料也是這么說的:PCU負(fù)責(zé)管理Cstate、Pstate的 ACPI需求。
PCU,還負(fù)責(zé)向外提供Cpu的電壓和溫度數(shù)據(jù)(就是所謂的DTS數(shù)據(jù)),從而實現(xiàn)CPU風(fēng)扇轉(zhuǎn)速調(diào)節(jié)等一系列功能;
除了通常管理Digital Thermal Sensor 以外,這個,intel文檔里還說了灰常灰常重要的一點,PCU直接控制帶外PECI功能接口。
而這個PECI功能,太太太重要了,將貫穿整個intel X86的診斷體系結(jié)構(gòu)。這里先介紹一下,等intel X86的診斷體系結(jié)構(gòu)的時候再詳細(xì)的講。
2、什么是PECI:
在很久很久以前,PECI 是由Intel 提供的一種接口,只需要使用一根線就可以實現(xiàn)自身時鐘與數(shù)據(jù)的傳輸,不需要任何其他的控制信號線。
PECI 最早主要是為獲取處理器的溫度而設(shè)計的,PECI 通過處理器中的數(shù)字溫度傳感器(digital thermal sensor,DTS)獲取處理器的核心溫度。然后把溫度信息傳遞出去,所以那時在CPU和BMC之間設(shè)計了一條實實在在的連線,也叫PECI線。
再后來,PECI接口發(fā)展了,PECI接口不僅僅能獲取到溫度信息,還能獲取到Intel 處理器和芯片組的內(nèi)部寄存器信息。
——這點很重要奧,也就是說,此時,我們已經(jīng)可以通過bmc的ipmitool指令,主動去獲取cpu內(nèi)的寄存器信息了。
再后來,PECI又發(fā)展了,不僅僅是個物理接口,還成了一個數(shù)字接口;也就是說PECI功能此時有兩條路徑往外發(fā)送信息:
第一條還是傳統(tǒng)的CPU直接到BMC的PECI連線,這叫帶外PECI;
第二條是復(fù)用從CPU通過DMI接口到PCH再到BIOS再到BMC的路徑,這叫帶內(nèi)PECI;
PS:Intel提供了一個強大的寄存器收集和分析工具。這個工具既可以通過ctag連線連接到cpu內(nèi)部去獲取寄存器。也可以通過bmc通過ipmitool命令來獲取寄存器。其中該工具若通過bmc的ipmitool命令連接cpu時,又分帶內(nèi)方式和帶外方式,此處的帶內(nèi)帶外就是指的PECI帶內(nèi)帶外。
——可惜,在我司的服務(wù)器設(shè)備上,這個工具我試了好久,可惜無論哪種方式我都連接不上啊……
另外,根據(jù)實驗現(xiàn)象,我總懷疑我司的服務(wù)器,沒有帶外peci連線,這個等以后再驗證吧。
3、吐槽:
槽點1:intel的示意圖不是太嚴(yán)格
同樣的,上面這個圖藍(lán)圈處,pcu的位置是隨便放的,和ubox一樣其位置沒有特定含義,只是繪圖人員畫了個方塊,扔到CPU里,表示CPU有PCU而已。
槽點2:關(guān)于 UBOX和PCU中相同命名的寄存器
某些PCU中寄存器和 UBOX中的寄存器名字是一模一樣的。若按照我們行內(nèi)的邏輯,之所以在兩個不同位置放置相同名稱的寄存器,其目的是為了提高性能。所以一般來講,兩個不同位置放置的相同名稱的寄存器,其值應(yīng)該是一樣的。但是在Skylake 平臺上,Ubox的某個寄存器 和 PCU上的相同名稱的寄存器,二者的值是不一樣的。PCU上的該寄存器的值比Ubox的該寄存器的值,每個字節(jié)值都齊刷刷的小了1。
——我猜,瞎猜,intel研發(fā)cpu的時候也是分成各個子模塊的。也許intel的ubox子項目組和PCU子項目組沒協(xié)調(diào)好數(shù)據(jù)字典吧,哈哈哈哈。當(dāng)然也許intel有其他的考量也未必可知。
這個寄存器的名稱我就不多說了,倒霉的下游廠家,若是不求甚解,閉著眼使用了PCU的該寄存器值,肯定要出錯的。
如果我們把CPU中 的IIO,內(nèi)存,cache認(rèn)為是支撐數(shù)據(jù)流的重要設(shè)備,那么UBOX和PCU就是支撐控制流的最重要的兩個部分。UBOX和PCU中的狀態(tài)寄存器們,是診斷CPU、mem、以及chipset的重要判斷依據(jù)。
——記住最上面我對各個部件的比喻,將來講服務(wù)器調(diào)優(yōu)時,我還會依據(jù)這個比喻來講。
此篇結(jié)束,下篇將講BIOS以及OS能看得到摸得著的東西:IIO和IMC。
嗯,紅酒不錯,謝了哥們。
趁著還未散去的酒香,以一篇我在青島紅樹林酒店的海灘,面對著靈山島寫過的詩文,回贈送我紅酒的哥們:
旅行季
travel
是誰,遺忘了房門鑰匙,
迷失在了紅樹林?
六點,
清晨。
海浪揚起白紗,
安靜的,沒了欣賞的人。
陽光依然輕柔,
踮著腳步,
漁船,燈塔,搖曳著波光粼粼。
海那的靈山,
霧中忽隱忽現(xiàn),
山中的仙子,
吮著手指,
羨煞遙望的凡塵。
草地上一聲詠嘆,
悠揚婉轉(zhuǎn)著,
和風(fēng)長吟。
曖昧如紅酒,
澆入花的心。
于是花醉了,
花香成了毒藥,
麻醉了不能了無牽掛的魂。
咦?
是誰,遺忘了房門鑰匙,
使我情迷紅樹林。
——紅樹林
另外,更多未更新的知識內(nèi)容,請關(guān)注公眾號:雪瀑牽裳的樹屋,那里有intel x86 cpu架構(gòu),有l(wèi)inux內(nèi)核,還會有openstack,openshift等云計算方面的內(nèi)容。
編輯于 2020-05-31 17:04
「真誠贊賞,手留余香」
贊賞
還沒有人贊賞,快來當(dāng)?shù)谝粋€贊賞的人吧!
x86
Linux 內(nèi)核
操作系統(tǒng)內(nèi)核

發(fā)布一條帶圖評論吧
1 條評論
默認(rèn)
最新

不愿透露姓名的人
感覺像是在最近很火的某潮工作或者工作過
2021-11-26