最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【知乎】INTEL x86服務(wù)器體系架構(gòu)(四)CHA和cache

2023-12-03 06:53 作者:失傳技術(shù)  | 我要投稿


INTEL x86服務(wù)器體系架構(gòu)(四)CHA和cache


雪瀑牽裳


IT 老棒槌

關(guān)注他

37 人贊同了該文章

CHA和cache

上一期,講到了虛頭八腦的知識(shí)體系結(jié)構(gòu)。

這個(gè)知識(shí)體系范疇說(shuō)虛也虛,說(shuō)實(shí)也實(shí)。在年輕的時(shí)候,我也特別不屑這種抽象體系。但是等個(gè)人經(jīng)驗(yàn)(格物)積累到一定程度,就對(duì)其有所感悟了(致知)。

舉個(gè)現(xiàn)實(shí)的例子,某人,兩個(gè)月前還是個(gè)x86小白。就是通過(guò)這個(gè)知識(shí)體系結(jié)構(gòu)開(kāi)始學(xué)習(xí),兩個(gè)月后能夠從寄存器原理上推斷出某司的服務(wù)器診斷工具所提供的解析結(jié)果是錯(cuò)誤的;也能通過(guò)x86架構(gòu)知識(shí)來(lái)推導(dǎo)某些冷僻參數(shù)在CMOS的目錄位置。

再舉一個(gè)關(guān)于自己的慘痛例子。其實(shí)我現(xiàn)在最后悔的是,當(dāng)年上大學(xué)時(shí)對(duì)計(jì)算機(jī)應(yīng)用學(xué)科特別重視,而對(duì)基礎(chǔ)學(xué)科重視不夠。尤其各種數(shù)學(xué),當(dāng)時(shí)不過(guò)混個(gè)考試通過(guò)而已。

如今二十年過(guò)去了,我當(dāng)年所重視的應(yīng)用課程,例如什么C語(yǔ)言、面向?qū)ο蟮龋F(xiàn)如今都已經(jīng)成了初中畢業(yè)、高中畢業(yè)后的社會(huì)職業(yè)培訓(xùn)課程了。再靠這類應(yīng)用課程內(nèi)容吃飯,頂多就是個(gè)IT民工。而如今如火如荼的AI,打入門(mén)都是從模糊數(shù)學(xué)、算法講起。此時(shí)我再想深入接觸,感覺(jué)連都看都看不明白了。不禁感慨,難道自己真的要落伍了么?

基礎(chǔ)知識(shí)的積累真的是太重要了,就像是房子的地基。個(gè)人掌握的基礎(chǔ)知識(shí)深厚程度,未來(lái)會(huì)直接決定應(yīng)用知識(shí)學(xué)習(xí)的高度。

所以現(xiàn)在,雖然我也會(huì)為上小學(xué)的孩子報(bào)一門(mén)計(jì)算機(jī)類的課外輔修課程,但是我一直告誡他,這些課只是給他開(kāi)拓一下眼界而已。目前階段,學(xué)好語(yǔ)數(shù)外,打好基礎(chǔ)是最最重要的。

再回到這個(gè)專題,上期文檔中所說(shuō)的知識(shí)體系,其實(shí)不過(guò)是知識(shí)體系的基礎(chǔ),甚至還未涉及到人員、渠道、外圍接口等知識(shí)體系的幾大要素呢。這些要素同樣非常的重要。例如,沒(méi)有老師,我的好多知識(shí)點(diǎn)就只能通過(guò)自己的聯(lián)想和假設(shè),只能通過(guò)以后的時(shí)間和鮮血來(lái)印證,這無(wú)疑是知識(shí)成長(zhǎng)的一大障礙。(師者,所以傳道授業(yè)解惑也。)

后面的內(nèi)容中會(huì)逐漸暴露出這一點(diǎn),我在今后的內(nèi)容中也會(huì)列出未自己的想法和未驗(yàn)證的猜測(cè)。(學(xué)而不思則罔。)

另外即使是算作資料體系,其實(shí)也還沒(méi)包括其他兩個(gè)重要分支:診斷和調(diào)優(yōu)。如果將來(lái)有時(shí)間,將會(huì)再開(kāi)這兩個(gè)子寫(xiě)列。

接著上篇留下的尾巴講。

一、SKXCPU內(nèi)部架構(gòu)

CPU內(nèi)部的邏輯圖如下:

上圖中,除了core以外,所有的模組都屬于uncore modules。

首先intel資料里一句話要強(qiáng)調(diào)一下:“skx CPU可以支持地址空間 48 bits,物理地址空間 46 bits?!??!@句話,我的理解有2:

1、目前x86的64位還不是真正的64位,而是32位的擴(kuò)展。內(nèi)存物理空間46bits>32bits。CPU里好多寄存器還都保留著32位的影子,例如內(nèi)部好多csr寄存器還是32位的;例如好多MCA寄存器仍然以IA32來(lái)開(kāi)頭。

2、另外這里的地址空間指的是虛擬地址空間也就是線性空間。這句話又牽扯到后期linux 內(nèi)核部分的線性空間與物理空間的轉(zhuǎn)換(MMU四層尋址)。

各個(gè)部件說(shuō)明:

一、Mesh/Mesh stop

上面圖中 左右雙線綠色的通道/上下雙線藍(lán)色,形成了一個(gè)個(gè)方形漁網(wǎng)網(wǎng)格,類似于下面這樣一個(gè)一個(gè)方形小單元:

Intel將這個(gè)方形小單元叫做Mesh interconnect。

但是我手頭的intel資料描述里,這個(gè)mesh結(jié)構(gòu)的直接部件也就是個(gè)Meshstop,且資料里也沒(méi)對(duì)這個(gè)meshstop說(shuō)出個(gè)實(shí)際的功能1,2,3;只是說(shuō)這個(gè)mesh架構(gòu)與UPI連接有密切關(guān)系。另外后續(xù)相關(guān)的寄存器診斷中,基本看不到涉及mesh的相關(guān)內(nèi)容。

但是如果我們將前一代broadwell CPU和Skylake CPU的結(jié)構(gòu)圖對(duì)比看,我們可以發(fā)現(xiàn):

前一代的CPU的core/uncore部件之間是基于兩個(gè)loop ring的;

而Skylake CPU core/uncore部件之間已經(jīng)是基于這個(gè)Mesh網(wǎng)格了。

——所以從理論上說(shuō),core到最遠(yuǎn)uncore部件的路徑在skylake CPU上被縮小了。所以理論上性能也提高了。

二、Cores

一個(gè)物理cpu socket 內(nèi)部的多個(gè)核,這個(gè)核就是core,這個(gè)核就是以前我上大學(xué)時(shí)課本里CPU的范疇。后來(lái)intel一個(gè)cpu包括了多個(gè)核,以及這個(gè)模塊、那個(gè)模塊的,所以如今你大爺仍然是你大爺,CPU卻已經(jīng)不是原來(lái)的CPU了。

所以在這里規(guī)范一下我的X86架構(gòu)和linux內(nèi)核兩個(gè)系列中的相關(guān)名詞定義:

Socket:是指物理的一個(gè)CPU,就是那個(gè)實(shí)實(shí)在在的能拿在手里砸你腦袋的小板磚。例如一個(gè)2路服務(wù)器,有兩個(gè)socket,那么在其第一層Linux操作系統(tǒng)里,一個(gè)socket對(duì)應(yīng)一個(gè)physical ID。

Cores:一個(gè)socket內(nèi)部的多個(gè)處理核心。例如同樣是上面這個(gè)2路服務(wù)器一個(gè)socket CPU有16 cores,那么在個(gè)2路服務(wù)器共有32 cores。在其第一層Linux操作系統(tǒng)里,一個(gè)socket 的core對(duì)應(yīng)該phsical ID下的一個(gè)core ID:

physical id 0的coreID 0~15;

physical id 1的coreID 0~15;

Processor:如果bios里打開(kāi)的超線程,一個(gè)core 又變成了兩個(gè)邏輯,每個(gè)邏輯被稱為一個(gè)processor。那么隨著上面的例子,打開(kāi)了超線程情況下,該2路服務(wù)器的redhat操作系統(tǒng)看到了64個(gè) processor。在redhat的proc/cpuinfo里processor對(duì)應(yīng)著一個(gè)processor。這個(gè)proessor的編號(hào)稍微復(fù)雜一些,coreid根據(jù)超線數(shù)量做了一次interleave。呃,具體的,自己去看操作系統(tǒng)的說(shuō)明吧。

我們?cè)購(gòu)牟僮飨到y(tǒng)回到硬件層面,硬件層面架構(gòu)以及寄存器診斷只看到socket和core,所以有時(shí)候,某些司的服務(wù)器底層硬件日志中出現(xiàn)了proc這個(gè)關(guān)鍵字,而“proc”又代表了core……到時(shí)候怎么辦?扳著手指頭數(shù)數(shù)吧……

至于skx系列的CPU類型和CoreNums 甩出個(gè)圖,不多說(shuō)了:

又分鉑金系列、金牌系列、銀牌系列、銅牌系列——這是從網(wǎng)上找的圖,相關(guān)的內(nèi)容歸售前死記硬背狂噴去吧,對(duì)錯(cuò)我也不care。

Core里相關(guān)的寄存器說(shuō)明,在以后的寄存器部分詳細(xì)說(shuō)。

三、CHA與CACHE

FLC又叫一級(jí)緩存, 分為 DCU(data) and ICU(instruction), FLC就是core內(nèi)的L1 cache。上面這個(gè)圖沒(méi)有標(biāo)識(shí)出。

MLC又叫二級(jí)緩存,就是 core 外部的L2 cache(skylake將MLC放到了core外)。由CHA部件管理。

LLC又叫三級(jí)緩存,就是 core外部的L3 cache。

CHA 包括了以下部分的功能:

1、 cache管理——就是CHA的C了,就是之前Broadwell資料中對(duì)應(yīng)的cache agent(CBO)。用來(lái)保存一些cache的meta信息,管理LLC和MLC。

CBO里有一個(gè)很重要的TOR_table,來(lái)保存core的未完成的transactions;

TOR_table 示意圖如下:

未來(lái),我們會(huì)接觸到很有名的“三振超時(shí)”故障,原因是:有長(zhǎng)時(shí)間的transactions占用core、且無(wú)法切換出core。該故障其中的一個(gè)關(guān)鍵字就是TOR_TMOUT。(當(dāng)然MLC里也有對(duì)應(yīng)寄存器報(bào)錯(cuò))

2、 core與內(nèi)存控制器imc的接口?!褪侵暗膆ost agent。

3、 另外,skylake加入了新的子部件 snoop filter來(lái)實(shí)現(xiàn)/優(yōu)化core與其他core之間的cache數(shù)據(jù)同步;

所謂的優(yōu)化,我的理解是:snoop filter里面有個(gè)表數(shù)據(jù)結(jié)構(gòu),記錄同一塊數(shù)據(jù)所關(guān)聯(lián)的core;如果有cache同步的需求,request從過(guò)去的閉著眼廣播模式轉(zhuǎn)變成了Point to target的模式,這樣就減少了總線負(fù)載。

在skylake架構(gòu)中,CHA是分布到每個(gè)core上的,CHA的編號(hào)與core的編號(hào)相同?!@點(diǎn)與上一代的broadwell/haswell不同。CHA、MLC部分涉及到相關(guān)的cache策略,所以是服務(wù)器性能調(diào)優(yōu)的重要組成部分。

Cache調(diào)優(yōu)的關(guān)鍵字:prefetch,或stream。CMOS的某些設(shè)置項(xiàng)與其有直接關(guān)聯(lián)。

另外CHA、MLC相關(guān)寄存器又涉及到服務(wù)器診斷尤其是IERR錯(cuò)誤診斷。

關(guān)于CHA、MLC的疑惑和猜想(18年12月立碑):

1、 在CHA部分中LLC的描述為11-ways;MLC的描述為8-ways?!猚ache是一個(gè)存儲(chǔ)空間,cache有什么11路和8路之說(shuō)?這種說(shuō)法究竟是個(gè)什么意思?

19年3月的回答:

這個(gè)要從cache的數(shù)據(jù)結(jié)構(gòu)說(shuō)起。

Cache的數(shù)據(jù)結(jié)構(gòu)分成兩層:

每一級(jí)cache,內(nèi)有多個(gè)相等的set。

Set:又叫組。每個(gè)組里有多個(gè)line。

line:是cache數(shù)據(jù)調(diào)入調(diào)出的原子單位。Line的大小又叫l(wèi)inesize。Linesize一般是64B的倍數(shù)。我記得skylake CPU的linesize是256B。

一個(gè)set組包括多少個(gè)line——專業(yè)的說(shuō)法叫 多少個(gè)way 同組。

這里的11-ways,8-ways,就是指 每個(gè)set里有11個(gè)line,或沒(méi)個(gè)set里有8個(gè)line。

2、 根據(jù)intel EDS的暗示,CHA似乎分成了三個(gè)組

CHA0,3,6,9,12,,,,,

CHA1,4,7,10,13,,,,,

CHA2,5,8,11,14,,,,,

——CHA以3為interleave分布在三個(gè)組。

目前看skylake最多32個(gè)core,那么每個(gè)CHA組的成員上限是11個(gè),那這個(gè)11是不是就是問(wèn)題1里面的11-ways?

3、 我曾在一個(gè)LINUX crash分析案例中看到,如果cpu里的某個(gè)進(jìn)程出現(xiàn)了一個(gè)spinlock死鎖,那么我們可以以常量NUM_INVALID_TLB_VECTORS為interleave,通過(guò)進(jìn)程當(dāng)前的CPUID%NUM_INVALID_TLB_VECTORS得到的余數(shù)來(lái)獲得同組相關(guān)的CPU編號(hào),從而得到需要同時(shí)flush TLB的CPU組,從而找到spinlock可能影響的CPU們,以及上面的進(jìn)程。

——這個(gè)Flush TLB組和這個(gè)CHA組是否有關(guān)聯(lián)?

——此處立個(gè)墓碑,等以后尋找答案了。

發(fā)布于 2019-03-27 13:43

x86


發(fā)布一條帶圖評(píng)論吧


7 條評(píng)論

默認(rèn)

最新

王宇明

感謝你的文章,讓我最近初做Skylake設(shè)計(jì)時(shí)解答了我不少疑問(wèn)

2019-06-18

回復(fù)1

Joshua

不知道從哪開(kāi)始就看不懂了

2021-11-19

回復(fù)喜歡

spices

非常不理解,現(xiàn)在intel的 Intel 64是啥?

2021-09-14

回復(fù)喜歡

莊周吃蝴蝶

大佬需要徒弟嗎

2021-03-11

回復(fù)喜歡

莊周吃蝴蝶

忍不住先來(lái)評(píng)論,基礎(chǔ)真的很重要,基礎(chǔ)決定上層建筑啊

2021-03-11

回復(fù)喜歡

江湖人啊Q

期待更新啊

2020-07-20

回復(fù)喜歡

小馬甲

催更

2019-04-19


【知乎】INTEL x86服務(wù)器體系架構(gòu)(四)CHA和cache的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
锡林郭勒盟| 隆德县| 潮安县| 六安市| 武川县| 蒙阴县| 墨玉县| 于田县| 南宫市| 舟山市| 麦盖提县| 扎囊县| 宁海县| 宝鸡市| 双峰县| 积石山| 万山特区| 长汀县| 垣曲县| 曲阜市| 漳浦县| 柳江县| 青川县| 静海县| 曲阳县| 景泰县| 公安县| 金山区| 阳泉市| 且末县| 醴陵市| 九江县| 旬阳县| 正镶白旗| 蓝山县| 东至县| 横山县| 延吉市| 富民县| 营口市| 乌鲁木齐县|