HPC广泛应用于地球科学、生命科学、物理化学材料、工业仿真、油气勘探、人工智能等领域。通常程序执行环境的差异会带来运行效率的差异,更高的运行效率能够帮助用户更快地完成计算任务。
大部分高性能计算领域的程序代码均由C/C++或Fortran编写而成,上述三种语言是更为靠近系统底层的语言,可以通过自底向上的调优更精准地控制程序的行为,获得更高的运行性能。
本文针对HPC应用首先从硬件层面的优化方法——BIOS参数优化展开,后续将持续介绍系统参数优化、编译参数优化、运行时参数优化等多个层面的优化方法。
在硬件层面,BIOS能够控制CPU、内存、硬盘等硬件的基础设置和行为,对BIOS进行适当的调节能够改善整机在特定条件下的性能。
在设置BIOS参数时,用户首先需要了解服务器的硬件配置,包括CPU型号、内存容量和频率、硬盘类型和数量等,以便根据具体硬件特点进行设置调整;需要综合考虑CPU、内存、硬盘、电源等方面的设置,以确保整个系统能够协同工作,提高整体性能。
本文以Intel Sapphire Rapids 6458Q平台为例进行介绍。Intel 6458Q为第四代英特尔至强可扩展处理器,拥有32个内核,支持64线程,最大睿频频率为4.00 GHz,基本频率为3.10GHz。
第四代英特尔至强可扩展处理器采用全新架构,单核性能比上一代产品更高,每路最多配备 60 个核心,比代号Ice Lake(-SP)的第三代至强可扩展处理器高出50%。第四代处理器在内存和I/O子系统方面也做了相应改进,其支持DDR5 内存,单路CPU支持8通道DDR5,速率达到4800MT/s,单/双路节点比上代ICL-SP的8通道DDR4 3200MT/s提高了50%;单路CPU支持80通道的PCIe5.0,单/双路节点比上代ICL-SP的64通道PCIe4.0提高了150%, I/O 得到显著提升;多路系统中CPU之间互联升级到4个UPI2.0,数据速度16GT/s,单/双路节点比上代ICL-SP的3个UPI,数据速度 11.2GT/s高128%。此外,第四代处理器还支持Compute Express Link (CXL),显著提升了整体数据的吞吐量。
CPU相关参数
1.Turbo Boost
英特尔睿频加速技术(Intel Turbo Boost Technology)是英特尔2012年起应用处理器的独有功能。当开启睿频加速之后,CPU会根据当前的任务量动态改变处理器时钟频率(主频),从而在执行重任务时发挥最大的性能,轻任务时发挥最大节能优势。一般可以设置为Enable。
2.Hyper Thread
Hyper Thread技术是把一个物理CPU核虚拟成多个逻辑CPU核并允许并行执行指令的功能。它非常适合运行内存IO密集而非计算密集的应用程序,因为IO操作会有更多的等待时间可以被利用。一般关闭该功能。
超线程也有其弊端,例如它会导致总体延迟的增加、能耗的增加以及CPU缓存的抖动。吞吐量能否提升和应用程序的计算类型密切相关,计算密集型的应用程序使用超线程技术反而是有害的。
3.P-state
P-state在Intel平台上通常指的是EIST(Enhanced Intel SpeedStep Technology),EIST允许多个核动态地切换电压和频率,动态的调整系统的功耗。一般设置为Enabled。
4.CPU C6
CPU C6是一些处理器上可用的节能状态或休眠状态。当CPU空闲时,它可以进入不同的睡眠状态,以降低功耗。C6是这些睡眠状态之一,它允许CPU在内核不使用时完全关闭其内核。禁用C6可以潜在地提高某些场景中的性能。
5.C1E
C1E是一种自动节能功能,它是指当计算机系统处于空闲状态时,会自动触发的一种节能机制。这种功能的作用是降低CPU的功耗,从而减少电量消耗和热量产生。在超频时,最好禁用C1E功能,避免在系统空闲时自动进行节能,从而保持CPU的高频率运行状态,有助于提高系统的稳定性。
6.Package C-states
Package C-states针对整个CPU的socket的,主要手段是关闭package的一部分以节省电源。当所有核都处于除C0(active)之外的C-states时,package C-states就会生效。Package除了CPU核,还包括其他的模块,如共享缓存、集成PCIe、内存控制器等。因此为了提高系统性能,一般选择C0/C1 state。
缓存相关参数
1.Sub NUMA Clustering(SNC)
SNC根据地址范围将最后一级缓存(Last Level Cache,LLC)分解为不相交的集群,每个集群绑定到系统中内存控制器的子集。启用该选项可以提高支持 NUMA 并进行优化的工作负载的性能。
2.IMC(Integrated memory controller) interleave
IMC 交错,即通过在不同内存上的交错访问来提高内存访问性能的技术。此BIOS选项控制集成内存控制器(IMC)之间的交错,内存可以在插槽、内存控制器、DDR通道之间交错。交错可以允许多个DIMM的并发访问,多个独立的通道(channel)提高了数据传输速率,也降低了延迟。一般选择支持最多交错的“8-way Interleave”。
3.XPT(Extended Prediction Table) Prefetch
XPT预取旨在减少本地内存访问延迟。此预取器位于可以预取MLC和LLC中的数据的其他预取器之上。XPT预取器将在LLC查找的同时发出推测性DRAM读取请求。此预取绕过LLC,减少了延迟。一般选择打开。
4.Total Memory Encryption(TME)
Intel TME使用一个临时密钥对计算机的整个内存进行加密,所有进出CPU的存储器数据都将会被加密。开发Intel TME的目的是为系统内存提供更全面的保护并使其免受硬件攻击。为了降低系统延迟,一般选择关闭该选项。
5.Memory controller page policy
内存控制器的页面策略决定是否(以及多长时间)保持DRAM页面有效,以期望在下一次引用某个存储区时仍然是同一页,从而降低延迟。有以下两种策略:
关闭页面(Close):内存控制器在访问某个存储区后,立即关闭DRAM页面。这可以减少功耗,但可能导致下一次对该存储区的引用需要重新打开页面,增加访问延迟。
自适应页面策略(Adaptive):内存控制器根据访问模式和工作负载的特点,动态地选择保持页面打开或关闭。这种策略可以根据实际情况在延迟和功耗之间进行权衡,以获得最佳性能。一般选择该选项。
6.LLC(Last Level Cache)Prefetch
最后一级缓存预取功能,使核心预取器能够将数据预取到LLC,是现有预取器之上的附加预取机制。 启用预取后,系统将从根本上利用更多的内存访问流量,如果内存控制器不是关键的性能瓶颈,可以提高内存性能表达。通常,将此选项设置为Enable可以提供更好的性能。
7.LLC Dead Line Alloc
在Skylake-SP的非包含式缓存方案中,MLC(Mid-Level Cache)驱逐的数据可能会填充到LLC(Last-Level Cache)中。
禁用Dead Line LLC Alloc功能:被标记为“dead”的数据将始终被丢弃,不会填充到LLC中。这样做可以帮助节省LLC的空间,并防止LLC驱逐有用的数据。
启用Dead Line LLC Alloc功能:LLC可以在有空闲空间时机会性地将这些被标记为“dead”的数据填充到LLC中,一般可以选择启动该选项。
8.Directory AtoS
该选项与内存中的缓存一致性协议有关。内存目录有三种状态:I、A和S。
I(invalid)状态:表示数据是干净的,并且不存在于任何其他socket插槽的缓存中。
A(snoopAll)状态:表示数据可能存在于另一个插槽中,处于独占或修改状态。
S(shared)状态:表示数据是干净的,并且可以在一个或多个插槽的缓存中共享。
如果启用了stale AtoS功能,在A状态返回未命中的情况下,该行将转换为S状态。这样降低了延迟,节省了一致性检测带宽。在存在许多跨socket插槽读取的工作负载中,stale AtoS可能是有益的。因此一般将该选项设置为Auto。
其他参数
1.Relaxed Ordering
与其他协议一样,当同一个通信等级(Traffic Class, TC)的多个事务(Transactions)同时通过同一个通道时,PCIe对这些事务设置了一些排序(Transaction Ordering)规则。这样做可以保持与传统总线的兼容性。
Strong Ordering强制按照先来后到的方式进行传递,一视同仁,不管是否有特殊情况,均不允许插队和绿色通道。PCIe支持的Relaxed Ordering的传递规则不会要求严格的先来后到,也意味着根据轻重缓急找到最佳的方案,提高数据的传输效率。一般选择将Relaxed Ordering打开。
2.Direct-to-UPI(D2U)
D2U是一种用于远程读取事务的功能,能够降低读取时的延迟。启用D2U后,IMC将直接将数据发送到UPI(即Intel的Ultra Path Interconnect,取代QPI的技术。拥有更高的通信速率、效率、更低的功耗。),而不是通过缓存和主机代理(Caching and Home Agent,CHA),从而减少延迟。尽管高度NUMA优化的工作负载或使用高内存带宽的工作负载可能不太受到禁用D2U的影响,但一般将该选项设置为Auto。
3.DBP-for-F
DBP-for-F是一个新功能,目前没有更详尽的文档,它可以使多线程工作负载受益,但单线程工作负载可能会降低性能,可以酌情打开该功能。
4.Intel VT-D
Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA操作和中断传递进行重定向,从而辅助VMM(Virtual Machine Monitor)实现I/O子系统的虚拟化。一般选择打开该选项。
VT-d是一个位于CPU、内存和I/O设备之间的硬件设备,通常位于PCI设备树的根部,或者类似的位于I/O子系统的根部,当VT-d重定向硬件设备启用的时候,它会拦截位于它下面的所有I/O设备产生的中断请求和通过DMA方式对虚拟机内存访问的请求,然后通过查找中断重定向表或者I/O页表的方式(类似分页机制)来重新定位中断转发的目标LAPIC或者是I/O设备访问的目标主机物理内存地址。如下图所示:
以上就是针对Intel BIOS的一些基本设置。BIOS参数优化是提升HPC应用性能的重要手段,但需要结合服务器的硬件配置进行全面的考虑。
引用:
Intel_Xeon_Processor_Scalable_Family_BIOS_User_Guide.pdf