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
L14 cycles
L212 cycles
L3(LLC)26~31 cycles
local memory190 cycles
remote memory310 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中关闭。


版权声明:本文为He11o_Liu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。