【知乎】Intel X86服務(wù)器架構(gòu)(七)IMC和IIO

Intel X86服務(wù)器架構(gòu)(七)IMC和IIO

雪瀑牽裳
IT 老棒槌
41 人贊同了該文章
正式迎來(lái)了春暖花開的日子。
先是看著柳樹從鵝黃變得碧綠,然后又看到一叢叢的迎春簇?fù)碇?,形成明黃的花海。
當(dāng)我從技術(shù)大坑里灰頭土臉的爬出來(lái),已然看到小葉李和美人櫻給馬路增添了第一抹紅,讓我站在人生的交叉路口,恍惚。
暖洋洋的日光,讓人內(nèi)心騷動(dòng)。嗯,又是一個(gè)踏青燒烤的好時(shí)候了。
先泡上一杯咖啡,就在這曖昧的陽(yáng)光下,我們開始intel x86架構(gòu)的第七篇,也就是skylake CPU內(nèi)uncore部件講解最后一部分:IIO和 IMC。
回頭看看intel x86架構(gòu)系列的四,五,六篇以及當(dāng)前這第七篇,我用了四個(gè)篇幅,羅列了skylake CPU 內(nèi)部結(jié)構(gòu)的各個(gè)PCI組件。從這些組件在SKX CPU內(nèi)部架構(gòu)中的位置,簡(jiǎn)單講解的各個(gè)組件的功能。
——其實(shí)這四篇的內(nèi)容就像流水賬一樣,相當(dāng)?shù)目菰?。每次提筆,我都犯愁該如何下筆。年輕時(shí)我玩的時(shí)小型機(jī)和集中式存儲(chǔ)、而不是x86出身啊,所以基本功不扎實(shí)啊。
當(dāng)我捏著鼻子將所有的部件都介紹了一遍后,線下我將重新review一遍之前的幾篇,看看是否有之前挖的坑卻還沒填上的。若是沒有留下的坑,從第8篇起將會(huì)從功能的角度,把這些部件都串接起來(lái)。
所以說(shuō),從之前到現(xiàn)在,流水賬一般的介紹,是為了給后面功能的展現(xiàn)打基礎(chǔ)。(——此時(shí),應(yīng)該有個(gè)莊大戶邊剔牙邊嘬個(gè)牙花子說(shuō)了:你看,你還是擺脫不了理科男的小農(nóng)思維。:))否則,后續(xù)篇幅一涉及到某某的啥寄存器的第幾位,我還要大篇幅的介紹某某是個(gè)什么玩意兒。

一、重溫SKX CPU架構(gòu)

如上圖,在一個(gè)skyX CPU Socket 內(nèi)部,各個(gè)部件的名稱:
Cores
CHA
UBOX
PCU
IIO
IMC
上上篇已經(jīng)講完了Cores,CHA,以及寄存器。
上一篇已經(jīng)講完了UBOX和PCU。
本篇來(lái)認(rèn)識(shí)一下IMC和IIO。

二、IMC
IMC 的全稱是Integrated Memory Controller,集成內(nèi)存控制器。IMC是內(nèi)存通道控制模組。一般來(lái)說(shuō)和CPU socket的CHA進(jìn)行通信。
我的Intel X86架構(gòu)系列開篇就說(shuō)過(guò)一句話:“不知從何時(shí),網(wǎng)上的資料就有一種說(shuō)法,intel CPU 已將系統(tǒng)板上傳統(tǒng)意義的北橋(north bridge)包含在CPU內(nèi)了?!逼鋵?shí)網(wǎng)上這句話的意思應(yīng)該是:系統(tǒng)板的北橋最重要的功能是內(nèi)存控制器;而現(xiàn)在的Intel CPU已經(jīng)將內(nèi)存控制器集成到了內(nèi)部。
所以,當(dāng)我們?nèi)サ鬋PU內(nèi)的其他模組、放大CPU的IMC區(qū)域,就會(huì)看到以下畫面:

圖片說(shuō)明:
1、 SKX CPU正常配置,一個(gè)socket里有兩個(gè)IMC,編號(hào)為IMC0,IMC1;(到目前為止,我只在某些Intel 特偏門的診斷案例總結(jié)里看到單個(gè)IMC的信息,但是現(xiàn)實(shí)中我所見的SKX CPU 都是兩個(gè)IMC)
2、 每個(gè)IMC 連出三個(gè) channel;
所以正常情況下,SKX CPU共有6個(gè)channel。Intel對(duì)6個(gè)channel的標(biāo)識(shí)是:
IMC0 channel0;
IMC0 channel1;
IMC0 channel2;
IMC1 channel0;
IMC1 channel1;
IMC1 channel2;
當(dāng)然有的時(shí)候,尤其是在CHA相關(guān)的寄存器中,intel CPU寄存器值或intel內(nèi)部文檔中,有時(shí)候是這么標(biāo)識(shí) channel的:
物理channel0;
物理channel1;
物理channel2;
物理channel3;
物理channel4;
物理channel5;
以上兩種標(biāo)識(shí)方法,對(duì)比同一個(gè)位置channel的兩個(gè)ID,其實(shí)也好理解。
注意一點(diǎn):上邊第二種標(biāo)識(shí)中,我用了物理 channel。之所以用“物理”二字,是因?yàn)?,在某些CPU寄存器里(用于address decode的某些寄存器) ,存在著 ”內(nèi)存邏輯 channel id”值。而“邏輯channel id”和“物理channel id”的值,是不同的!
3、 每個(gè)channel里,有兩個(gè)dimm槽位,分別為dimm0,dimm1;
關(guān)于這一點(diǎn),我也見到過(guò)些閹割設(shè)計(jì)的。例如我曾經(jīng)看到一款的skylake服務(wù)器,這款服務(wù)器的每個(gè)channel只有一個(gè)dimm槽位。
——可惜這種內(nèi)存架構(gòu),我遇見是在數(shù)年前。那時(shí),我還在為海水司的破刀片,破以太網(wǎng)交換模塊的破方案焦頭爛額,海水司哪有什么像樣的方案??????所以那時(shí)沒空搞明白超微這個(gè)IMC channel架構(gòu)究竟是怎么回事兒。
4、 某些服務(wù)器廠商,還經(jīng)常按照自己的規(guī)則來(lái)定義主板的內(nèi)存絲印編碼,例如:
DIMMCPU0A0
DIMMCPU0A1
DIMMCPU0B0
DIMMCPU0B1
… …
服務(wù)器廠商自己定義的這個(gè)內(nèi)存標(biāo)識(shí)絲印,與上面2、3 所述的intel內(nèi)存標(biāo)識(shí),二者之間的對(duì)應(yīng)關(guān)系,本應(yīng)該能通過(guò)正常的思維來(lái)推斷的。
但是,有時(shí)候海水司某些研發(fā)的思維,還真的反人類。某些拓?fù)?,不按?guī)矩出牌還美其名曰:技術(shù)保密。
呃,所以真的印證了那句話,你以為你以為的不見得就是你以為的。這個(gè)對(duì)應(yīng)關(guān)系還是拿到白紙黑字的對(duì)應(yīng)表才能讓人安心啊。
5、 此處挖一個(gè)技術(shù)小坑。
在SKX CPU里,當(dāng)出現(xiàn)了內(nèi)存錯(cuò)誤導(dǎo)致的MCE以后,若只通過(guò)MCE log(其實(shí)就是MCA相關(guān)MSR寄存器值),我們只能定位出錯(cuò)的 IMC channel,而無(wú)法定位channel下的某個(gè)dimm;
這是由于MCA 寄存器的定義導(dǎo)致的?!以谶@里先挖個(gè)小坑,我將會(huì)在后續(xù)的intel error handle architecture章節(jié)中具體敘述原因。
在這里注明這一點(diǎn),是因?yàn)?,海水司提供的所謂的離線診斷工具或云診斷工具啥的,有時(shí)候還居然能莫名其妙的根據(jù)MSR的寄存器值,無(wú)理的解析出了dimm的位置,神奇??!所以我一直不相信海水司的這些“診斷神器“的,真的不靠譜啊。我還是習(xí)慣對(duì)著一個(gè)個(gè)寄存器的的值,轉(zhuǎn)換成2進(jìn)制,然后一個(gè)bit一個(gè)bit的手?jǐn)]。雖然慢一點(diǎn),但是安心。例如公眾號(hào)最臨近發(fā)的那篇番外《如何從服務(wù)器寄存器日志診斷到物理部件》,就是一次手?jǐn)]的全過(guò)程。
好的,IMC本身的講解,先講到這里。
然后我想說(shuō),其實(shí)從數(shù)據(jù)流上說(shuō),IMC應(yīng)該和CHA放在一起講。因?yàn)楫?dāng)core 里的transaction需要讀取數(shù)據(jù)的時(shí),數(shù)據(jù)讀取的尋址的方式,是通過(guò)core(FLC)
到CHA(MLC,LLC),CHA到IMC,IMC到channel,到rank;
詳細(xì)的內(nèi)容以后講,以后講。CHA的System address decoder,是個(gè)獨(dú)立專題。這個(gè)專題,是導(dǎo)致我這一個(gè)月停更的大坑。我要好好想想該怎么寫。

三、IIO
IIO的全稱Integrated I/O module,集成IO模組。如下圖藍(lán)色橢圓處:

IIO module 其實(shí)就是我們之前說(shuō)的CPU直連PCIE 的四個(gè)stack模組。
每個(gè)SKX CPU的 IIO modules有四個(gè):
DMI3:有時(shí)候又稱為IOU0。是個(gè)PCIE3x4的PCIE STACK。在CPU0中的DMI3通常用于連接 PCH;
PCIE1:有時(shí)候又稱為IOU1。是個(gè)PCIE3x16的PCIE STACK。
PCIE2:有時(shí)候又稱為IOU2。是個(gè)PCIE3x16的PCIE STACK。
PCIE3:有時(shí)候又稱為IOU3。是個(gè)PCIE3x16的PCIE STACK。
PCIE1,2,3,提供給了服務(wù)器品牌廠商,服務(wù)器品牌廠商根據(jù)自己的服務(wù)器定位以及客戶需求,會(huì)對(duì)PCIE1,2,3,進(jìn)行分劈形成一個(gè)一個(gè)的rootPort(例如,pcie1 從 一個(gè)pcie3x16分成 兩個(gè)pcie3x8或四個(gè)pcie3x4)。
——所以,在度娘的很多搜索資料里,所謂“SKylake CPU提供了48個(gè)直連PCIE lane”,意思就是PCIE1,2,3加起來(lái)總共提供了48條 pcie gen3 lanes。如下圖:

所謂的PCIE stack,是指該iio module 可以根據(jù)需要將所包含的16個(gè)lane做以下操作:
1、直接形成一個(gè)x16的PCIE rootport;(例如用于GPU)
或者
2、分劈成兩個(gè)x8的PCIE rootport;(例如萬(wàn)兆網(wǎng)卡);
或者
3、分劈成四個(gè)x4 PCIE rootport;(例如用于NVME);
或者
4、分劈成三個(gè)PCIE rootport: x8,x4,x4;
這里還是要說(shuō)一點(diǎn),在某些海水司研發(fā)的ppt資料里解釋說(shuō)PCIE STACK就是PCIE switch。這種說(shuō)法我認(rèn)為是不對(duì)的。
我認(rèn)為IIO/PCIE STACK屬于pci的root complex的范疇?;蛘哒f(shuō)可以簡(jiǎn)單的認(rèn)為是個(gè)pcie hub,是將16個(gè)lanes進(jìn)行分劈(intel 用bifurcate這個(gè)詞)形成一個(gè)或多個(gè)root port。
而PCIE switch則能夠?qū)崿F(xiàn)PCIE帶寬復(fù)用。也就例如說(shuō):一個(gè)x16 的PCIE 通道輸入到PCIE switch ,PCIE switch可以分出四個(gè) x16的輸出Port。PCIE switch的實(shí)際產(chǎn)品例如BRODCOM PEX9797。
然后我覺得有必要對(duì)比一下skylake 的前一代和skylake 之間在PCIE總線架構(gòu)的區(qū)別了。
Intel 的前一代v3/v4 CPU(broadwell &haswell),操作系統(tǒng)所能看到的、用于掛載MMIO設(shè)備(也是一個(gè)DMI和三個(gè) PCIE module)的bus只有一條(其實(shí)操作系統(tǒng)還能看到另外一條bus,那條bus只掛載控制類的module),CPU的四個(gè)IIO module,都是掛在這同一個(gè)PCI BUS0上的,如下圖:

而skx 內(nèi),操作系統(tǒng)所能看到的、用于掛載 MMIO設(shè)備的總線,擴(kuò)展到了4條。每個(gè)IIO module都掛在獨(dú)立的bus上。如下圖:

所以從這二者的對(duì)比可以看出:skylake CPU在PCIE尋址方面應(yīng)該是比上一代Haswell要優(yōu)化一些的。
以后到SKX CPU PCI BUS總線架構(gòu)中再詳細(xì)講,詳細(xì)講。

四、此篇總結(jié)
截至目前,CPU的uncore 部件 IMC和IIO已經(jīng)講完。標(biāo)志著我們已將SKX CPU的結(jié)構(gòu)簡(jiǎn)單的遍歷了一遍。就如同我們面對(duì)著一個(gè)喜馬拉雅雪怪,我們現(xiàn)在已經(jīng)知道這是頭,這是胳膊,這是腿,這是尾巴。
此時(shí),若再有這樣的一幅圖放在你面前:

我們的眼睛應(yīng)該會(huì)先從CPU開始,對(duì),就是標(biāo)著skylake CPU的那倆,
=>左右兩邊,每個(gè)CPU各6個(gè)內(nèi)存channel,喔,喔,CPU里有兩個(gè)IMC,每個(gè)IMC各控制3個(gè)channel,對(duì)的。
=>左右的中間,CPU0和CPU1通過(guò)UPI相連,對(duì)的。
=>從上往下,CPU0的DMI3連接到了PCH Lewisburg上,喔喔,一堆的SATA,USB等慢速設(shè)備接口都是PCH上的lanes轉(zhuǎn)變出來(lái)的。
=>再回到CPU0,1,喔喔PCIE1,2,3被劈成了若干個(gè)PCIE conn。咦,怎么還有X24的PCIE conn?裝B,一定是裝B,不可能是一個(gè)pcie槽,一定是x16+x8偽裝的……
=>當(dāng)然右下角還有個(gè)BMC,那是我們實(shí)現(xiàn)服務(wù)器可服務(wù)性的最重要的管理接口(ipmi)。
——啊,從今天起,我們將不再是陌生人。
其實(shí)CPU的uncore部件里,還有一個(gè)UPI沒有講。UPI涉及socket與socket的互聯(lián)。如果我們不涉及2路,4路,8路CPU的互聯(lián)拓?fù)?,UPI就幾乎涉及不到了。所以UPI不講了。
服務(wù)器的架構(gòu),終究是以實(shí)現(xiàn)功能邏輯為目的的?,F(xiàn)代的CPU socket更是整個(gè)服務(wù)器架構(gòu)的核心功能部件組,牢牢把握著功能邏輯的控制權(quán)。
當(dāng)然服務(wù)器架構(gòu)中還有幾個(gè)具有“相對(duì)獨(dú)立”的諸侯,例如BMC,raid card,GPU 加速card,F(xiàn)PGA等。這幾個(gè)領(lǐng)域又在CPU+chipset 的大王國(guó)里,形成了依附的小諸侯國(guó)。
但不可否認(rèn),intel CPU+chipset是X86服務(wù)器架構(gòu)的基礎(chǔ)。所以本系列接下來(lái)將分析skylake CPU的ras功能實(shí)現(xiàn)以及某些服務(wù)器產(chǎn)品的內(nèi)存編址和pci架構(gòu),一窺intel x86服務(wù)器架構(gòu)。
按照intel xeon的習(xí)慣,一代平臺(tái)搭載兩代CPU,例如grantley平臺(tái)搭載v3和v4 CPU。而這兩代CPU,架構(gòu)基本相同。intel這種玩法,被人詬病為“擠牙膏”。同樣我講的skylake和目前剛開始量產(chǎn)的cascadelake服務(wù)器,估計(jì)也是這種玩法。真正架構(gòu)要發(fā)生變化的,要等whiteley平臺(tái)+Cooperlake/icelake了。
以下兩類“流”,是我用最簡(jiǎn)單的語(yǔ)言來(lái)概括我對(duì)的skylakeCPU架構(gòu)功能的理解,不一定嚴(yán)謹(jǐn):
Skylake CPU的狀態(tài)控制流:
1、Core <=>UBOX<=>uncore各個(gè)組件;
2、Core <=>PCU<=>外部;
Skylake CPU的數(shù)據(jù)流:
1、Cache 缺頁(yè):Core <=>cache <=>mem(imc);
2、DCA:Core <=> cache<=>PCIE;
3、DMA: mem(imc)<=>PCIE;
后面,我們將以功能的角度,展現(xiàn)功能所需要的寄存器,以及寄存器的數(shù)據(jù)結(jié)構(gòu)。力圖最終展現(xiàn)出intel X86架構(gòu)的邏輯。
目前能想到的專題是:
1、 intel 嚴(yán)重錯(cuò)誤MCE and IERR處理架構(gòu)。
2、 PCI基礎(chǔ)知識(shí)和SKX CPU PCI BUS總線架構(gòu)。
3、 PCIE 錯(cuò)誤處理機(jī)制
4、 CHA DRAM尋址機(jī)制。
5、 CHA MMIO&MMCFG尋址機(jī)制。
6、 UEFI 引導(dǎo)、PCIBUS編址和APEI初始化
7、 X86服務(wù)器硬件可維護(hù)性架構(gòu)。
8、 X86服務(wù)器日志分析實(shí)戰(zhàn)。
9、 海水司服務(wù)器NF5280M5可維護(hù)性缺陷分析。
——呃,當(dāng)這些專題逐一羅列出來(lái)后才發(fā)現(xiàn),我還真是售后出身的不入流啊……
用一則現(xiàn)代寓言作為本片結(jié)尾。
文化苦旅
十年前的北京,掃黃時(shí),抓了一個(gè)小姐。
檢查小姐姐的包——除卻那類物品,赫然一本《文化苦旅》。
警察蜀黍覺得奇怪:一個(gè)小姐,隨身揣本書干啥。
小姐回答:現(xiàn)如今客人的品味越來(lái)越高,只有隨時(shí)隨地學(xué)習(xí),不斷加強(qiáng)自身文化修養(yǎng),才能為客人提供全方位高層次的精神體驗(yàn)。
十年后的濟(jì)南,又有一個(gè)小姐,接客休息的當(dāng)口,看了同一本書,結(jié)果被媽媽桑臭罵不務(wù)正業(yè)。
發(fā)布于 2020-06-03 17:22
「真誠(chéng)贊賞,手留余香」
還沒有人贊賞,快來(lái)當(dāng)?shù)谝粋€(gè)贊賞的人吧!
x86
服務(wù)器架構(gòu)
英特爾 (Intel)