1. 程式人生 > >NUMA入門:那些必須知道的基礎概念

NUMA入門:那些必須知道的基礎概念

本文為閱讀NUMA Deep Dive的閱讀筆記。
更多詳細資訊請參考原文。

Concepts

  • QPI QuickPath Interconnect
  • SUMA Sufficiently Uniform Memory Architecture
  • ACPI Advanced Configuration and Power Management Interface
  • ACPI SRAT System Resource Allocation Table
  • ACPI SLIT System Locality Information Table
  • IMC Integrated Memory Controller
  • HA Intel Home Agent

NUMA Architecture

NUMA架構中最重要的兩個部分是:QPI architecture和memory subsystem。

  • LLC是memory subsystem中最為重要的一個組成部分。Sandy Bridge架構之後,每個core都有自己的LLC(last level cache),然後通過一個ring on-die Interconnect來聯通。

  • QPI在NUMA結點之間提供了資料傳輸的介面和頻寬。Cross node的remote memory access, memory migration, cache snooping等等都依賴於QPI的架構,頻寬和速度

這裡寫圖片描述

NUMA vs SUMA

其實,即使在多個結點下,依然可以做成UMA,這樣做就是SUMA。通過開啟Node Interleaving選項就可以變成SUMA模式。

Node Interleaving Disabled - NUMA

在關閉Node Interleaving的模式下,就是NUMA模型。ACPI會建立SRAT (System Resource Allocation Table),其描述了實體記憶體的結構,比如哪一段記憶體是屬於這個NUMA結點的。然後其會將這些記憶體對映到一個連續的地址空間中。所以訪問自己的local的memory和訪問remote node的memory是non-uniform的。

Node Interleaving Enable - SUMA

在開啟Node Interleaving的模式下,其會將所有的地址空間分為4KB的小塊,然後迴圈分配到各個結點上。訪問跨結點的記憶體的時候還是走的QPI,但是由於SUMA均勻的分佈在各個結點上,SUMA提供的是uniform的記憶體訪問。但是嚴重依賴於競爭程度和QPI結構。

NUMA 具體訪問記憶體步驟

如果CPU core想訪問記憶體(L1與L2 都 cache miss了),必須和uncore打交道。

  • 如果在LLC中,需要通過Cbox(Caching agent)拿。
  • 如果在local memory的話,需要通過home agent 和 IMC拿
  • 需要在remote NUMA node拿的話,就需要QPI到其他node(再通過HA和IMC拿)

Cache Coherency in NUMA

Cache 結構

Sandy Bridge 架構:L1,L2單獨,LLC分散式,on-die scalable ring architecture。

訪存位置 消耗cycles
L1 4 cycles
L2 12 cycles
L3(LLC) 26~31 cycles
local memory 190 cycles
remote memory 310 cycles

L1 Cache 分為指令cache和資料cache,L2 Cache為指令與資料共享。

L2 Cache中不一定有L1 Cache的資料,但是LLC 設計成必須包含L1 L2 Cache中的所有資料。

Cache Prefetching

有軟體prefetch和硬體prefetch兩種。

  • 軟體prefetch是SSE(Streaming SIMD Extension),其會告訴CPU一條指令會具體需要哪些data。
  • 硬體prefetch分為L1、L2 prefetch。當訪問出現一定的模式時,L1的資料Cache會prefetch下一行Cache line。L2的prefetch還會在出現太多新的訪問時,將已經修改的資料放回L3 Cache。
  • L2 的prefetch包含Spatial Prefetcher和Streamer。
    • Spatial prefetcher會一次性fetch 128-byte的Cache line(2個Cache line)來填滿一個128-byte對齊的chunk。
    • streamer 則會監控L1Data Cache來只取適當的data和instructions。

LLC Last Level Cache

LLC通過on-die ring連通,具體的latency決定於需要多少跳來訪問到資料。在LLC中,Cache根據記憶體地址雜湊均勻的分佈在分佈的slices中(所以是一個統一的L3,不需要Cache coherency來保證資料一致)。所有的L3 slices均連線到on-die interconnect上,其也連通了core和uncore。在Haswell之後,這個ring每個點都有buffered interconnects,從而允許ring中獨立的執行。(順時針、逆時針均可,一跳一跳地訪問)

Cache Snooping

在NUMA中,是L1、L2和L3維持一個Cache Coherence協議。(因為L2不完全包括L1,所以不能只是L2和L3的。不確定,還要再看看)。Intel新推出了MESIF協議,不一樣的是原來Cache line為S狀態的節點都可以responce查詢,現在只有升級成F狀態的節點才能responce請求並forwarding。實際上的snoop modes有很多種。

Early snoop

在Early snoop模式下,caching argent (cbox) 負責生成snoop probe/request,然後通過on-die ring來直接傳送這些snoop到其他的caching argent(或者直接broadcast)。這種模式可以有很低的延遲,但是其會佔用很多NUMA結點之間的頻寬,降低NUMA的效能。

Home snoop

在Home snoop模式下,Home agent負責產生snoop request。由於需要傳送request時需要先到HA,然後才通過on-die ring,導致了比較高的延遲。但是這樣會降低頻寬的損耗。(Why?統一收集了request再發送?)

Home Snoop with Directory and Opportunistic Snoop Broadcast

基於目錄式的Home snoop,不再broadcast,而是直接去找對應的CPU要。且會根據具體的頻寬的負載,傳送request內容有變化。(不是很理解)

Cluster-on-Die

把一個packeage分成兩個結點,有單獨的ring on-die與memory controller。這種snoop mode擁有最低的本地LLC hit 的latency和本地記憶體訪問的latency

Conclution

總的來說,隨著微架構的變化,策略的變化,底層的細節變化良多。但是總的來說,有以下特點:L1,L2是local的,L3是全域性的。所以有的時候把remote node的data prefetch到L3,理論上應該可以減少cross node memory access的latency。

NUMA Energy Efficient

最近都很關注Energy Efficent,想花最少的錢來計算更多的東西。之前研究過多核跑在不同的頻率下的問題。

  • 針對uncore,有frequency scaling functionality。由於即使CPU只有很少很少的負載,uncore仍然需要提供各種功能。而現在的uncore可以隨著CPU負載變化而改變頻率,比如uncore的頻率可以設定成與最快的核心相同。有的QPI可以關閉線路,或者縮減頻寬。
  • 針對CPU,在Haswell之後的架構,提供了Per Core Power States,其允許CPU跑在不同的頻率下。Energy Efficient Turbo

Generally, this modularity should make it more power efficient, however, some IT teams don’t want their system to swing up and down but provide a consistent performance. Especially when the workload is active across multiple nodes in a cluster, running the workload consistently is more important that having a specific node to go as fast as it can.

這一點和想的一樣,如果特別注重效能,或者想要一個比較穩定的效能,一定是會跑在最高頻率下。其中QPI的Power Management可以在BIOS中關閉。