NUMA 深入探討第 1 部分:從 UMA 到 NUMA

共享內(nèi)存多處理器架構(gòu)在過去幾十年的演變

8 分鐘閱讀

非統(tǒng)一內(nèi)存訪問 (NUMA) 是當(dāng)今多處理系統(tǒng)中使用的共享內(nèi)存架構(gòu)畦木。每個 CPU 都分配有自己的本地內(nèi)存绞绒,并且可以從系統(tǒng)中的其他 CPU 訪問內(nèi)存。本地內(nèi)存訪問提供低延遲 - 高帶寬性能耕腾。而訪問另一個 CPU 擁有的內(nèi)存具有更高的延遲和更低的帶寬性能〖#現(xiàn)代應(yīng)用程序和操作系統(tǒng)(如 ESXi)默認(rèn)支持 NUMA,但要提供最佳性能扫俺,虛擬機配置應(yīng)在考慮 NUMA 架構(gòu)的情況下完成苍苞。如果設(shè)計不正確,則該特定虛擬機或在該 ESXi 主機上運行的所有 VM 的最壞情況下都會出現(xiàn)意外行為或整體性能下降狼纬。 本系列旨在深入介紹 CPU 架構(gòu)羹呵、內(nèi)存子系統(tǒng)以及 ESXi CPU 和內(nèi)存調(diào)度程序。允許您創(chuàng)建一個高性能平臺疗琉,為更高的服務(wù)和更高的整合率奠定基礎(chǔ)冈欢。在我們了解現(xiàn)代計算架構(gòu)之前,回顧一下共享內(nèi)存多處理器架構(gòu)的歷史有助于理解我們今天使用 NUMA 系統(tǒng)的原因没炒。

在設(shè)計一致的低延遲涛癌、高帶寬平臺時犯戏,似乎稱為統(tǒng)一內(nèi)存訪問的架構(gòu)更適合送火。然而,現(xiàn)代系統(tǒng)架構(gòu)將限制它真正統(tǒng)一先匪。要了解這背后的原因种吸,我們需要回顧歷史以確定并行計算的關(guān)鍵驅(qū)動因素。 隨著七十年代初期關(guān)系數(shù)據(jù)庫的引入呀非,對能夠為多個并發(fā)用戶操作和過多數(shù)據(jù)生成提供服務(wù)的系統(tǒng)的需求成為主流坚俗。盡管單處理器性能令人印象深刻,但多處理器系統(tǒng)能夠更好地處理這種工作負(fù)載岸裙。為了提供具有成本效益的系統(tǒng)猖败,共享內(nèi)存地址空間成為研究的重點。早期降允,提倡使用交叉開關(guān)的系統(tǒng)恩闻,但是隨著這種設(shè)計的復(fù)雜性隨著處理器的增加而增加,這使得基于總線的系統(tǒng)更具吸引力剧董。允許總線系統(tǒng)中的處理器通過在總線上發(fā)送請求來訪問整個內(nèi)存空間幢尚,這是一種盡可能最佳地使用可用內(nèi)存的非常經(jīng)濟有效的方式破停。

image.png

然而,基于總線的系統(tǒng)有其自身的可擴展性問題尉剩。主要問題是帶寬有限真慢,這限制了總線可以容納的處理器數(shù)量。將 CPU 添加到系統(tǒng)會引入兩個主要的關(guān)注領(lǐng)域:

  1. 每個節(jié)點的可用帶寬隨著每個 CPU 的增加而減少理茎。
  2. 添加更多處理器時黑界,總線長度會增加,從而增加延遲功蜓。

CPU 的性能增長园爷,特別是處理器和內(nèi)存性能之間的速度差距,過去是式撼,現(xiàn)在仍然是童社,對多處理器來說是毀滅性的。由于預(yù)計處理器和內(nèi)存之間的內(nèi)存差距會增加著隆,因此人們投入了大量精力來開發(fā)有效的策略來管理內(nèi)存系統(tǒng)扰楼。其中一項策略是添加內(nèi)存緩存,這帶來了許多挑戰(zhàn)美浦。解決這些挑戰(zhàn)仍然是當(dāng)今 CPU 設(shè)計團隊的主要關(guān)注點弦赖,對緩存結(jié)構(gòu)和復(fù)雜算法進行了大量研究以避免緩存未命中。

緩存監(jiān)聽協(xié)議介紹

為每個 CPU 附加一個緩存可以在很多方面提高性能浦辨。使內(nèi)存更靠近 CPU 可以減少平均內(nèi)存訪問時間蹬竖,同時減少內(nèi)存總線上的帶寬負(fù)載。在共享內(nèi)存架構(gòu)中為每個 CPU 添加緩存的挑戰(zhàn)在于它允許內(nèi)存塊的多個副本存在流酬。這稱為緩存一致性問題币厕。為了解決這個問題,發(fā)明了緩存?zhèn)陕爡f(xié)議芽腾,試圖創(chuàng)建一個模型來提供正確的數(shù)據(jù)旦装,同時又不會耗盡總線上的所有帶寬。最流行的協(xié)議 write invalidate 在寫入本地緩存之前擦除所有其他數(shù)據(jù)副本摊滔。其他處理器對該數(shù)據(jù)的任何后續(xù)讀取都將檢測到其本地緩存中的緩存未命中阴绢,并且將從包含最近修改的數(shù)據(jù)的另一個 CPU 的緩存中提供服務(wù)。這種模型節(jié)省了大量總線帶寬艰躺,并允許統(tǒng)一內(nèi)存訪問系統(tǒng)在 1990 年代初期出現(xiàn)呻袭。第 3 部分更詳細(xì)地介紹了現(xiàn)代緩存一致性協(xié)議。

統(tǒng)一內(nèi)存訪問架構(gòu)

對系統(tǒng)中任何內(nèi)存模塊的訪問時間相同(統(tǒng)一)的基于總線的多處理器的處理器通常稱為統(tǒng)一內(nèi)存訪問 (UMA) 系統(tǒng)或?qū)ΨQ多處理器 (SMP)腺兴。 對于 UMA 系統(tǒng)左电,CPU 通過系統(tǒng)總線(前端總線)連接到北橋。北橋包含內(nèi)存控制器,所有進出內(nèi)存的通信都必須通過北橋券腔。負(fù)責(zé)管理所有設(shè)備的 I/O 的 I/O 控制器連接到北橋伏穆。因此,每一個I/O都必須經(jīng)過北橋才能到達CPU纷纫。


image.png

多個總線和內(nèi)存通道用于使可用帶寬加倍并減少北橋的瓶頸枕扫。為了進一步增加內(nèi)存帶寬,一些系統(tǒng)將外部內(nèi)存控制器連接到北橋辱魁,從而提高帶寬并支持更多內(nèi)存烟瞧。然而,由于北橋的內(nèi)部帶寬和早期 snoopy 緩存協(xié)議的廣播性質(zhì)染簇,UMA 被認(rèn)為具有有限的可擴展性参滴。隨著當(dāng)今高速閃存設(shè)備的使用,每秒推動數(shù)十萬次 IO锻弓,他們完全正確地認(rèn)為這種架構(gòu)無法擴展以適應(yīng)未來的工作負(fù)載砾赔。

非統(tǒng)一內(nèi)存訪問架構(gòu)

為了提高可伸縮性和性能,對共享內(nèi)存多處理器架構(gòu)進行了三個關(guān)鍵更改青灼;

  1. 非統(tǒng)一內(nèi)存訪問組織
  2. 點對點互連拓?fù)?/li>
  3. 可擴展的緩存一致性解決方案
1:非統(tǒng)一內(nèi)存訪問組織

NUMA 擺脫了集中式內(nèi)存池并引入了拓?fù)鋵傩员┬摹Mㄟ^根據(jù)從處理器到內(nèi)存的信號路徑長度對內(nèi)存位置進行分類,可以避免延遲和帶寬瓶頸杂拨。這是通過重新設(shè)計處理器和芯片組的整個系統(tǒng)來完成的专普。NUMA 架構(gòu)在 90 年代末流行起來,當(dāng)時它被用于 SGI 超級計算機弹沽,例如Cray Origin 2000檀夹。NUMA 幫助識別內(nèi)存的位置,在這些系統(tǒng)的這種情況下策橘,他們不得不想知道哪個機箱中的哪個內(nèi)存區(qū)域保存內(nèi)存位炸渡。
在千禧年的上半葉,AMD 將 NUMA 帶入了 UMA 系統(tǒng)至高無上的企業(yè)環(huán)境役纹。2003 年推出了 AMD Opteron 系列偶摔,其特點是集成內(nèi)存控制器暇唾,每個 CPU 都擁有指定的內(nèi)存條促脉。每個 CPU 現(xiàn)在都有自己的內(nèi)存地址空間。NUMA 優(yōu)化操作系統(tǒng)(如 ESXi)允許工作負(fù)載從兩個內(nèi)存地址空間消耗內(nèi)存策州,同時優(yōu)化本地內(nèi)存訪問瘸味。讓我們使用雙 CPU 系統(tǒng)的示例來闡明單個系統(tǒng)中本地和遠程內(nèi)存訪問之間的區(qū)別。

image.png

連接到 CPU1 的內(nèi)存控制器的內(nèi)存被認(rèn)為是本地內(nèi)存够挂。連接到另一個 CPU 插槽 (CPU2) 的內(nèi)存對于 CPU1 來說被認(rèn)為是外部的或遠程的旁仿。遠程內(nèi)存訪問比本地內(nèi)存訪問有額外的延遲開銷,因為它必須遍歷互連(點對點鏈接)并連接到遠程內(nèi)存控制器。由于內(nèi)存位置不同枯冈,該系統(tǒng)會經(jīng)歷“不一致”的內(nèi)存訪問時間毅贮。

2:點對點互連

AMD 通過AMD Opteron 微架構(gòu)引入了點對點連接 HyperTransport 。英特爾于 2007 年通過在其 Nehalem 處理器系列設(shè)計中引入QuickPath 架構(gòu)而放棄了其雙獨立總線架構(gòu)尘奏。
Nehalem架構(gòu)是英特爾微體系結(jié)構(gòu)中的重大設(shè)計變更滩褥,被認(rèn)為是英特爾酷睿系列的第一代。當(dāng)前的 Broadwell 架構(gòu)是英特爾酷睿品牌的第 4 代(英特爾至強 E5 v4)炫加,最后一段包含了更多關(guān)于微架構(gòu)世代的信息瑰煎。在 QuickPath 架構(gòu)中,內(nèi)存控制器移至 CPU俗孝,并引入了 QuickPath 點對點互連 (QPI) 作為系統(tǒng)中 CPU 之間的數(shù)據(jù)鏈路酒甸。

image.png

Nehalem 微架構(gòu)不僅取代了傳統(tǒng)的前端總線,而且將整個子系統(tǒng)重組為服務(wù)器 CPU 的模塊化設(shè)計赋铝。這種模塊化設(shè)計被稱為“Uncore”插勤,并創(chuàng)建了一個用于緩存和互連速度的構(gòu)建塊庫。移除前端總線改善了帶寬可擴展性問題革骨,但在處理大量內(nèi)存容量和帶寬時必須解決處理器內(nèi)和處理器間通信饮六。集成內(nèi)存控制器和 QuickPath 互連都是 Uncore 的一部分,并且是模型特定寄存器 (MSR)苛蒲。它們連接到提供處理器內(nèi)和處理器間通信的 MSR卤橄。Uncore 的模塊化還允許英特爾提供不同的 QPI 速度,在編寫英特爾 Broadwell-EP 微架構(gòu)(2016)時提供 6臂外。每秒 4 千兆傳輸 (GT/s)窟扑、8.0 GT/s 和 9.6 GT/s。分別在CPU之間提供25.6 GB/s漏健、32 GB/s和38.4 GB/s的理論最大帶寬嚎货。從這個角度來看,最后使用的前端總線提供了 1.6 GT/s 或 12.8 GB/s 的平臺帶寬蔫浆。在引入 Sandy Bridge 時殖属,Intel 將 Uncore 重新命名為 System Agent,但當(dāng)前文檔中仍使用術(shù)語 Uncore瓦盛。您可以在第 2 部分中找到有關(guān) QuickPath 和 Uncore 的更多信息洗显。然而,術(shù)語 Uncore 仍在當(dāng)前文檔中使用原环。您可以在第 2 部分中找到有關(guān) QuickPath 和 Uncore 的更多信息挠唆。然而,術(shù)語 Uncore 仍在當(dāng)前文檔中使用嘱吗。您可以在第 2 部分中找到有關(guān) QuickPath 和 Uncore 的更多信息玄组。

3:可擴展的緩存一致性

每個核心都有一個通往 L3 緩存的專用路徑。每條路徑都由一千根電線組成,你可以想象俄讹,如果你想減少納米制造工藝哆致,同時增加要訪問緩存的內(nèi)核,這將無法很好地擴展患膛。為了能夠擴展沽瞭,Sandy Bridge Architecture 將 L3 緩存從 Uncore 中移出,并引入了可擴展的環(huán)形片上互連剩瓶。這允許 Intel 將 L3 高速緩存劃分和分布在相等的片中驹溃。這提供了更高的帶寬和關(guān)聯(lián)性。每個切片為 2.5 MB延曙,一個切片與每個核心相關(guān)聯(lián)豌鹤。該環(huán)還允許每個內(nèi)核訪問其他所有切片。下圖是 Broadwell 微架構(gòu) (v4) (2016) 的低核心數(shù) (LCC) Xeon CPU 的芯片配置枝缔。


image.png

這種緩存架構(gòu)需要一個監(jiān)聽協(xié)議布疙,該協(xié)議結(jié)合了分布式本地緩存和系統(tǒng)中的其他處理器,以確保緩存一致性愿卸。隨著系統(tǒng)中內(nèi)核的增加灵临,窺探流量會增加,因為每個內(nèi)核都有自己穩(wěn)定的緩存未命中流趴荸。這會影響 QPI 鏈接和末級緩存的消耗儒溉,需要不斷開發(fā)探聽一致性協(xié)議。第 3 部分將深入介紹 Uncore发钝、可擴展環(huán)形片上互連以及緩存?zhèn)陕爡f(xié)議對 NUMA 性能的重要性顿涣。

非交錯啟用 NUMA = SUMA

物理內(nèi)存分布在主板上,但是酝豪,系統(tǒng)可以通過在兩個 NUMA 節(jié)點之間交錯內(nèi)存來提供單個內(nèi)存地址空間涛碑。這稱為節(jié)點交錯(設(shè)置在第 2 部分中介紹)。啟用節(jié)點交錯后孵淘,系統(tǒng)將成為足夠統(tǒng)一的內(nèi)存架構(gòu) (SUMA)蒲障。系統(tǒng)不是將系統(tǒng)中處理器和內(nèi)存的拓?fù)湫畔⒑托再|(zhì)中繼到操作系統(tǒng),而是將整個內(nèi)存范圍分解為 4KB 可尋址區(qū)域瘫证,并以循環(huán)方式從每個節(jié)點映射它們揉阎。這提供了一種“交錯式”內(nèi)存結(jié)構(gòu),其中內(nèi)存地址空間分布在節(jié)點之間痛悯。


image.png

有趣的是余黎,SUMA 系統(tǒng)提供了統(tǒng)一的內(nèi)存訪問時間重窟。只是不是最佳的载萌,并且在很大程度上取決于 QPI 體系結(jié)構(gòu)中的競爭級別。Intel Memory Latency Checker用于演示同一系統(tǒng)上 NUMA 和 SUMA 配置之間的差異。
此測試測量系統(tǒng)中從每個套接字到另一個套接字的空閑延遲(以納秒為單位)扭仁。Socket 0 報告的內(nèi)存節(jié)點0 的延遲是本地內(nèi)存訪問垮衷,內(nèi)存節(jié)點1 的socket 0 的內(nèi)存訪問是配置為NUMA 的系統(tǒng)中的遠程內(nèi)存訪問。

image.png

正如預(yù)期的那樣乖坠,交織受到不斷遍歷 QPI 鏈接的影響搀突。空閑內(nèi)存測試是最好的情況熊泵,一個更有趣的測試是測量加載延遲仰迁。如果您的 ESXi 服務(wù)器處于空閑狀態(tài),那將是一項糟糕的投資顽分,因此您可以假設(shè) ESXi 系統(tǒng)正在處理數(shù)據(jù)徐许。測量負(fù)載延遲可以更好地了解系統(tǒng)在正常負(fù)載下的性能。在測試期間卒蘸,負(fù)載注入延遲每 2 秒自動更改一次雌隅,并且?guī)捄拖鄳?yīng)的延遲都是在該級別測量的。本次測試使用100%讀取流量缸沃。左側(cè)為NUMA測試結(jié)果恰起,右側(cè)為SUMA測試結(jié)果。

image.png

與配置為 NUMA 的系統(tǒng)相比趾牧,SUMA 系統(tǒng)報告的帶寬較低检盼,同時保持較高的延遲。因此翘单,重點應(yīng)該放在優(yōu)化 VM 大小上以利用系統(tǒng)的 NUMA 特性梯皿。

Nehalem & Core 微架構(gòu)概述

隨著 2008 年 Nehalem 微架構(gòu)的推出,英特爾放棄了 Netburst 架構(gòu)县恕。Nehalem 微架構(gòu)向英特爾客戶介紹了 NUMA东羹。多年來,英特爾根據(jù)其著名的 Tick-Tock 模型引入了新的微體系結(jié)構(gòu)和優(yōu)化忠烛。每一次 Tick 都會進行優(yōu)化属提,縮小工藝技術(shù),每一次 Tock 都會引入新的微體系結(jié)構(gòu)美尸。盡管 Intel 自 2012 年以來提供了一致的品牌模型冤议,但人們傾向于使用 Intel 架構(gòu)代號來討論 CPU tick 和 tock 世代。即使 EVC 基線也列出了這些內(nèi)部英特爾代號师坎,品牌名稱和架構(gòu)代號將在本系列中使用:

image.png

接下來恕酸,第 2 部分:系統(tǒng)架構(gòu)

NUMA 深度剖析系列:

  • 第 0 部分: 介紹 NUMA 深度剖析系列
  • 第 1 部分:從 UMA 到 NUMA
  • 第 2 部分:系統(tǒng)架構(gòu)
  • 第 3 部分:緩存一致性
  • 第 4 部分:本地內(nèi)存優(yōu)化
  • 第 5 部分:ESXi VMkernel NUMA 構(gòu)造
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胯陋,隨后出現(xiàn)的幾起案子蕊温,更是在濱河造成了極大的恐慌袱箱,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义矛,死亡現(xiàn)場離奇詭異发笔,居然都是意外死亡,警方通過查閱死者的電腦和手機凉翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門了讨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人制轰,你說我怎么就攤上這事前计。” “怎么了垃杖?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵残炮,是天一觀的道長。 經(jīng)常有香客問我缩滨,道長势就,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任脉漏,我火速辦了婚禮苞冯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侧巨。我一直安慰自己舅锄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布司忱。 她就那樣靜靜地躺著皇忿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坦仍。 梳的紋絲不亂的頭發(fā)上鳍烁,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音繁扎,去河邊找鬼幔荒。 笑死,一個胖子當(dāng)著我的面吹牛梳玫,可吹牛的內(nèi)容都是我干的爹梁。 我是一名探鬼主播勺疼,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼捕捂,長吁一口氣:“原來是場噩夢啊……” “哼玲销!你這毒婦竟也來了诈乒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赘方,失蹤者是張志新(化名)和其女友劉穎榜苫,沒想到半個月后陕悬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡絮宁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年梆暮,在試婚紗的時候發(fā)現(xiàn)自己被綠了服协。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绍昂。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偿荷,靈堂內(nèi)的尸體忽然破棺而出窘游,到底是詐尸還是另有隱情,我是刑警寧澤跳纳,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布忍饰,位于F島的核電站,受9級特大地震影響寺庄,放射性物質(zhì)發(fā)生泄漏艾蓝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一斗塘、第九天 我趴在偏房一處隱蔽的房頂上張望赢织。 院中可真熱鬧,春花似錦馍盟、人聲如沸于置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽八毯。三九已至,卻和暖如春瞄桨,著一層夾襖步出監(jiān)牢的瞬間话速,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工芯侥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尿孔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓筹麸,卻偏偏與公主長得像活合,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子物赶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容