0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

同一個(gè)CPU核訪問不同的內(nèi)存條延時(shí)一樣嗎?

冬至配餃子 ? 來源:開發(fā)內(nèi)功修煉 ? 作者:張彥飛allen ? 2022-08-30 17:03 ? 次閱讀

現(xiàn)在的服務(wù)器物理機(jī)一般都是多個(gè)CPU,核數(shù)也是十幾甚至幾十核。內(nèi)存幾十GB甚至是上百G,也是由許多條組成的。那么我這里思考一下,這么多的CPU和內(nèi)存它們之間是怎么互相連接的?同一個(gè)CPU核訪問不同的內(nèi)存條延時(shí)一樣嗎?

在《內(nèi)存隨機(jī)訪問也比順序慢,帶你深入理解內(nèi)存IO過程》中我們了解了內(nèi)存訪問時(shí)芯片內(nèi)部的執(zhí)行過程,在《實(shí)際測試內(nèi)存在順序IO和隨機(jī)IO時(shí)的訪問延時(shí)差異》中我們又進(jìn)行了實(shí)際的代碼測試。不過這兩文中我們都把精力聚焦在內(nèi)存內(nèi)部機(jī)制,而回避了上面的問題,那就是CPU和內(nèi)存的連接方式,也就是總線架構(gòu)。

1 回顧C(jī)PU與內(nèi)存的簡單連接:FSB時(shí)代

我們先來回顧下在歷史上CPU、內(nèi)存數(shù)量比較少的年代里的總線方案-FSB。FSB的全稱是Front Side Bus,因此也叫前端總線。CPU通過FSB總線連接到北橋芯片,然后再連接到內(nèi)存。內(nèi)存控制器是集成在北橋里的,Cpu和內(nèi)存之間的通信全部都要通過這一條FSB總線來進(jìn)行。

pYYBAGMN0ZeAU5m7AAA758U0WWc707.png

在這個(gè)年代里,當(dāng)時(shí)提高計(jì)算機(jī)系統(tǒng)整體性能的方式就是不斷地提高CPU、FSB總線、內(nèi)存條的數(shù)據(jù)傳輸頻率。

2 如今多CPU多內(nèi)存復(fù)雜互聯(lián):NUMA時(shí)代

當(dāng)CPU的主頻提升到了3GHz每秒以后,硬件制造商們發(fā)現(xiàn)單個(gè)CPU的已經(jīng)到了物理極限了。所以就改變了性能改進(jìn)的方法,改成為向多核、甚至是多CPU的方向來發(fā)展。在這種情況下,如果仍然采用FSB總線,會導(dǎo)致所有的CPU和內(nèi)存通信都經(jīng)過總線,這樣總線就成為了瓶頸,無法充分發(fā)揮多核的優(yōu)勢與性能。所以CPU制造商們把內(nèi)存控制器從北橋搬到了CPU內(nèi)部,這樣CPU便可以直接和自己的內(nèi)存進(jìn)行通信了。那么,如果CPU想要訪問不和自己直連的內(nèi)存條怎么辦呢?所以就誕生了新的總線類型,它就叫QPI總線。

poYBAGMN0bGAP6t4AABMX7DE0kA060.png

圖2中CPU1如果想要訪問內(nèi)存3的話,就需要經(jīng)過QPS總線才可以。

3 動手查看Linux下的NUMA架構(gòu)

我們先通過dmidecode命令查看一下內(nèi)存插槽,單條大小等信息。大家可以試著在linux上執(zhí)行以下該命令。輸出結(jié)果很長,大家可以有空仔細(xì)研究。我這里不全部介紹,這里只挑選一些和內(nèi)存相關(guān)的:

pYYBAGMN0beAeBn_AABuL7i4jtg460.png

可以看出,我當(dāng)前使用的機(jī)器上共有16個(gè)內(nèi)存插槽,共插了8條8G的內(nèi)存。所以總共是64GB。如我們前面所述,在NUMA架構(gòu)里,每一個(gè)物理CPU都有不同的內(nèi)存組,通過numactl命令可以查看這個(gè)分組情況。

pYYBAGMN0ceACe7NAABTHY84VJM095.png

通過上述命令可以看到,每一組CPU核分配了32GB(4條)的內(nèi)存。node distance是一個(gè)二維矩陣,描述node訪問所有內(nèi)存條的延時(shí)情況。node 0里的CPU訪問node 0里的內(nèi)存相對距離是10,因?yàn)檫@時(shí)訪問的內(nèi)存都是和該CPU直連的。而node 0如果想訪問node 1節(jié)點(diǎn)下的內(nèi)存的話,就需要走QPI總線了,這時(shí)該相對距離就變成了21。

所以、在NUMA架構(gòu)下,CPU訪問自己同一個(gè)node里的內(nèi)存要比其它內(nèi)存要快!

4 動手測試NUMA架構(gòu)內(nèi)存延遲差異

numactl命令有--cpubind和--membind的選項(xiàng),通過它們我們可以指定我們要用的node節(jié)點(diǎn)。還沿用《實(shí)際測試內(nèi)存在順序IO和隨機(jī)IO時(shí)的訪問延時(shí)差異》里的測試代碼

1、讓內(nèi)存和CPU處于同一個(gè)Node

下面代碼可能需要左右滑動

poYBAGMN0fSATUlkAABbASvIM8U756.png

2、讓內(nèi)存和CPU處于不同Node

下面代碼可能需要左右滑動

pYYBAGMN0g2ADYUBAABagSCySQ4468.png

5 結(jié)論

通過上面的各個(gè)小節(jié)我們可以看到,現(xiàn)代的服務(wù)器里,CPU和內(nèi)存條都有多個(gè),它們之前目前主要采用的是復(fù)雜的NUMA架構(gòu)進(jìn)行互聯(lián),NUMA把服務(wù)器里的CPU和內(nèi)存分組劃分成了不同的node。從上述實(shí)驗(yàn)結(jié)果來看,拿8M數(shù)組,循環(huán)步長為64的case來說,同node耗時(shí)3.15納秒,跨node為3.96納秒。所以屬于同一個(gè)node里的CPU和內(nèi)存之間訪問速度會比較快。而如果跨node的話,則需要經(jīng)過QPI總線,總體來說,速度會略慢一些。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209363
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84546
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2817

    瀏覽量

    87705
  • FSB
    FSB
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    9373
收藏 人收藏

    評論

    相關(guān)推薦

    DDR內(nèi)存條對比分析

    DDR內(nèi)存條經(jīng)歷了DDR內(nèi)存條、DDR2內(nèi)存條、DDR3內(nèi)存條個(gè)時(shí)代。這里給出了DDR內(nèi)存條、
    發(fā)表于 12-29 14:21 ?3441次閱讀

    內(nèi)存條頻率不一樣,能起用嗎? #電腦小技巧

    內(nèi)存條電腦/辦公
    學(xué)習(xí)硬聲知識
    發(fā)布于 :2022年11月01日 22:52:40

    FPGA對DDRSDRAM內(nèi)存條的控制

    首先介紹了內(nèi)存條的工作原理,內(nèi)存條電路設(shè)計(jì)的注意事項(xiàng),以及如何使用FPGA實(shí)現(xiàn)對DDR內(nèi)存條的控制,最后給出控制的仿真波形。 1 內(nèi)存條的工作原理   
    發(fā)表于 06-29 15:37 ?2446次閱讀
    FPGA對DDRSDRAM<b class='flag-5'>內(nèi)存條</b>的控制

    內(nèi)存條買單跟雙的區(qū)別解析

    買過內(nèi)存條的用戶定都有過這樣的糾結(jié):在限定容量下,是該買根足量的內(nèi)存條還是買雙根內(nèi)存條進(jìn)行組合?今天,我們就來聊聊這個(gè)問題。
    發(fā)表于 06-11 16:28 ?3.7w次閱讀

    內(nèi)存條需要注意什么

    安裝新的內(nèi)存條時(shí)不要為追求高性能而安裝與原內(nèi)存條差距過大的內(nèi)存條。比如我們在1gb內(nèi)存條旁邊加裝4gb的內(nèi)存條,這樣是不行的。如果這樣安裝會
    的頭像 發(fā)表于 12-08 09:46 ?12.8w次閱讀

    內(nèi)存條的什么屬性重要應(yīng)該如何選擇

    買電腦內(nèi)存條主要看什么呢?由于內(nèi)存條的種類和品牌非常的多,消費(fèi)者在選擇內(nèi)存條的時(shí)候就需要認(rèn)識內(nèi)存的主要配置,特別是DIY配置電腦的時(shí)候,如果想要購買好點(diǎn)的
    的頭像 發(fā)表于 12-01 12:02 ?5519次閱讀

    如何選擇合適的內(nèi)存條?內(nèi)存條的什么屬性最重要

    買電腦內(nèi)存條主要看什么呢?由于內(nèi)存條的種類和品牌非常的多,消費(fèi)者在選擇內(nèi)存條的時(shí)候就需要認(rèn)識內(nèi)存的主要配置,特別是DIY配置電腦的時(shí)候,如果想要購買好點(diǎn)的
    的頭像 發(fā)表于 04-12 09:14 ?7139次閱讀

    怎么區(qū)分內(nèi)存條的單面和雙面

    什么是單面和雙面內(nèi)存?它們有些什么的特性與區(qū)別呢?你們知道怎么區(qū)分內(nèi)存條單面和雙面嗎?下面小編帶來怎么區(qū)分內(nèi)存條單面和雙面的內(nèi)容,歡迎閱讀!
    發(fā)表于 05-28 09:51 ?8495次閱讀

    內(nèi)存條壞了會出現(xiàn)什么狀況_內(nèi)存條壞了如何解決

    內(nèi)存條大家應(yīng)該知道吧1它是電腦運(yùn)行不可缺少的種零件,大家可能光是知道這個(gè)東西,卻不知道它到底有哪些方面的作用。簡單的來說內(nèi)存條就是電腦的
    發(fā)表于 06-01 10:22 ?1.2w次閱讀

    內(nèi)存條故障原因及解決

    內(nèi)存是電腦必不可少的組成部分,CPU可通過數(shù)據(jù)總線對內(nèi)存尋址。歷史上的電腦主板上有主內(nèi)存,內(nèi)存條是主內(nèi)存
    發(fā)表于 06-09 10:44 ?7568次閱讀

    內(nèi)存條起著什么的作用

     當(dāng)電腦的CPU工作時(shí),會從硬盤調(diào)用數(shù)據(jù)并存儲在內(nèi)存條中,然后再從內(nèi)存條中讀取數(shù)據(jù)使用,和直接從硬盤調(diào)用數(shù)據(jù)相比CPU內(nèi)存條之間的數(shù)據(jù)傳輸
    發(fā)表于 06-17 10:21 ?4820次閱讀

    如何讓RTOS多任務(wù)訪問同一個(gè)UART?

    在RTOS多任務(wù)編程的時(shí)候,同一個(gè)硬件(比如UART、I2C等)被多個(gè)任務(wù)訪問的情況比較多,如果不合理處理,就會導(dǎo)致“混亂”的局面。 處理“混亂”局面的方法比較多,下面基于FreeRTOS,以
    的頭像 發(fā)表于 03-12 17:18 ?1983次閱讀

    個(gè)內(nèi)存條的6層PCB設(shè)計(jì)

    個(gè)內(nèi)存條的6層PCB設(shè)計(jì)
    發(fā)表于 03-20 09:24 ?0次下載

    個(gè)網(wǎng)絡(luò)IP地址是否在同一個(gè)段中的判斷方法

    我們知道IP地址是由“網(wǎng)絡(luò)號+子網(wǎng)號+主機(jī)號”組成,判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段主要看“網(wǎng)絡(luò)號”,如果網(wǎng)絡(luò)號一樣,那么他們就在同一個(gè)網(wǎng)段,否則就不在
    的頭像 發(fā)表于 06-02 14:31 ?1.2w次閱讀
    兩<b class='flag-5'>個(gè)</b>網(wǎng)絡(luò)IP地址是否在<b class='flag-5'>同一個(gè)</b>段中的判斷方法

    服務(wù)器內(nèi)存條和普通內(nèi)存條的區(qū)別

    內(nèi)存條般采用ECC DIMM封裝形式。ECC DIMM具有額外的錯(cuò)誤檢測和糾正功能,可以提供更高的數(shù)據(jù)可靠性,減少硬件故障的風(fēng)險(xiǎn)。 此外,服務(wù)器內(nèi)存條通常具有更多的插槽和更大的容量支持。普通
    的頭像 發(fā)表于 02-19 10:19 ?7782次閱讀