引言:最好的调优,就是不要(手动)调优吗?如果是手机、PC之类的消费级产品确实如此,OEM厂商甚至把一般人不需要修改的BIOS设置隐藏掉。对于服务器用户群,虽不太容易做到这样,但如果能做得相对“傻瓜”,需要修改调优的选项少一些则更好。
前几年我曾经发过2篇相关内容:
《服务器BIOS应用调优:低延时、虚拟化、数据库、SDS和CSP》
《新一代Xeon Scalable服务器BIOS性能调优指南》
就在后面那篇的读者留言中,有专家朋友表示参数太多、可能调优不明显?也有读者询问有没有AMD平台服务器的BIOS调优介绍(因为前面2篇都是针对Xeon的)。
就在半年前,我还真想过要整理一篇(上面截图为证),后来没发出来是觉得当时的资料对读者朋友可能参考有限。如果只是做个简单翻译意义不大…
直到我在EPYC 9005 CPU发布之后,看到AMD官方文档《BIOS & Workload Tuning Guide for AMD EPYC™ 9005 Processors》,又想分享给大家。倒不一定是里面有多高深的调优秘诀,反而是每一项BIOS选项的介绍写得不错,对于AMD服务器平台不是太熟的朋友参考下挺合适的。
讲清楚设置选项的作用,大家就会容易理解调优时为什么需要改 / 或者不改。
注:本文是我学习后整理的笔记,如有不足之处欢迎批评指正。对于服务器技术专家、英文好的朋友也可以直接看AMD原始文档(链接见文末)。
5大领域、19类细分服务器应用
1.Processor Core Settings
Simultaneous Multithreading (SMT) Settings
译文:启用同步多线程(SMT)会对某些工作负载(尤其是高性能计算(HPC))产生中性到负面的性能影响。此外,一些应用程序许可证计算启用的硬件线程数量而不是物理核心数量。因此,在你的 AMD EPYC 9005 系列处理器上禁用 SMT 可能是最佳选择。
注:大多数应用保持打开;部分网卡吞吐/延时敏感型应用,以及部分HPC、EDA应用可考虑禁用。
Cache Prefetchers
译文:大多数工作负载和生产部署都受益于L1 和 L2 流硬件预取器收集数据并使核心流水线保持繁忙状态,但是对于一些将内存带宽用到最大容量的工作负载而言,当部分或全部预取器被禁用时,性能可能会更好。默认情况下所有预取器都是启用的。务必针对您的部署对预取器进行评估。
注:根据我的经验,绝大多数应用不需要修改L1/L2 Cache默认的预取设置。在少数关系型数据库中,可以考虑禁用L1 Stream HW Prefetcher和L2 Stream HW Prefetcher。
Core Performance Boost
译文:核心性能加速(Core Performance Boost)可以启用或禁用。启用此设置后,处理器能够根据系统中活跃核心的数量、功率和散热空间,适时地将一组 CPU 核心的频率提升到高于 CPU 额定基本时钟速度的水平。
一些工作负载不需要最高核心频率就能达到可接受的性能。限制最大核心加速频率可以降低功耗。BoostFmax 设置会限制最大加速频率,但不会设定一个固定频率。如果BoostFmax 设置得过高,片上系统(SoC)将不会超过算法允许的最大频率。实际的加速性能取决于许多因素,包括本调优指南中讨论的其他设置。
Global C-States Control
译文:全局 C-States控制可启用和禁用服务器上所有核心的 C-States。禁用此功能意味着 CPU 核心只能处于 C0(活动)或 C1 状态,因为 C1 状态无法被禁用。如果操作系统暂停某个核心,该 CPU 核心将处于 C1 状态。基于 I/O 的 C-States生成和深度休眠(DF)C - 状态包含核心处理器 C-States。如果您有低延迟或极低抖动的使用场景,那么可以考虑按照本调优指南所述禁用深度休眠 C-States。AMD 强烈建议除了调试情况外,不要禁用全局 C-States。
2.Power Management Settings
Power Profile Selection
注:默认设置为0: High Performance mode (高性能模式);要求控制电源能效的场合建议设置为1: Effciency Mode;部分关系型数据库可考虑设置为2: Maximum IO Performance。
Power vs. Performance Determinism Settings
译文:“确定性启用(Determinism Enable)” 可在以下两者之间选择:
Performance(对于大多数操作处理编号(OPNs)而言是默认选项)
在数据中心内,配置相同的系统间可实现统一性能。需将热设计功耗(TDP)和平台功率限制(PPL)设置为相同的值。这样一来,无论环境或芯片存在何种变化,工作负载性能都能保持一致。
Power
通过最大限度地发挥给定 CPU 的能力来实现单个系统的最高性能,这会导致在数据中心或更大规模部署中出现不同的性能范围。
将 “确定性(Determinism)” 设置为 “性能” 时,无论环境或芯片的差异如何,都能使工作负载性能保持相同。
将 “确定性” 设置为 “功率”,可将工作负载性能在特定部件功率限制内最大化,从而依据芯片利用额外的性能提升空间。如果使用功率确定性,可通过将 TDP 和封装功率限制(PPL)设置为CPU 所支持的最大 TDP 值来获取最大性能。将 TDP 和 PPL 设置为 “自动(Auto)”,会将这两个参数都设为 CPU 的默认TDP 值,以实现节能运行。
注:按照AMD的建议,存储I/O吞吐型应用、关系型数据库、AI/ML和EDA应用,建议修改为Power。
Processor Cooling and Power Dissipation Limit Settings
译文:一个操作处理编号(OPN)的热设计功耗(TDP)代表了所有处理器组件为实现给定性能目标而消耗的功率。这个性能目标可能在远低于 TDP 的情况下就可达成,在这种情况下,处理器将有提升空间以超越性能目标运行。这种提升空间因不同部件而异(硅片制造时产生的)。你可以通过 BIOS 的确定性(Determinism)设置来利用超出 OPN 目标性能的额外性能。
封装功率跟踪器(PPT)控制每个处理器的封装功率限制,适用于系统中安装的所有处理器。更多信息请参阅功率/ 性能确定性部分。
注:有些应用建议将TDP和PPT修改为手动和OPN Max,详见参考文档。
ACPI—Collaborative Processor Performance Control (CPPC)
译文:启用协作式处理器性能控制(CPCC)能让操作系统通过控制Turbo的应用时机和幅度来帮助维持能效。高级配置与电源接口(ACPI)5.0 引入了这一特性。并非所有操作系统都支持 CPCC。微软从 Windows Server 2016 开始支持 CPCC。
3.NUMA and Memory Settings
L3 Cache as NUMA Domain
译文
- 禁用(推荐):非统一内存访问(NUMA)节点(cpubind)和内存交错(membind)都由 “每处理器插槽数(NPS)” 设置决定。
- 启用:通过将每个末级高速缓存(LLC)映射为一个 NUMA 节点,覆盖非统一内存访问节点数量的 NPS 设置。这不会对内存交错产生影响。
注:大多数应用不建议打开。一部分内存和I/O密集型工作负载中的内存吞吐型应用、Linux KVM虚拟化(取决于虚机是否跨CCD?)、大数据分析应用可以尝试打开。
NUMA Nodes per Socket (NPS)
译文:此设置用于在针对支持非统一内存访问(NUMA)的工作负载或高度可并行化的工作负载最小化本地内存延迟,与针对不适合 NUMA 的工作负载最大化每核心内存带宽之间进行权衡。在某些操作处理编号(OPNs)上或者对于某些内存配置,NPS2 和/或 NPS4 可能不是可用选项。
- NPS1:表示每个插槽有一个 NUMA 节点。此设置将处理器上的所有内存通道配置到一个单一的 NUMA 域中。处理器的所有核心、所有连接的内存以及连接到片上系统(SoC)的所有 PCIe 设备都在这一个 NUMA 域内。内存访问在全部 24 个内存通道间交错进入一个单一地址空间。对于大多数工作负载,建议使用默认配置(每个插槽一个 NUMA 域)。
- NPS2:每个插槽有 2 个 NUMA 域,它将同一个 6 个计算芯片(CCD)NUMA 域内相应的 6 个内存通道进行交错。片上系统一半的核心和一半的内存通道被分组到一个 NUMA 域,其余的核心和内存通道被分组到第二个 NUMA 域。内存在每个 NUMA 域的 6 个内存通道间交错。
- NPS4:将处理器划分为 4 个 NUMA 域,每个逻辑象限被配置为其自身的 NUMA 域。内存在每个象限内的 3 个内存通道间交错。PCIe 设备将根据其设备的 PCIe 根复合体所在的(I/O 芯片的)象限而属于四个 NUMA 域之一。每对内存通道都是交错的。对于高性能计算(HPC)和其他高度并行的工作负载,建议使用此设置。对于具有超过 64 个核心的 AMD EPYC 处理器,当启用同步多线程(SMT)启动 Windows 系统时,必须使用 NPS4,因为 Windows 将一个 CPU 组的大小限制为最多 64 个逻辑核心。
*Due to the Windows kgroup max of 64 logical processors:
• If (Cores/Socket <= 32 then set NPS1
• If (32 < Cores/Socket <= 64 ) then set NPS2.
• IF (64 > Cores/Socket) then set NPS4.
注:建议设置为NPS=2的包括Java延时敏感应用、EDA应用。
建议设置为NPS=4的包括Java吞吐、电源效率(Power Efficiency)、Windows下的关系型数据库(Linux应保持默认,以及部分HPC应用。
也有专家朋友表示,NPS=2在较多的BenchMark测试中表现更好,供大家参考。
大家还记得我在《AMD EPYC2服务器片上NUMA设置&应用建议》中列出的下图吗?
EPYC 2代(上图)与5代对比,是不是如今NPS 1的适用性改善了?需要将NPS改为4的应用有所减少,应该反映了CPU架构的改进。
Memory Target Speed
译文:默认情况下,第五代 AMD EPYC 处理器的 BIOS 在平台和双列直插式内存模块(DIMM)所允许的最大目标频率下运行。这种配置能为处理器提供最大的内存带宽和最低的延迟。降低内存时钟速度可减少内存控制器的功耗,并使片上系统(SoC)的其余部分能消耗更多功率,从而有可能提高特定工作负载在其他方面的性能。
Memory Interleaving
译文:此设置允许您启用或禁用非统一内存访问(NUMA)节点内的内存交错。无论此设置如何,每插槽 NUMA 节点数(NPS)设置都将保持有效。此 BIOS 设置不会对 NUMA 节点的数量或者内存通道映射到 NUMA 节点的方式产生影响。
注意:AMD 强烈建议不要禁用此设置,因为大多数应用程序和部署都能从内存交错中获益。
4.Infinity Fabric Settings
Link Speed
译文:降低链路速度会减少跨插槽带宽并增加跨插槽延迟,但也可以节省非核心功率(即不由核心消耗的 CPU 功率),从而实现以下两点之一:
- 提高核心频率。
- 降低整体功耗。
注:大多数场景,考虑到性能不建议修改。
xGMI Link Width Management
译文:xGMI(一种接口技术)动态链路宽度管理通过将每条链路的活动 xGMI 通道数从 16 减少到 8,或者在 xGMI 链路流量有限的情况下减少到 4,从而在插槽间数据流量较低的时期节省功耗。在一些涉及低带宽、对延迟敏感的流量场景中,当处理器从低功耗 xGMI 状态转换到全功率 xGMI 状态时,延迟可能会增加。将 xGMI 链路宽度控制设置为手动并指定强制链路宽度可以消除此类延迟抖动。对插槽间带宽和延迟都不敏感的应用程序可以使用强制链路宽度为 8(在某些平台上为 2)来节省功耗,这样可以将更多功率分配给核心以实现加速。
注:EDA应用建议将xGMI Link Width Control和xGMI Force Link Width改为手动,并将xGMI Force Link Width “强制固定”。
NIC网络延时敏感应用,建议将xGMI Max Link Width Control固定为x16。
Power States
译文:启用或禁用算法性能提升(APB)。默认情况下,AMD Infinity Fabric(无限互连架构)会根据使用情况在全功率和低功率的互连架构时钟及内存时钟之间进行选择。在一些涉及低带宽、对延迟敏感的流量的场景中,当处理器从低功率转换到全功率时,延迟可能会增加。将 APBDIS 设置为 1(即禁用 APB)并指定 Infinity Fabric 的固定 P-state为 0,可强制 AMD Infinity Fabric 和内存控制器进入全功率模式,并显著减少延迟抖动。
注:电源效率、存储I/O吞吐型应用、关系型数据库和EDA应用,建议将APB Disable (APBDIS)修改为1。
DF C-States
译文:与 CPU 核心很相似,AMD 无限互连架构(Infinity Fabric)在空闲时可以进入低功耗状态,但在转换回全功率模式时会有延迟,这会导致一些延迟抖动。对于需要低延迟和 / 或突发 I/O 的工作负载,禁用此功能会提高性能,但也会增加功耗。
5. PCIe, I/O, Security, and Virtualization Settings
APIC Settings
译文:与传统的 xAPIC 模式相比,使用 x2APIC 时中断传递通常更快,但并非所有操作系统都支持 AMD x2APIC。如果您的操作系统支持(包括逻辑处理器少于 256 个的配置),AMD 推荐使用这种模式。
SR-IOV Settings
译文:单根 I/O 虚拟化(SR - IOV)需要在根复合体和端点上都启用PCIe 替代路由 ID 解释(ARI)。ARI 设备将 PCI 地址解释为 8 位功能号,而不是 3 位功能号,并且设备号默认为 0。
PCIe Ten Bit Tag
译文:PCIe 适配器必须支持 10 位扩展标签才能实现 PCIe 5 代的最大带宽。这通过允许非 posted 请求数量比之前增加两倍来提升适配器性能。并非所有 PCIe 5 代设备都支持 10 位扩展标签,这可能在启动期间导致问题。如果适配器出现问题,禁用此功能可使服务器启动。
Input-Output Memory Management Unit (IOMMU) Settings
译文:启用输入 / 输出内存管理单元(IOMMU)能让诸如 AMD EPYC 处理器集成的 SATA 控制器之类的设备为每个连接的设备呈现独立的中断请求(IRQ),而不是为整个子系统提供一个中断请求。IOMMU 还能让操作系统为具有直接内存访问(DMA)能力的 I/O 设备提供额外的保护。如果您认为 IOMMU 限制了性能,可以在 BIOS 中保持其启用状态,然后通过操作系统选项(例如,在 Linux® 内核命令行中使用 iommu = pt)将其禁用。当使用 x2APIC 时,需要启用 IOMMU。
Transparent Secure Memory Encryption (TSME)
译文:此功能对存储在系统双列直插式内存模块(DIMMs)中的所有数据提供硬件内存加密,这种加密对操作系统是不可见的,但会略微增加内存延迟。
SEV, SEV-ES, and SEV-SNP
译文:请参阅AMD EPYC™ 9005 Cloud Infrastructure and Datacenter Design & Configuration Guide (available from the AMD Documentation Hub),以了解有关 AMD EPYC 安全功能的信息。
AVIC& x2AVIC
译文:与禁用高级虚拟中断控制器(AVIC)的系统相比,启用 AVIC 可能不会提高系统性能。在某些情况下,启用 AVIC 时的性能可能会明显低于禁用 AVIC 时的系统性能。AMD 建议不要在生产系统中启用 AVIC。
x2AVIC 是高级虚拟中断控制器(AVIC)的扩展,它支持超过 255 个虚拟 CPU,并且性能优于 AVIC。它也可以被看作是 x2APIC 的硬件虚拟化。有了 x2AVIC,客户机的本地高级可编程中断控制器(APIC)硬件辅助虚拟化可扩展到 512 个虚拟 CPU。在 AMD Socket SP5 处理器之前,虚拟机需要禁用 x2APIC 功能,因为使用它会绕过硬件 AVIC 并使用软件模拟的 x2APIC。然而,有了 x2AVIC,客户机将能够利用 x2APIC 的性能优势。
小结:每一项优化建议,背后往往有对应的Benchmark性能测试验证,但也可能会有一定的局限性。希望本文分享内容对大家有帮助:)
扩展阅读:《企业存储技术》文章分类索引更新(微信公众号合集标签)
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。进一步交流,可以加我的微信:490834312。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)
END
作者:唐僧huangliang
原文:企业存储技术
推荐阅读
欢迎关注企业存储技术极术专栏,欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。