NUMA: Cores, memory, and the distance between them
18 days ago
- #Performance Optimization
- #Virtualization
- #NUMA
- NUMA(非一致性内存访问)是指内存访问开销因 CPU 与内存条位置的不同而存在差异,这与 UMA(一致性内存访问)形成对比。
- NUMA 的出现是为了突破单插槽系统的限制,每个插槽拥有自己的内存控制器,并通过如 AMD 的 HyperTransport/Infinity Fabric 和 Intel 的 QPI/UPI 等互连技术连接。
- 由于采用如 AMD 的 EPYC 小芯片设计和 Intel 的子 NUMA 集群等技术,现代服务器每个插槽可包含多个 NUMA 节点,已超越“一个插槽一个节点”的传统模型。
- 在现代服务器的微基准测试中,远程内存访问比本地访问慢 1.5 到 3 倍,且在高负载下因互连争用而进一步恶化,进而影响尾部延迟。
- 内存交错技术通过将内存分布到多个节点来平衡访问开销,但以牺牲峰值性能为代价换取可预测性,导致“所有访问都同样糟糕”的局面。
- NUMA 涉及两种亲和性:CPU 亲和性(将进程绑定到特定 CPU)和内存亲和性(控制每个节点的内存分配),二者必须协调一致才能实现最优性能。
- Linux 的“首次接触”策略会在首次访问内存的 CPU 所在节点分配内存,如果分配线程与使用线程位于不同节点,则可能导致远程访问。
- Xen 的 dom0 缺乏 NUMA 感知能力,导致客户机虚拟 CPU 与内存位置不匹配,悄无声息地引发跨互连访问和性能问题。
- 像 Xen 这样的虚拟化系统具有两层架构(管理程序和客户机),分别做出放置决策;而 KVM 则由宿主机 Linux 内核统一管理虚拟机的 NUMA 策略。
- Edera 的研究实现了 Xen 端到端的 NUMA 感知,使客户机能够获取准确的拓扑信息并优化资源放置,避免了“盲目且交错”的困境。