DCDC’19-NUMA的优势和陷阱

去年的DCDC,我主要介绍了基于RDT技术对云计算场景做优化,转眼就一年过去了。2019年DCDC依旧还是Santa Clara、台北、上海、北京4处分会场。不同的是今年SC的presentation已经由我在美国的同事代领;台北今年取消了所有的云计算的专题;仅存京沪两地的演讲计划将在下周开始。照旧,这次分享下基于英文版本的内容(PS:不得不删除部分内容,整体略凌乱见谅!)。

背景

从当前的路线图来看,不管是Intel还是AMD都推出了“单socket多die”的CPU设计,带来了更复杂的硬件拓扑;加上随着云计算的大行其道,CSP逐渐倾向于更高计算密度的服务器,比如4 Sockets。那是不是说只要把业务平切过去就能享受更多的die/socket带来的提升呢?个人了解,很多CSP还是倾向于UMA,但至少他们一致认为相比UMA,NUMA将会是主流,那我在机房简单地开启NUMA呢是不是就万事大吉了呢?

其实对于NUMA的优势这一部分的内容,本站已经陆陆续续的分享了很多,讲稿中主要介绍的就是SPECCPU2017的不同测试组件在NUMA和UMA的性能差异。直接贴我自己的fp数据吧(注:非讲稿数据):

从全局上看,大多数的组件都能从NUMA上得到性能的提升,部分的测试甚至可以用“magnificent”来形容。

另:增加一次UPI通讯会增加~40ns(20%+)的时延开销;远端最大可测得内存带宽下降8%-21%。

在Skylake这一代server CPU,每个socket预留了3个UPI link ports,基于2个socket的Xeon 系统,当下的设计有2条UPI和3条UPI互联两种。每条UP能够承载的带宽可以通过如下公式进行计算。然而,即便是3条UPI承载的最大带宽68GB/s来说,也只能提供大约3个内存通道的带宽,况且在一个完整的系统中UPI还需要分担PCIe的额外带宽。对于密度更大的4socket 平台,3link/socket的设计仅能满足每两个CPU之间仅有1条UPI互联。不用细算也看得出,UPI带宽变得紧张起来,相比2S上还可以扭扭捏捏,4S上看来NUMA是不得不开了。

4 Socket System CPU connection topology

陷阱1: 错误的内存-核心绑定策略导致的NUMA失效

当下很多云计算系统的任务管理器会倾向于使用CPU绑定(CPU affinity)技术为不同的任务分配CPU,这样的又是是可以减少由于CPU频繁切换导致的性能损失。出于减少碎片化的目的,这样的系统往往习惯于连续分配CPU core。但一旦NUMA策略于CPU分配策略出现冲突,往往就会出现某些应用必须跨socket访问远端内存的错误设置。

错误的内存-核心绑定策略导致的NUMA失效

陷阱2:错误的PCIe设备部署

每个CPU socket都有自己的PCIe控制器接口,但大多数的服务器主板不会分开标记PCIe插槽属于某个CPU。图例中假定APP工作在Socket3,有大量的网络访问不得不通过UPI绕行到Socket1——可能是IP/网络的设定原因,或者socket本身根本没有独立的网卡。在这种情况下,UPI,特别是socket0-socket3之间的UPI会承担大量的不必要压力,影响到正常的UPI使用。在PCIe Gen4/5之后,PCIe设备带宽提升以后,这种错误的设置产生的影响会更加恶劣。

注:本例以网卡为实例,但任何的PCIe设备包含硬盘均有类似的陷阱。

错误的PCIe设备部署

陷阱3:特殊的应用

部分应用的特性决定了增加内存带宽并不会过多的影响到性能,减少内存时延反而会大幅提升性能,且在某些场景下势必多个socket必须访问同一段地址空间(比如全局锁)。单纯的启用NUMA,导致了内地址空间的相对隔离,时延的原因导致性能会由于NUMA的启用而下降。

陷阱4:NUMA auto-balance

Kernel 3.8之后,系统会允许任务在多个NUMA节点之间自动迁移。 Kernel的具体开关

sysctl -w kernel.numabalancing={0,1}

问题在于这个过程对于用户来说得到的结果并不是可预期的,很多实例上的reclaim和swap的操作都与这个开关有关。

总结:优化NUMA架构的的主机并不是单单开启一两个开关就够了,NUMA的优化与否取决于多个子系统的使用情况:

  • CPU 系统,CPU的使用率是否够高,LLC 的cache是否会有潜在的争抢以及AVX512这类的重指令是否会有频率甚至电力方面的争抢等。
  • 内存系统,内存的带宽和时延,内存控制器是否饱和,应用程序是否有内存锁等。
  • UPI 链接:带宽的消耗等。
  • PCIe 设备的部署情况等。

推荐阅读:
时延 latency(亦称为延
事出前些日子有人咨询我:“在某
有感于CPU的各种电源状态描述
如果大家了解一点CPU的知识,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据