进程固定注意事项

已完成

为什么要固定进程和线程?

始终将进程固定到特定内核,以帮助实现最大性能,并在每次运行之间获取更加一致的性能。

固定进程:

  • 通过将进程放置或固定在利用所有内存通道并在内核之间均匀分配所有内存通道的位置,实现内存带宽的最大化。

  • 通过保证每个进程都在其自己的内核上,提高浮点性能。 这消除了两个进程位于同一内核上的可能。

  • 通过将通信的进程放入非一致性内存访问 (NUMA) 域节点,优化进程间的数据移动。 这可以保证它们具有最低的延迟和最大的带宽。

  • 降低操作系统开销,并提供更加一致的结果,因为操作系统无法将进程移到不同的内核或 NUMA 域。

在哪里固定进程和线程?

若要确定固定进程和线程的位置,你需要了解处理器和内存拓扑,尤其需要了解 NUMA 域的数量和位置。

lstopo-no-graphics 实用工具(来自 hwloc RPM)和 Intel 内存延迟检查器 (MLC) 是确定处理器和内存拓扑的有用工具。 例如:VM 有多少个 NUMA 域? 每个 NUMA 域的成员都有哪些内核? 每个 NUMA 域中的进程在相互通信时的延迟和带宽是多少?

下图显示了 Intel MLC 生成的 HB120_v2 NUMA 域延迟映射。 NUMA 域之间的延迟越低,它们之间的通信速度就越快。 下图清楚地表明,HB120_v2 有 30 个 NUMA 域,以及哪些 NUMA 域在哪个套接字上。 它还表明哪些 NUMA 域可以组合在一起能够将数据传输和通信延迟降至最低。

显示 HB120_v2 NUMA 域延迟映射的图像。

Intel 处理器有 6 个内存通道,而 AMD EPYC 处理器有 8 个内存通道。 确保使用所有内存通道来实现可用内存带宽的最大化。 通过在 NUMA 节点域之间均匀分布并行进程可达到此目的。 对于混合并行应用程序,将进程/线程分组保持在相同的 NUMA 域中,最好是共享同一个 L3 缓存。 请确保总线程计数不超过内核总数。

下图说明了一个具有 2 个 NUMA 域和 44 个内核的 HC44 SKU。

显示 HC44 NUMA 域的图像。

下图说明了一个具有 15 个 NUMA 域和 60 个内核的 HB60 SKU。

显示 HB60 NUMA 域的图像。

内存带宽限制应用程序

如果应用程序受到内存带宽的限制,则可以通过减少每个 NUMA 节点域中的并行进程和线程的数量,在 VM 上获得更好的性能。 这可以为每个进程提供更多的内存带宽,也可能缩短时钟时间。

例如,如果你使用的是有 30 个 NUMA 节点域的 HB120_v2 SKU,则可以尝试在每个 NUMA 节点域上运行 1、2 和 3 个进程和线程(例如:每个 VM 运行 30、60 和 90 个进程和线程)。 然后,你可以查看哪些配置提供的性能更佳。