現(xiàn)在的服務(wù)器物理機一般都是多個CPU,核數(shù)也是十幾甚至幾十核。內(nèi)存幾十GB甚至是上百G,也是由許多條組成的。那么我這里思考一下,這么多的CPU和內(nèi)存它們之間是怎么互相連接的?同一個CPU核訪問不同的內(nèi)存條延時一樣嗎?
在《內(nèi)存隨機訪問也比順序慢,帶你深入理解內(nèi)存IO過程》中我們了解了內(nèi)存訪問時芯片內(nèi)部的執(zhí)行過程,在《實際測試內(nèi)存在順序IO和隨機IO時的訪問延時差異》中我們又進行了實際的代碼測試。不過這兩文中我們都把精力聚焦在內(nèi)存內(nèi)部機制,而回避了上面的問題,那就是CPU和內(nèi)存的連接方式,也就是總線架構(gòu)。
1 回顧CPU與內(nèi)存的簡單連接:FSB時代
我們先來回顧下在歷史上CPU、內(nèi)存數(shù)量比較少的年代里的總線方案-FSB。FSB的全稱是Front Side Bus,因此也叫前端總線。CPU通過FSB總線連接到北橋芯片,然后再連接到內(nèi)存。內(nèi)存控制器是集成在北橋里的,Cpu和內(nèi)存之間的通信全部都要通過這一條FSB總線來進行。
在這個年代里,當時提高計算機系統(tǒng)整體性能的方式就是不斷地提高CPU、FSB總線、內(nèi)存條的數(shù)據(jù)傳輸頻率。
2 如今多CPU多內(nèi)存復(fù)雜互聯(lián):NUMA時代
當CPU的主頻提升到了3GHz每秒以后,硬件制造商們發(fā)現(xiàn)單個CPU的已經(jīng)到了物理極限了。所以就改變了性能改進的方法,改成為向多核、甚至是多CPU的方向來發(fā)展。在這種情況下,如果仍然采用FSB總線,會導(dǎo)致所有的CPU和內(nèi)存通信都經(jīng)過總線,這樣總線就成為了瓶頸,無法充分發(fā)揮多核的優(yōu)勢與性能。所以CPU制造商們把內(nèi)存控制器從北橋搬到了CPU內(nèi)部,這樣CPU便可以直接和自己的內(nèi)存進行通信了。那么,如果CPU想要訪問不和自己直連的內(nèi)存條怎么辦呢?所以就誕生了新的總線類型,它就叫QPI總線。
圖2中CPU1如果想要訪問內(nèi)存3的話,就需要經(jīng)過QPS總線才可以。
3 動手查看Linux下的NUMA架構(gòu)
我們先通過dmidecode命令查看一下內(nèi)存插槽,單條大小等信息。大家可以試著在linux上執(zhí)行以下該命令。輸出結(jié)果很長,大家可以有空仔細研究。我這里不全部介紹,這里只挑選一些和內(nèi)存相關(guān)的:
可以看出,我當前使用的機器上共有16個內(nèi)存插槽,共插了8條8G的內(nèi)存。所以總共是64GB。如我們前面所述,在NUMA架構(gòu)里,每一個物理CPU都有不同的內(nèi)存組,通過numactl命令可以查看這個分組情況。
通過上述命令可以看到,每一組CPU核分配了32GB(4條)的內(nèi)存。node distance是一個二維矩陣,描述node訪問所有內(nèi)存條的延時情況。node 0里的CPU訪問node 0里的內(nèi)存相對距離是10,因為這時訪問的內(nèi)存都是和該CPU直連的。而node 0如果想訪問node 1節(jié)點下的內(nèi)存的話,就需要走QPI總線了,這時該相對距離就變成了21。
所以、在NUMA架構(gòu)下,CPU訪問自己同一個node里的內(nèi)存要比其它內(nèi)存要快!
4 動手測試NUMA架構(gòu)內(nèi)存延遲差異
numactl命令有--cpubind和--membind的選項,通過它們我們可以指定我們要用的node節(jié)點。還沿用《實際測試內(nèi)存在順序IO和隨機IO時的訪問延時差異》里的測試代碼
1、讓內(nèi)存和CPU處于同一個Node
下面代碼可能需要左右滑動
2、讓內(nèi)存和CPU處于不同Node
下面代碼可能需要左右滑動
5 結(jié)論
通過上面的各個小節(jié)我們可以看到,現(xiàn)代的服務(wù)器里,CPU和內(nèi)存條都有多個,它們之前目前主要采用的是復(fù)雜的NUMA架構(gòu)進行互聯(lián),NUMA把服務(wù)器里的CPU和內(nèi)存分組劃分成了不同的node。從上述實驗結(jié)果來看,拿8M數(shù)組,循環(huán)步長為64的case來說,同node耗時3.15納秒,跨node為3.96納秒。所以屬于同一個node里的CPU和內(nèi)存之間訪問速度會比較快。而如果跨node的話,則需要經(jīng)過QPI總線,總體來說,速度會略慢一些。
審核編輯:劉清
-
cpu
+關(guān)注
關(guān)注
68文章
10882瀏覽量
212221 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9237瀏覽量
85665 -
總線
+關(guān)注
關(guān)注
10文章
2891瀏覽量
88178 -
FSB
+關(guān)注
關(guān)注
0文章
7瀏覽量
9411
發(fā)布評論請先 登錄
相關(guān)推薦
評論