為了讓程式能快點,特意瞭解了CPU的各種原理,比如多核、超線程、NUMA、睿頻、功耗、GPU、大小核再到分支預測、cache_line失效、加鎖代價、IPC等各種指標(都有對應的代碼和測試數據)都會在這系列文章中得到答案。當然一定會有程式員最關心的分支預測案例、Disruptor無鎖案例、cache ...
為了讓程式能快點,特意瞭解了CPU的各種原理,比如多核、超線程、NUMA、睿頻、功耗、GPU、大小核再到分支預測、cache_line失效、加鎖代價、IPC等各種指標(都有對應的代碼和測試數據)都會在這系列文章中得到答案。當然一定會有程式員最關心的分支預測案例、Disruptor無鎖案例、cache_line偽共用案例等等。
這次讓我們從最底層的沙子開始用8篇文章來回答各種疑問以及大量的實驗對比案例和測試數據。
大的方面主要是從這幾個疑問來寫這些文章:
- 同樣程式為什麼CPU跑到800%還不如CPU跑到200%快?
- IPC背後的原理和和程式效率的關係?
- 為什麼資料庫領域都愛把NUMA關了,這對嗎?
- 幾個國產晶元的性能到底怎麼樣?
系列文章
Intel PAUSE指令變化是如何影響自旋鎖以及MySQL的性能的
AMD Zen CPU 架構 以及 AMD、海光、Intel、鯤鵬的性能對比
幾個重要概念
為了增加對文章的理解先解釋下幾個高頻概念
Wafer:晶圓,一片大的純硅圓盤,新聞里常說的12寸、30寸晶圓廠說的就是它,光刻機在晶圓上蝕刻出電路
Die:從晶圓上切割下來的CPU(通常一個Die中包含多個core、L3cache、記憶體介面、GPU等,core裡面又包含了L1、L2cache),Die的大小可以自由決定,得考慮成本和性能, Die做成方形便於切割和測試,伺服器所用的Intel CPU的Die大小一般是大拇指指甲大小。
封裝:將一個或多個Die封裝成一個物理上可以售賣的CPU
路:就是socket、也就是封裝後的物理CPU
node:同一個Die下的多個core以及他們對應的記憶體,對應著NUMA
售賣的CPU實物
購買到的CPU實體外觀和大小,一般是40mm X 50mm大小,可以看出一個CPU比一個Die大多了。
裸片Die 製作
晶圓為什麼總是圓的呢?生產過程就是從沙子中提純硅,硅晶柱生長得到晶圓,生長是以圓柱形式的,所以切割下來的晶圓就是圓的了:
硅晶柱切片:
直徑為 300 毫米的純硅晶圓(從硅柱上切割下來的圓片),俗稱 12 寸晶圓,大約是 400 美金。但尺寸並不是衡量硅晶圓的最重要指標,純度才是。日本的信越公司可以生產 13 個 9 純度的晶圓。
高純硅的傳統霸主依然是德國Wacker和美國Hemlock(美日合資),中國任重而道遠。太陽能級高純硅要求是99.9999%,低純度的硅全世界超過一半是中國產的,但是不值錢。而晶元用的電子級高純硅要求99.999999999%,幾乎全賴進口,直到2018年江蘇鑫華公司才實現量產,目前年產0.5萬噸,而中國一年進口15萬噸。核心材料技術這塊毫無疑問“外國仍然把中國摁在地上摩擦”。
晶元設計
主要依賴EDA, EDA工具是電子設計自動化(Electronic Design Automation)的簡稱,從電腦輔助設計(CAD)、電腦輔助製造(CAM)、電腦輔助測試(CAT)和電腦輔助工程(CAE)的概念發展而來的,是IC基礎設計能力。利用EDA工具,工程師將晶元的電路設計、性能分析、設計出IC版圖的整個過程交由電腦自動處理完成。
EDA軟體方面早已形成了三巨頭——Synopsys、Cadence、Mentor。Synopsys是EDA三巨頭之首,國內從事EDA軟體開發的華大九天和這三家比起來不是一個數量級。國內IC設計公司幾乎100%採用國外EDA工具,在未來的相當長的一段時間里,我們應該看不到縮小和Synopsys、Cadence、Mentor技術差距的可能性。
光刻
使用特定波長的光,透過光罩(類似印炒裡面的母版),照射在塗有光刻膠的晶圓上,光罩上晶元的設計圖像,就複製到晶圓上了,這就是光刻,這一步是由光刻機完成的,光刻機是晶元製造中光刻環節的核心設備。你可以把光刻理解為,就是用光罩這個母版,一次次在晶圓上印電路的過程。
光刻是最貴的一個環節,一方面是光罩越來越多,越來越貴,另一方面光刻機也很貴。光刻機是半導體製造設備中價格占比最大,也是最核心的設備。2020 年荷蘭公司 ASML 的極紫外光源(EUV)光刻機每台的平均售價是 1.45 億歐元,而且全世界獨家供貨,年產量 31 台,有錢也未必能買得到。
短波長光源是提高光刻機分辨力的有效方,光刻機的發展歷史,就從紫外光源(UV)、深紫外光源(DUV),發展到了現在的極紫外光源(EUV)。
回顧光刻機的發展歷史,從 1960 年代的接觸式光刻機、接近式光刻機,到 1970 年代的投影式光刻機,1980 年代的步進式光刻機,到步進式掃描光刻機、浸入式光刻機和現在的深紫外光源(DUV)和極紫外光源(EUV)光刻機,一邊是設備性能的不斷提高,另一邊是價格逐年上升,且供應商逐漸減少。到了 EUV 光刻機,ASML(阿斯麥) 就是獨家供貨了。英特爾有阿斯麥15%的股份,台積電有5%,三星有3%,另外美國弄了一個《瓦森納協定》,敏感技術不能賣,中國、北韓、伊朗、利比亞均是被限制國家。
品質合格的die切割下去後,原來的晶圓成了下圖的樣子,是挑剩下的Downgrade Flash Wafer。殘餘的die是品質不合格的晶圓。黑色的部分是合格的die,會被原廠封裝製作為成品NAND顆粒,而不合格的部分,也就是圖中留下的部分則當做廢品處理掉。
從晶圓上切割檢測合格的Die(螺片),所以Die跟Wafer不一樣不是圓的,而是是方形的,因為方形的在切割封測工藝上最簡單
一個大晶圓,拿走了合格的Die後剩下的次品:
可見次品率不低,後面會談到怎麼降低次品率,次品率決定了CPU的價格。
台積電一片 5nm 晶圓的加工費高達 12500 美金。根據台積電的財報推算,台積電平均每片晶圓可以產生近 4000 美金(300mm 晶圓)的利潤。無論是哪個數字,對比 400 美金的純硅晶圓原料來說,這都是一個至少增值 10 倍的高價值的加工過程。
隨著Die的縮小,浪費的比例也從36%縮小成為12.6%。根據極限知識,我們知道如果Die的大小足夠小,我們理論上可以100%用上所有的Wafer大小。從中我們可以看出越小的Die,浪費越小,從而降低CPU價格,對CPU生產者和消費者都是好事。
光刻機有一個加工的最大尺寸,一般是 858mm²,而 Cerebras 和台積電緊密合作,做了一個 46255mm²,1.2T 個晶體管的世界第一大晶元。這也是超摩爾定律的一個突破。
AMD在工藝落後Intel的前提下,又想要堆核,只能採取一個Package封裝4個獨立Die的做法,推出了Zen1 EPYC伺服器晶元,即不影響良率,又可以核心數目好看,可謂一舉兩得。
可惜連接四個Die的片外匯流排終歸沒有片內通信效率高,在好些benchmark中敗下陣來,可見沒有免費的午餐。
Intel的Pakcage內部是一個Die, Core之間原來是Ring Bus,在Skylake後改為Mesh。AMD多Die封裝的目的是省錢和增加靈活性!AMD每個Zeppelin Die都比Intel的小,這對良品率提高很大,節約了生產費用。
這種膠水核強行將多個die拼一起是沒考慮跨die之間的延遲,基本上跨die跟intel跨socket(numa)時延一樣了。
一顆晶元的 1/3 的成本,是花在封測階段的
一個晶體管(納米尺度),註意三個黃色的導電銅點
對應的一個邏輯意義上的NPMOS 晶體管:
MOS :金屬-氧化物-半導體,而擁有這種結構的晶體管我們稱之為MOS晶體管。 MOS晶體管有P型MOS管和N型MOS管之分。 由MOS管構成的集成電路稱為MOS集成電路,由NMOS組成的電路就是NMOS集成電路,由PMOS管組成的電路就是PMOS集成電路,由NMOS和PMOS兩種管子組成的互補MOS電路,即CMOS電路
Die和core
One die with multiple cores,下圖是一個Die內部圖:
或者Skylake:
將兩個Die封裝成一塊CPU(core多,成本低):
第4代酷睿(Haswell)的die:
第4代酷睿(Haswell)的die主要分為幾個部分:GPU、4個core、System Agent(uncore,類似北橋)、cache和記憶體控制器和其他小部件。比如我們發現core 3和4有問題,我們可以直接關閉3和4。壞的關掉就是i5, 都是好的就當i7來賣。
北橋和南橋
早期CPU core和記憶體硬碟的連接方式(FSB 是瓶頸):
個人PC主板實物圖:
由於FSB變成了系統性能的瓶頸和對多CPU的制約,在台式機和筆記本電腦中,MCH(Memory Control Hub)被請進CPU中,伺服器市場雖然短暫的出現了IOH。
集成北橋後的記憶體實物圖:
北橋已經集成到CPU中,南橋還沒有,主要是因為:集成後Die增大不少,生產良品率下降成本上升;不集成兩者採用不同的工藝;另外就是CPU引腳不夠了!
SoC(System on Chip):南橋北橋都集成在CPU中,單晶元解決方案。ATOM就是SoC
現代CPU的基本架構
下圖是一個兩路的伺服器結構,每路4個記憶體channel
一個Core的典型結構
Intel skylake 架構圖
iTLB:instruct TLB
dTLB:data TLB
多個core加上L3等組成一個Die:
多核和多個CPU
如果要實現一臺48core的計算能力的伺服器,可以有如下三個方案
方案1:一個大Die集成48core:
方案2:一個CPU封裝8個Die,也叫MCM(Multi-Chip-Module),每個Die 6個core
四個Die之間的連接方法:
上圖最下麵的方案為Intel採用的EMIB(Embedded Multi-die Interconnect Bridge)方案,cost 最低。中間的方案是使用“硅中介層”(Interposer,AMD採用的方案)。這意味著你能在兩枚主要晶元的下麵放置和使用第三枚晶元。這枚晶元的目的是使得多個設備的連接更加容易,但是也帶來了更高的成本。
方案3:四個物理CPU(多Socket),每個物理CPU(Package)裡面一個Die,每個Die12個core:
三者的比較:
性能肯定是大Die最好,但是良品率低、成本高;
方案2的多個Die節省了主板上的大量佈線和VR成本,總成本略低,但是方案3更容易堆出更多的core和記憶體
面積和性能
我們使用了當時Intel 用在數據中心計算的大核CPU IvyBridge與當時用於 存儲系列的小核CPU Avoton(ATOM), 分別測試阿裡巴巴的workload,得到性能吞吐如下:
Intel 大小CPU 核心 | 阿裡 Workload Output(QPS) |
---|---|
Avoton(8 cores) 2.4GHZ | 10K on single core |
Ivy Bridge(2650 v2 disable HT) 2.6GHZ | 20K on single core |
Ivy Bridge(2650 v2 enable HT) 2.4GHZ | 25K on single core |
Ivy Bridge(2650 v2 enable HT) 2.6GHZ | 27K on single core |
- 大小核心直觀比較:超線程等於將一個大核CPU 分拆成兩個小核,Ivy Bridge的數據顯示超線程給 Ivy Bridge 1.35倍(27K/20K) 的提升
- 性能與晶元面積方面比較:現在我們分別評判 兩種CPU對應的性能密度 (performance/core die size) ,該數據越大越好,根據我們的計算和測量發現 Avoton(包含L1D, L1I, and L2 per core)大約是 3~4平方毫米,Ivy Bridge (包含L1D, L1I, L2 )大約是12~13平方毫米, L3/core是 6~7平方毫米, 所以 Ivy Bridge 單核心的晶元面積需要18 ~ 20平方毫米。基於上面的數據我們得到的 Avoton core的性能密度為 2.5 (10K/4sqmm),而Ivy Bridge的性能密度是1.35 (27K/20sqmm),因此相同的晶元面積下 Avoton 的性能是 Ivy Bridge的 1.85倍(2.5/1.35).
- 性能與功耗方面比較: 從功耗的角度看性能的提升的對比數據,E5-2650v2(Ivy Bridge) 8core TDP 90w, Avoton 8 core TDP 20瓦, 性能/功耗 Avoton 是 10K QPS/20瓦, Ivy Bridge是 27KQPS/90瓦, 因此 相同的功耗下 Avoton是 Ivy Bridge的 1.75倍(10K QPS/20)/ (27KQPS/95)
- 性能與價格方面比較: 從價格方面再進行比較,E5-2650v2(Ivy Bridge) 8core 官方價格是1107美元, Avoton 8 core官方價格是171美元性能/價格 Avoton是 10KQPS/171美元,Ivy Bridge 是 27KQPS/1107美元, 因此相同的美元 Avoton的性能是 Ivy Bridge 的2.3倍(1 10KQPS/171美元)/ (27KQPS/1107美元)
總結:在數據中心的場景下,由於指令數據相關性較高,同時由於記憶體訪問的延遲更多,複雜的CPU體繫結構並不能獲得相應性能提升,該原因導致我們需要的是更多的小核CPU,以達到高吞吐量的能力,因此2014 年我們向Intel提出數據中心的CPU傾向“小核”CPU,需要將現有的大核CPU的超線程由 2個升級到4個/8個, 或者直接將用更多的小核CPU增加伺服器的吞吐能力,經過了近8年,最新數據表明Intel 會在每個大核CPU中引入4個超線程,和在相同的晶元面積下單socket CPU 引入200多個小核CPU,該方案與我們的建議再次吻合
為什麼這20年主頻基本沒有提升了
今天的2.5G CPU性能和20年前的2.5G比起來性能差別大嗎?
因為能耗導致CPU的主頻近些年基本不怎麼提升了,不是技術上不能提升,是性價比不高.
在提升主頻之外可以提升性能的有:提升跳轉預測率,增加Decoded Cache,增加每周期的併發讀個數,增加執行通道,增加ROB, RS,Read & Write buffer等等,這些主要是為了增加IPC,當然增加core數量也是提升整體性能的王道。另外就是優化指令所需要的時鐘周期、增加並行度更好的指令等等指令集相關的優化。
the industry came up with many different solution to create better computers w/o (or almost without) increasing the clock speed.
比較兩代CPU性能變化
Intel 最新的CPU Ice Lake(8380)和其上一代(8280)的性能對比數據:
上圖最終結果導致了IPC提升了20%
But tock Intel did with the Ice Lake processors and their Sunny Cove cores, and the tock, at 20 percent instructions per clock (IPC) improvement on integer work
ICE Lake在網路轉發上的延時更小、更穩定了:
指令集優化
新增等效於某種常見指令組合的指令。原來多個指令執行需要多個時鐘周期,合併後的單條指令可以在一個時鐘周期執行完成。例如FMA指令,就是一條指令計算A×B+C,而無需分兩個時鐘周期計算。這種指令一般來說現有程式直接就能用上,無需優化。限制在於只對特定代碼有效,還是以FMA為例,更普遍的普通加法、乘法運算都不能從中獲益。
案例, ssse3(Supplemental Streaming SIMD Extensions 3 ) 是simd的一種,在libc-2.17.so中就有使用到,如下是mysqld進程中採集到的
1 2 3 4 5 | 2.79% mysqld [.] MYSQLparse 2.27% libc-2.17.so [.] __memcpy_ssse3_back //ssse3 2.19% mysqld [.] ha_insert_for_fold_func 1.95% mysqld [.] rec_get_offsets_func 1.35% mysqld [.] malloc |
AVX(Advanced Vector Extension,高級矢量擴展指令集)
英特爾在1996年率先引入了MMX(Multi Media eXtensions)多媒體擴展指令集,也開創了SIMD(Single Instruction Multiple Data,單指令多數據)指令集之先河,即在一個周期內一個指令可以完成多個數據操作,MMX指令集的出現讓當時的MMX Pentium處理器大出風頭。
SSE(Streaming SIMD Extensions,流式單指令多數據擴展)指令集是1999年英特爾在Pentium III處理器中率先推出的,並將矢量處理能力從64位擴展到了128位。
AVX 所代表的單指令多數據(Single Instruction Multi Data,SIMD)指令集,是近年來 CPU 提升 IPC(每時鐘周期指令數)上為數不多的重要革新。隨著每次數據寬度的提升,CPU 的性能都會大幅提升,但同時晶體管數量和能耗也會有相應的提升。因此在對功耗有較高要求的場景,如筆記本電腦或伺服器中,CPU 運行 AVX 應用時需要降低頻率從而降低功耗。
2013 年, 英特爾 發佈了AVX-512 指令集,其指令寬度擴展為512bit,每個時鐘周期內可打包32 次雙精度或64 次單精度浮點運算,因此在圖像/ 音視頻處理、數據分析、科學計算、數據加密和壓縮和 深度學習 等應用場景中,會帶來更強大的性能表現,理論上浮點性能翻倍,整數計算則增加約33% 的性能。
Linus Torvalds :
AVX512 有很明顯的缺點。我寧願看到那些晶體管被用於其他更相關的事情。即使同樣是用於進行浮點數學運算(通過 GPU 來做,而不是通過 AVX512 在 CPU 上),或者直接給我更多的核心(有著更多單線程性能,而且沒有 AVX512 這樣的垃圾),就像 AMD 所做的一樣。
我希望通過常規的整數代碼來達到自己能力的極限,而不是通過 AVX512 這樣的功率病毒來達到最高頻率(因為人們最終還是會拿它來做 memory-to-memory copy),還占據了核心的很大面積。
關於性能提升的小結
所以今天的2.6G單核skylake,能秒掉20年前2.6G的酷睿, 尤其是複雜場景。
CPU能耗公式:
P = C VV f
C是常數,f就是頻率,V 電壓。 f頻率加大後因為充放電帶來的Gate Delay,也就是頻率增加,充放電時間短,為了保證信號的完整性就一定要增加電壓來加快充放電。
所以最終能耗和f頻率是 f^3 的指數關係。
The successive nodes of CMOS technologies lead to x1.4 decrease of the gate delays. It led to a 25% increase per year of clock frequencies from 740 kHz (Intel 4004) to 3 GHz (Intel Xeons with 45-nm nodes).
每一代光刻工藝的改進可以降低1.4倍的門延遲
即使不考慮散熱問題,Core也沒法做到無限大,目前光刻機都有最大加工尺寸限制。光刻機加工的最大尺寸,一般是 858mm²,而 Cerebras 和台積電緊密合作,做了一個 46255mm²,1.2T 個晶體管的世界第一大晶元。這也是超摩爾定律的一個突破。
主頻和外頻
主頻=外頻×倍頻繫數
不只是CPU需要一個切換頻率,像GPU、cache、記憶體都需要一個外頻來指導他們的電壓脈衝的切換頻率。CPU的發展比其它設備快,所以沒法統一一個,於是就各自在外頻的基礎上X倍頻繫數。
超頻:認為加大CPU的倍頻繫數,切換變快以後最大的問題是電容在短時間內充電不完整,這樣導致信號失真,所以一般配套需要增加電壓(充電更快),帶來的後果是溫度更高。
睿頻:大多時候多核用不上,如果能智能地關掉無用的核同時把這些關掉的核的電源累加到在用的核上(通過增加倍頻來實現),這樣單核擁有更高的主頻。也就是把其它核的電源指標和發熱指標給了這一個核來使用。
多core通訊和NUMA
uma下cpu訪問記憶體
早期core不多統一走北橋匯流排訪問記憶體,對所有core時延統一
NUMA
如下圖,左右兩邊的是記憶體條,每個NUMA的cpu訪問直接插在自己CPU上的記憶體必然很快,如果訪問插在其它NUMA上的記憶體條還要走QPI,所以要慢很多。
如上架構是4路CPU,每路之間通過QPI相連,每個CPU內部8core用的是雙Ring Bus相連,Memory Control Hub集成到了Die裡面。一路CPU能連4個SMB,每個SMB有兩個channel,每個channel最多接三個記憶體條(圖中只畫了2個)。
快速通道互聯[1][2](英語:Intel QuickPath Interconnect,縮寫:QPI)[3][4],是一種由英特爾開發並使用的點對點處理器互聯架構,用來實現CPU之間的互聯。英特爾在2008年開始用QPI取代以往用於至強、安騰處理器的前端匯流排(FSB),用來實現晶元之間的直接互聯,而不是再通過FSB連接到北橋。Intel於2017年發佈的SkyLake-SP Xeon中,用UPI(UltraPath Interconnect)取代QPI。
Ring Bus
2012年英特爾發佈了業界期待已久的Intel Sandy Bridge架構至強E5-2600系列處理器。該系列處理器採用 Intel Sandy Bridge微架構和32nm工藝,與前一代的至強5600系列相比,具有更多的內核、更大的緩存、更多的記憶體通道,Die內採用的是Ring Bus。
Ring Bus設計簡單,雙環設計可以保證任何兩個ring stop之間距離不超過Ring Stop總數的一半,延遲控制在60ns,帶寬100G以上,但是core越多,ring bus越長性能下降迅速,在12core之後性能下降明顯。
於是採用如下兩個Ring Bus併列,然後再通過雙向匯流排把兩個Ring Bus連起來。
在至強HCC(High Core Count, 核很多版)版本中,又加入了一個ring bus。兩個ring bus各接12個Core,將延遲控制在可控的範圍內。倆個Ring Bus直接用兩個雙向Pipe Line連接,保證通訊順暢。與此同時由於Ring 0中的模塊訪問Ring 1中的模塊延遲明顯高於本Ring,親緣度不同,所以兩個Ring分屬於不同的NUMA(Non-Uniform Memory Access Architecture)node。這點在BIOS設計中要特別註意。
或者這個更清晰點的圖:
Mesh網路
Intel在Skylake和Knight Landing中引入了新的片內匯流排:Mesh。它是一種2D的Mesh網路:
一個skylake 28core die的實現:
Mesh網路引入片內匯流排是一個巨大的進步,它有很多優點:
- 首先當然是靈活性。新的模塊或者節點在Mesh中增加十分方便,它帶來的延遲不是像ring bus一樣線性增加,而是非線性的。從而可以容納更多的內核。
- 設計彈性很好,不需要1.5 ring和2ring的委曲求全。
- 雙向mesh網路減小了兩個node之間的延遲。過去兩個node之間通訊,最壞要繞過半個ring。而mesh整體node之間距離大大縮減。
- 外部延遲大大縮短
RAM延遲大大縮短:
上圖左邊的是ring bus,從一個ring裡面訪問另一個ring裡面的記憶體控制器。最壞情況下是那條綠線,拐了一個大圈才到達記憶體控制器,需要310個cycle。而在Mesh網路中則路徑縮短很多。
Mesh網路帶來了這麼多好處,那麼缺點有沒有呢?網格化設計帶來複雜性的增加,從而對Die的大小帶來了負面影響
CPU的匯流排為銅薄膜,雖然摩爾定律使單位面積晶體管的密度不斷增加,但是對於連接導線的電阻卻沒有明顯的下降,導線的RC延遲幾乎決定現有CPU性能,因此數據傳輸在CPU的角度來看是個極為沉重的負擔。 雖然2D-mesh為數據提供了更多的遷移路徑減少了數據堵塞,但也同樣為數據一致性帶來更多問題,例如過去ring-bus 結構下對於存在於某個CPU私用緩存的數據爭搶請求只有兩個方向(左和右), 但是在2D-mesh環境下會來自於4個方向(上,下,左,右)
SUB_NUMA Cluster(SNC)
在intel 8269的CPU中,core比較多,core之間通信採取的是mesh架構,實際在BIOS中的NUMA NODE設置上,還有個sub_numa的設置,開啟後,一個Die拆成了兩個node
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [root@registry Linux]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 座: 2 NUMA 節點: 4 廠商 ID: GenuineIntel CPU 系列: 6 型號: 85 型號名稱: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 步進: 7 CPU MHz: 1200.000 CPU max MHz: 2501.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.00 虛擬化: VT-x L1d 緩存: 32K L1i 緩存: 32K L2 緩存: 1024K L3 緩存: 36608K NUMA 節點0 CPU: 0-3,7-9,13-15,20-22,52-55,59-61,65-67,72-74 NUMA 節點1 CPU: 4-6,10-12,16-19,23-25,56-58,62-64,68-71,75-77 NUMA 節點2 CPU: 26-29,33-35,39-41,46-48,78-81,85-87,91-93,98-100 NUMA 節點3 CPU: 30-32,36-38,42-45,49-51,82-84,88-90,94-97,101-103 |
不過在8269上開啟sub_numa對性能的影響不是特別大,mlc測試如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | [root@registry Linux]# ./mlc Intel(R) Memory Latency Checker - v3.9 Measuring idle latencies (in ns)... Numa node Numa node 0 1 2 3 0 77.3 81.6 129.8 136.1 1 82.1 78.1 134.1 137.6 2 129.8 135.8 73.5 81.7 3 134.4 137.7 81.7 78.5 Measuring Peak Injection Memory Bandwidths for the system Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec) Using all the threads from each core if Hyper-threading is enabled Using traffic with the following read-write ratios ALL Reads : 232777.7 3:1 Reads-Writes : 216680.7 2:1 Reads-Writes : 213856.4 1:1 Reads-Writes : 197430.7 Stream-triad like: 194310.3 Measuring Memory Bandwidths between nodes within system Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec) Using all the threads from each core if Hyper-threading is enabled Using Read-only traffic type Numa node Numa node 0 1 2 3 0 58908.9 59066.0 50548.0 50479.6 1 59111.3 58882.6 50539.0 50479.3 2 50541.7 50495.8 58950.2 58934.0 3 50526.3 50492.4 59171.9 58701.5 Measuring Loaded Latencies for the system Using all the threads from each core if Hyper-threading is enabled Using Read-only traffic type Inject Latency Bandwidth Delay (ns) MB/sec ========================== 00000 242.78 232249.0 00002 242.90 232248.8 00008 242.63 232226.0 00015 247.47 233159.0 00050 250.26 233489.7 00100 245.88 233253.4 00200 109.72 183071.9 00300 93.95 128676.2 00400 88.51 98678.4 00500 85.15 80026.2 00700 83.74 58136.1 01000 82.16 41372.4 01300 81.59 32184.0 01700 81.14 24896.1 02500 80.80 17248.5 03500 80.32 12571.3 05000 79.58 9060.5 09000 78.27 5411.6 20000 76.09 2911.5 Measuring cache-to-cache transfer latency (in ns)... Local Socket L2->L2 HIT latency 45.0 Local Socket L2->L2 HITM latency 45.1 Remote Socket L2->L2 HITM latency (data address homed in writer socket) Reader Numa Node Writer Numa Node 0 1 2 3 0 - 48.2 107.2 109.2 1 50.6 - 111.2 113.1 2 107.6 109.6 - 48.0 3 111.6 113.5 49.7 - Remote Socket L2->L2 HITM latency (data address homed in reader socket) Reader Numa Node Writer Numa Node 0 1 2 3 0 - 48.6 169.1 175.0 1 46.3 - 167.9 172.1 2 171.4 175.3 - 48.6 3 169.7 173.6 45.1 - [root@registry Linux]# numactl -H available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 7 8 9 13 14 15 20 21 22 52 53 54 55 59 60 61 65 66 67 72 73 74 node 0 size: 64162 MB node 0 free: 60072 MB node 1 cpus: 4 5 6 10 11 12 16 17 18 19 23 24 25 56 57 58 62 63 64 68 69 70 71 75 76 77 node 1 size: 65536 MB node 1 free: 63575 MB node 2 cpus: 26 27 28 29 33 34 35 39 40 41 46 47 48 78 79 80 81 85 86 87 91 92 93 98 99 100 node 2 size: 65536 MB node 2 free: 63834 MB node 3 cpus: 30 31 32 36 37 38 42 43 44 45 49 50 51 82 83 84 88 89 90 94 95 96 97 101 102 103 node 3 size: 65536 MB node 3 free: 63867 MB node distances: node 0 1 2 3 0: 10 11 21 21 1: 11 10 21 21 2: 21 21 10 11 3: 21 21 11 10 [root@registry Linux]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 座: 2 NUMA 節點: 4 廠商 ID: GenuineIntel CPU 系列: 6 型號: 85 型號名稱: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 步進: 7 CPU MHz: 1200.000 CPU max MHz: 2501.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.00 虛擬化: VT-x L1d 緩存: 32K L1i 緩存: 32K L2 緩存: 1024K L3 緩存: 36608K NUMA 節點0 CPU: 0-3,7-9,13-15,20-22,52-55,59-61,65-67,72-74 NUMA 節點1 CPU: 4-6,10-12,16-19,23-25,56-58,62-64,68-71,75-77 NUMA 節點2 CPU: 26-29,33-35,39-41,46-48,78-81,85-87,91-93,98-100 NUMA 節點3 CPU: 30-32,36-38,42-45,49-51,82-84,88-90,94-97,101-103 |
SKL-SP H0 | SKL-SP H0 | SKL-SP H0 | SKL-SP H0 | |
---|---|---|---|---|
DDR4 speed MT/s (32GB RDIMMs) | 2666 | 2666 | 2400 | 2400 |
Page Policy | Adaptive | Adaptive | Adaptive | Adaptive |
SNC (sub-NUMA cluster) | disabled | enabled | disabled | enabled |
Uncore frequency (Mhz) | 2400 | 2400 | 2400 | 2400 |
L1 cache latency (nsec) | 1.1 | 1.1 | 1.1 | 1.1 |
L2 cache latency (nsec) | 4.7 | 4.6 | 4.7 | 4.6 |
L3 cache latency (nsec) | 19.5 | 17.8 | 19.5 | 17.8 |
Local mem latency (nsec) | 83 | 81 | 85 | 83 |
Remote mem latency (nsec) | 143 | 139 | 145 | 141 |
uncore
“Uncore“ is a term used by Intel to describe the functions of a microprocessor that are not in the core, but which must be closely connected to the core to achieve high performance.[1] It has been called “system agent“ since the release of the Sandy Bridge microarchitecture.[2]
The core contains the components of the processor involved in executing instructions, including the ALU, FPU, L1 and L2 cache. Uncore functions include QPI controllers, L3 cache, snoop agent pipeline, on-die memory controller, on-die PCI Express Root Complex, and Thunderbolt controller).[3] Other bus controllers such as SPI and LPC are part of the chipset.[4]
一些Intel CPU NUMA結構參考
Intel Xeon Platinum 8163(Skylake)阿裡雲第四代伺服器採用的CPU,Skylake架構,主頻2.5GHz,計算性能問題。8163這款型號在intel官網上並沒有相關信息,應該是阿裡雲向阿裡雲定製的,與之相近的Intel Xeon Platinum 8168,價格是$5890,約合¥38900元。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | lscpu: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 96 On-line CPU(s) list: 0-95 Thread(s) per core: 2 Core(s) per socket: 24 Socket(s): 2 NUMA node(s): 4 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz Stepping: 6 CPU MHz: 2400.000 CPU max MHz: 3900.0000 CPU min MHz: 1000.0000 BogoMIPS: 4800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-3,7-9,13-15,19,20,48-51,55-57,61-63,67,68 NUMA node1 CPU(s): 4-6,10-12,16-18,21-23,52-54,58-60,64-66,69-71 NUMA node2 CPU(s): 24-27,31-33,37-39,43,44,72-75,79-81,85-87,91,92 NUMA node3 CPU(s): 28-30,34-36,40-42,45-47,76-78,82-84,88-90,93-95 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8268 CPU @ 2.90GHz Stepping: 6 CPU MHz: 3252.490 BogoMIPS: 5800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92 NUMA node1 CPU(s): 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93 NUMA node2 CPU(s): 2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94 NUMA node3 CPU(s): 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95 lscpu: Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 192 On-line CPU(s) list: 0-191 Thread(s) per core: 1 Core(s) per socket: 24 Socket(s): 8 //每個物理CPU 24個物理core,這24個core應該是分佈在2個Die中 NUMA node(s): 16 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8260 CPU @ 2.40GHz Stepping: 7 CPU MHz: 2400.000 CPU max MHz: 3900.0000 CPU min MHz: 1000.0000 BogoMIPS: 4800.00 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-3,7-9,13-15,19,20 NUMA node1 CPU(s): 4-6,10-12,16-18,21-23 NUMA node2 CPU(s): 24-27,31-33,37-39,43,44 NUMA node3 CPU(s): 28-30,34-36,40-42,45-47 NUMA node4 CPU(s): 48-51,55,56,60-62,66-68 NUMA node5 CPU(s): 52-54,57-59,63-65,69-71 NUMA node6 CPU(s): 72-75,79-81,85-87,91,92 NUMA node7 CPU(s): 76-78,82-84,88-90,93-95 NUMA node8 CPU(s): 96-99,103,104,108-110,114-116 NUMA node9 CPU(s): 100-102,105-107,111-113,117-119 NUMA node10 CPU(s): 120-123,127,128,132-134,138-140 NUMA node11 CPU(s): 124-126,129-131,135-137,141-143 NUMA node12 CPU(s): 144-147,151-153,157-159,163,164 NUMA node13 CPU(s): 148-150,154-156,160-162,165-167 NUMA node14 CPU(s): 168-171,175-177,181-183,187,188 NUMA node15 CPU(s): 172-174,178-180,184-186,189-191 //v62 #lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 104 On-line CPU(s) list: 0-103 Thread(s) per core: 2 Core(s) per socket: 26 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz Stepping: 7 CPU MHz: 3200.097 CPU max MHz: 3800.0000 CPU min MHz: 1200.0000 BogoMIPS: 4998.89 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 36608K NUMA node0 CPU(s): 0-25,52-77 NUMA node1 CPU(s): 26-51,78-103 //2016Intel開始出售Intel Xeon E5-2682 v4。 這是一種基於Broadwell架構的桌面處理器,主要為辦公系統而設計。 它具有16 核心和32 數據流並使用, 售價約為7000人民幣 #lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 64 On-line CPU(s) list: 0-63 Thread(s) per core: 2 Core(s) per socket: 16 Socket(s): 2 NUMA node(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 79 Model name: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz Stepping: 1 CPU MHz: 2499.902 CPU max MHz: 3000.0000 CPU min MHz: 1200.0000 BogoMIPS: 5000.06 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 40960K NUMA node0 CPU(s): 0-15,32-47 NUMA node1 CPU(s): 16-31,48-63 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch ida arat epb invpcid_single pln pts dtherm spec_ctrl ibpb_support tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt rdseed adx smap xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local cat_l3 |
intel 架構迭代
2006年90、65納米工藝酷睿core Yonah上市,32位架構,仍然算是奔騰Pro系列;2006推出酷睿處理器是介於NetBurst和Core之間,其實是NetBurst的改版,Core 2是第一個基於Core架構的原生雙核處理器,65nm工藝,使得AMD K8架構優勢全無,直接投入開發原生四核架構K10去了。
2006年7月酷睿2處理器代號為“Conroe”,採用x86-64指令集與65納米雙核心架構。該處理器基於全新的酷睿微架構,雖然時脈大大降低,但在效率方面和性能方面有了重大改進。從這一時期開始,在深度流水線和資源混亂的運行引擎上維持每個周期的高指令(IPC)
2008年的 Nehalem (酷睿i7)是採用 45nm 工藝的新架構,主要優勢來自重新設計的I/O和存儲系統,這些系統具有新的Intel QuickPath Interconnect和集成的記憶體控制器,可支持三通道的DDR3記憶體。引入片內4-12MB的L3 Cache;重新加入超線程;分支預測分級;取消北橋,IMC(集成記憶體控制器)從北橋挪到片內
2009年的 Westmere 升級到 32nm;退出第一代I5/I3,Xeon 系列也開始推出第一代E命名的E7-x8xx系列。
2010年的 Lynnfield/Clarkdale 基於 45nm/32nm 工藝的新架構,第一代智能酷睿處理器;
2011年的 Sandy Bridge ,基於 32nm 工藝的新架構,第二代智能酷睿處理器,增加AVX指令集擴展, 對虛擬化提供更好支持;實現了GPU和CPU的融合
2012年的 IVY Bridge,是 Sandy Bridge 的 22nm 升級版,第三代智能酷睿處理器,Tick級改進;
2013年的 Haswell ,基於 22nm 工藝的新架構,第四代智能酷睿處理器,Tock級改進;
2014年的 Broadwell,是 Haswell 的 14nm 升級版,第五代智能酷睿處理器;
2015年則推出 SkyLake,基於 14nm 工藝的新架構, Tock級改進,Ring-Bus改成了Mesh架構,第6代Core i系列,8163就是這款;socket之間UPI互聯,記憶體頻率通道增強。不再使用Xeon命名,而是改用Bronze/Silver/Gold/Platinum 4個系列。青銅和白銀系列支持雙路(原本的 E5-24xx、E7-28xx 系列),黃金系列支持四路(原本的 E5-46xx、E7-48xx 系列),白金系列支持八路(原本的 E7-88xx 系列);
2019年的Cascade Lake(X2XX命名)也是Skylake的優化,是Intel首個支持基於3D XPoint的記憶體模塊的微體繫結構。同年也正式宣佈了十代酷睿處理器,即i9-10900k,還是Skylake微內核不變。
2020年的10nm Ice Lake自家工廠無能,改由台積電加工。
Core 架構代號是 Yonah,把 NetBurst 做深了的流水線級數又砍下來了,主頻雖然降下來了(而且即使後來工藝提升到 45nm 之後也沒有超過 NetBurst 的水平),但是卻提高了整個流水線中的資源利用率,所以性能還是提升了;把奔騰 4 上曾經用過的超線程也砍掉了;對各個部分進行了強化,雙核共用 L2 cache 等等。
從 Core 架構開始是真的走向多核了,就不再是以前 “膠水粘的” 偽雙核了,這時候已經有最高 4 核的處理器設計了。
Core 從 65nm 改到 45nm 之後,基於 45nm 又推出了新一代架構叫 Nehalem,新架構Nehalem採用 Intel QPI 來代替原來的前端匯流排,PCIE 和 DMI 控制器直接做到片內了,不再需要北橋。
2006年Intel也提出了Tick-Tock架構戰略。Tick年改進位程工藝,微架構基本不做大改,重點在把晶體管的工藝水平往上提升;Tock年改進微架構設計,保持工藝水平不變,重點在用更複雜、更高級的架構設計。然後就是一代 Tick 再一代 Tock交替演進。
從2006年酷睿架構開始,基本是摁著AMD在地上摩擦,直到2017年的AMD Zen殺回來,性能暴增。
Sandy Bridge 引入核間的ring bus
感覺Broadwell前面這幾代都是在優化cache、通信;接下來的Broadwell和SkyLake就開始改進不大了,瘋狂擠牙膏(唯一比較大的改進就是Ring bus到Mesh)
命名規律
Intel E3、E5、E7代表了3個不同檔次的至強CPU。EX是按性能和應用場景分的,以前是E3 E5 E7,E3核最少,輕負載應用,E5 核多均衡型,E7是超高性能,核最多。Xeon E5是針對高端工作站及伺服器的處理器系列,此系列每年更新,不過架構落後Xeon E3一代。從skylake開始,不再使用EX(E3/E5/E7)了,而是銅、銀、金、鉑金四種組合。
V2 是ivy bridge,V3 是 haswell, V4 是broadwell,不帶VX的是sandy bridge。所以2682是boradwell系列CPU。
然後到了4114,就是Silver,8186就是Platinum,81是skylake,82是cscadelake,再下一代是83。