AMD EPYC2服务器片上NUMA设置&应用建议
目录
- Xeon Scalable内存控制器及均衡配置
- AMD的Chiplet“小芯片”设计特点
- EPYC2 NPS(NUMA)设置与应用建议
- 内存通道(CCD分布)越多,性能一定更好?
早在2年半之前的《多级NUMA:AMD EPYC互连速率、位宽与功耗的关系》一文中,我就简单讨论过AMD服务器CPU的片上(on Socket)NUMA设计;到了第二代EPYC有些变化,我又在《单节点230虚拟桌面、6 GPU卡:AMDEPYC vSAN超融合测试&参考架构》中围绕VDI应用继续谈到了这个话题。今天我想再深入展开一些。
Xeon Scalable内存控制器及均衡配置
首先拿服务器市场的CPU“霸主”做个参照。大家都知道Inetl Xeon SP一代和二代处理器都是集成6通道内存控制器,它们又被分成2组控制器(各3通道)的内存子系统,如上图。
关于内存配置是否均衡,结构决定性质:
- 每颗Xeon Scalable安装内存为6或6的倍数(6通道),是带宽最理想的均衡(Balanced)配置;
- 每CPU 1-3个DIMM内存(1-3通道),属于近均衡(Near Balanced)配置,我觉得数量太少时也是没有更好的办法,这时应优先把一侧的内存控制器通道用满;
- 每CPU 4、8个DIMM内存(4通道),也属于近均衡(NearBalanced)配置,这时就要在两侧的内存控制器对称安装了;
- 每CPU 5、7、9、10、11个DIMM内存属于非均衡(Unbalanced)配置,应尽量避免。
Intel Xeon CPU内存带宽与DIMM条数之间的对照大家可能看到过,下面我列出AMD EPYC2的情况,您会发现相似的地方。
图片点开后可缩放,以下同
由于用在PowerEdge R6525服务器上的AMD EPYC 7742是顶配的64核,所以在每CPU配置8或8的倍数条内存时,双路带宽最高达到330 GB/s以上;
余下的配置中,4通道和双数内存插法(排除8和16)都属于Near-Balanced。比如Unbalanced配置中的7、11、15条内存,其带宽就分别低于6、10、14个DIMM;但也有“意外”的情况——上图表中每CPU 9和13条内存时带宽就测到了32x GB/s,只能说Stream-Triad测试方法可能有局限(使用的内存容量不够多)。
AMD的Chiplet“小芯片”设计特点
关于Chiplet这个话题,Winnie Shao博士有2篇行业和生态角度的精彩文章,下面列出供大家参考。
这个图我也不是第一次给大家出示了。AMD EPYC2凭借将8个小的CCD(Core Die)和I/O Die分开的设计,再加上CCD使用7nm先进工艺,在核心数量上做到了64,超出Intel Xeon。
同时代价也是有的,那就是和第一代EPYC服务器CPU类似的片上NUMA(非一致性内存访问),尽管内存控制器都在中间那颗大的I/O Die上。
如上图,ROME(EPYC2)的8个内存通道分别属于4个内存控制器,每2个CCD Die能够就近优化访问其中的一组,而跨越“四象限”的内存访问就不是最佳性能(延时/带宽)了。
上图出自一位发烧友兄弟之手,我不保证其中每一处细节都完全准确,不过这个用来辅助说明EPYC2的片上NUMA设计还是比较形象的。
EPYC2 NPS(NUMA)设定与应用建议
我截了一段关于NPS设置的定义:
- NPS 0——双CPU系统设置为1个NUMA节点(相当于Intel Xeon系统关闭NUMA),所有内存通道使用interleave交错访问模式;
- NPS 1——每个CPU插槽1个NUMA节点(相当于Intel Xeon系统打开NUMA),连接到同一插槽的所有内存通道使用交错访问;
- NPS 2——每个CPU插槽2个NUMA节点,划分为2个4内存通道的interleave集;
- NPS 4——每插槽4个NUMA节点,在“四象限”各自的2通道内存间交错访问,相当于CPU to内存的亲和优化到每个内存控制器;
之前我曾介绍过,像VDI这样的应用推荐NPS设为4,是因为物理服务器的计算和内存资源都是细分给每个虚拟机,然后虚拟机利用vNUMA优化访问就近的内存控制器即可。但不是所有应用都这么理想,下面我先引用Dell白皮书《Balanced Memory with 2nd Generation AMD EPYC Processors for PowerEdge Servers》中的一个表格:
起初看到这份资料时我有点疑惑——内存数量不是4的倍数时NPS(即NUMA节点数)也推荐设为4?不过细想一下,最右边一列应该都算非Balanced内存配置,不能做到4个内存控制器的DIMM配置完全对等。我看到过有的朋友建议,在AMDEPYC2服务器上应尽量少用达不到Balanced的插法——也就是说最好按照每颗CPU 4、8、12、16条内存来配。
而在内存达到4和8的倍数时,为什么反而要建议NPS设为1或者0呢?我觉得这里是为了保守起见。毕竟许多传统应用没有NUMA优化、或者习惯于针对Intel Xeon每插槽一个NUMA节点来优化,这时AMD的片上NUMA如果打开有可能带来负面结果。
同时,大家也别忘了不是每一款AMD EPYC2 CPU都支持NPS 4,下表供参考:
总的原则是,如果EPYC2的8个CCD都激活,那么一般就会支持到NPS 4;而如果只有8-16个核心并且都位于四象限的1-2组内存控制器附近,那么就可能不支持NPS 2和4。
特别一点的是,像7552这样48核没有在四象限完全对称分布,所以也只支持到NPS2;而7262的8个核心反而均等处于四个象限,所以支持NPS4。
这个来自Dell文档《NUMA Configuration settings on AMD EPYC 2nd Generation》的图表,是我认为本文中最有价值的。其中总结了4大类型的应用工作负载:
通用工作负载建议NPS=1。其中SPEC CPU测试和I/O密集型应用是这方面的代表;SPEC的另外2套BenchMarkjbb2015和power ssj2008则适合NPS设为4/2。
虚拟化类应用可以设为NPS 1/4。除了我以前介绍过的VDI,容器类应用也属于资源隔离比较好的,所以NPS建议也是4;但像VMmark 3这样测试虚机资源开销不等的复杂环境,NPS还是建议为1。
数据库和分析类应用NPS1/4。这里HammerDB对应的是OLTP交易型数据库,NPS建议设为1,其实按照Oracle用户的习惯,Intel CPU插槽间的NUMA通常也要关掉,否则一旦内存利用不均衡触发swap对性能影响较严重。Hadoop应该属于适合水平扩展的分析型应用,建议NPS设置4。
高性能计算和电信类应用建议NPS 2/4。HPC和EDA(电子设计自动化)可以把NPS设为4,基于OpenStack的NFV(网络功能虚拟化)又分细出一项实时Kernel的,都建议设置NPS 2。
下面我引用AMD文档《RDBMS Tuning Guide for AMD EPYC 7002 Series Processors》侧面验证下上述观点:
对于通用(常规的)Oracle数据库,建议BIOS中每插槽的NUMA节点设为1,也就是NPS 1。
对于微软SQL Server 2019,如果是OLTP也是建议NPS 1;DW数据挖掘(分析型)应用则可以根据情况来选择是否设置为2或者4,下面这段英文供参考。
内存通道(CCD)越多,性能一定更好?
前面我整理那个表格里,可以看到有些核心数相同的EPYC2 CPU,在CCD上分布的情况不同,导致支持的NPS设置也不同。
上图引用自Dell文档《The Value of Using Four-Channel Optimized AMD EPYC CPUs in PowerEdge Servers》,左边CPU核心所在的CCD临近2组内存控制器,所以为4通道优化型;而右边CPU核心的CCD则分布于4组内存控制器附近,就是8通道优化型。那么在同样插4条内存的情况下,哪个性能更好?
上图用同为16核的EPYC 7282和7302进行对比(都配置4通道内存),CPU核心分布在更多CCD Die上的7302在主频、功耗和内存带宽指标上全面领先,但一些应用中性能反而落后。像Web Server、基于Web的Java应用以及内容创建(视频编辑、图像处理),此处就推荐使用AMD7282、7252一类4通道优化型的CPU。
这应该就是核心相对集中的好处,7282每8个Core之间的内存数据能够享受就近访问的待遇;而7302的内存访问路径在I/O Die上就相对复杂了。
受篇幅和时间所限,更多技术细节暂未展开讨论,希望对大家有参考价值:)
参考内容
https://downloads.dell.com/manuals/common/dellemc-balanced-memory-2ndgen-amd-epyc-poweredge.pdf
https://downloads.dell.com/manuals/common/dell-emc-dfd-numa-amd-epyc-2ndgen.pdf
https://developer.amd.com/wp-content/resources/56949_1.0.pdf
https://downloads.dell.com/manuals/common/dell-emc-dfd-advantage-four-channel-memory-poweredge-amd-epyc.pdf
扩展阅读:《企业存储技术》文章分类索引(微信公众号专辑)》
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。进一步交流技术,。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)
尊重知识,转载时请保留全文,并包括本行及如下二维码。感谢您的阅读和支持!《企业存储技术》微信公众号:HL_Storage
长按二维码可直接识别关注
历史文章汇总:http://chuansong.me/account/huangliang_storage
http://www.toutiao.com/c/user/5821930387/
↓↓↓