本页面介绍了建议您在 H4D 计算实例上运行的 MPI 应用中使用 Cloud RDMA 时使用的 PSM3 配置参数。
如需了解所有可用的 PSM3 配置参数,请参阅 Intel Ethernet Fabric Suite 主机软件用户指南。
针对数据流突发或 UD 流量大的应用的建议
如果应用突然出现流量高峰或严重依赖不可靠的数据报 (UD) 模式,可能会使网络接口过载,导致源端丢包。
- 解决方案:配置基于信用的反压力系统,以调节传输突发并防止传输层丟包。一个 Compute Engine H4D 实例总共提供 256 个积分。我们建议您为每个 vCPU 分配至少 1 个固定积分,并将所有剩余容量放入共享池中。
建议的配置(每个节点 192 个 rank 的示例):对于每个节点 192 个 rank 的操作,如果每个 vCPU 获得 1 个固定积分,则共享池将为 256 - 192 = 64。
IRDMA_SHARED_UD_CREDITS=64 IRDMA_TRANSPARENT_UD_QD_OVERRIDE=1
如果总信用数超出建议的限额,可能会导致源端传输丢包。虽然过度订阅(将总信用额度设置为高于可用信用额度)可以提高具有稳定低密度流量模式的工作负载的性能,但通常会降低以突发流量或大量 UD 流量为特征的工作负载的性能。
您可以使用以下环境变量来调整 Cloud RDMA 性能:
- IRDMA_SHARED_UD_CREDITS:指定可供单个节点上的所有进程使用的全局 UD 信用池的大小。如果值为 64,则表示有一个 64 个积分的共享储备,任何进程都可以使用。
- IRDMA_TRANSPARENT_UD_QD_OVERRIDE:限制
irdma驱动程序中使用 UD 的队列对 (QP) 的队列深度。设置为1时,它会与IRDMA_SHARED_UD_CREDITS搭配使用,以强制执行传输层反压,并防止在多进程高负载下出现传输队列溢出。
针对具有高可靠性或高内存要求的应用的建议
为确保接收端 UD 数据包的可靠性,您的 RDMA 应用必须分配足够的接收缓冲区,并在完成队列 (CQ) 中保持可用槽位。
高可靠性标准建议:使用以下环境变量来指定更高的队列深度,尽最大努力避免接收队列 (RX) UD 数据包丢弃。
PSM3_NUM_RECV_WQES=32767 PSM3_NUM_RECV_CQES=65536高内存需求情况下的例外情况:如果您的应用面临内存不足 (OOM) 问题,请减小队列大小,但保持这两个值之间的比例不变。
高性能共轭梯度 (HPCG) 等应用对内存有极高的要求。使用高可靠性标准建议的设置可能会导致 OOM 错误。
PSM3_NUM_RECV_WQES用于指定每个本地端点分配的接收工作队列条目 (WQE) 和急切反弹缓冲区数量。值越大,内存开销就越大。
您可以使用以下环境变量来提高可靠性或内存利用率:
PSM3_NUM_RECV_WQES:设置要分配的 RX WQE 数量。UD QP 的大小为PSM3_NUM_RECV_WQES + 1032 WQEs。此形参还会设置为每个本地端点分配的 UD 接收急切反弹缓冲区数量(每个缓冲区的大小为PSM3_MTU)。PSM3_NUM_RECV_CQES:控制用于接收操作的完成队列条目 (CQE) 数量。此参数可确保完成队列中始终有可用的 slot,从而有助于确保接收端 UD 数据包的可靠性。较高的队列深度(例如 65536)有助于避免 RX UD 数据包丢弃,但会使用内存,并可能导致内存密集型应用出现 OOM 错误。
不重复使用缓冲区的应用的建议
某些应用(例如 High-performance LINPACK [HPL])会频繁分配和释放临时通信缓冲区,而不是保留和重复使用这些缓冲区。这种不断请求和释放内存的循环会迫使系统不断注册和注销内存页,从而造成严重的性能瓶颈。
解决方案:作为解决方法,请使用自定义内存分配器(如
jemalloc)。jemalloc是一款高性能通用内存分配器 (malloc),旨在强调并发伸缩并避免内存碎片。通过强制高效回收大型通信缓冲区(大于 128 KB),此解决方案可绕过昂贵的内核重新分配周期并恢复 PSM3 性能。推荐的配置:
安装
jemalloc。例如,在 Rocky Linux 上,您可以运行以下命令,这些命令使用 Extra Packages for Enterprise Linux (EPEL) 代码库:sudo dnf install epel-release sudo dnf install jemalloc
在运行应用之前,预加载
jemalloc并应用优化的缓存限制:LD_PRELOAD="/usr/lib64/libjemalloc.so.2" export MALLOC_CONF="dirty_decay_ms:-1,muzzy_decay_ms:-1,lg_tcache_max:26"
配置命令使用以下设置:
LD_PRELOAD:指定在启动进程之前要加载的共享库。MALLOC_CONF:为jemalloc配置内存分配行为。dirty_decay_ms:-1和muzzy_decay_ms:-1:指示jemalloc永远不要将未使用的内存返回给操作系统。这样可使页面永久注册,以便立即重复使用。lg_tcache_max:26:将每个线程的内存缓存限制增加到 64 MB,从而确保积极缓存大型通信缓冲区。
后续步骤
- 如需查看其他性能调优建议,请参阅使用 Cloud RDMA 优化和扩缩 MPI。