本文主要是介绍Evaluating Emerging CXL-enabled Memory Pooling for HPC Systems——论文泛读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MCHPC@SC 2022 Paper CXL论文阅读汇总
问题
当前的高性能计算(HPC)系统提供的内存资源是静态配置的,并与计算节点紧密耦合。然而,HPC系统上的工作负载正在演变。多样化的工作负载导致对可配置内存资源的需求,以实现高性能和高利用率。
现有方法局限性
CXL是用于互连处理器、加速器和内存的开放标准。符合CXL标准的硬件提供了对应用程序代码透明的低延迟、高带宽数据访问。一些工作已经探索了用于数据中心和云工作负载的基于CXL的内存[4]–[6],[9]。然而,对HPC系统和工作负载的支持CXL的内存池的全面理解仍然缺失。
本文方法
我们评估了利用CXL内存池技术的内存子系统设计。研究了两个有前景的组合内存子系统的用例:细粒度容量配置和可扩展的带宽配置。我们开发了一个仿真器,以探讨各种内存组合对性能的影响。我们还提供了一个分析器,用于识别应用程序中的内存使用模式及其优化机会。在各种模拟内存配置上评估了七个科学应用和六个图形应用。其中七个科学应用中有三个在内存池支持其75%内存占用时的性能影响不到10%。结果还表明,动态配置的高带宽系统可以有效地支持像OpenFOAM这样的带宽密集型非结构网格应用。最后,我们确定通过共享内存池引起的干扰是HPC系统采用该技术面临的一个实际挑战。
仿真器和分析器
分析器和仿真器由约600行C代码实现,与Linux内核4.14及以上版本兼容。仿真器依赖于libnuma库。为了捕获内存使用度量,分析器和仿真器使用proc文件系统中的/proc/pid子树中的文件。这提供了一种不需要特殊权限的可移植方法。从smaps_rollup中读取的指标,如常驻集大小和引用的内存页数,以及从numa_maps中读取的每个NUMA域中的页面数。从这些文件中读取会导致内核扫描进程的内存区域并返回请求的度量标准。分析器还可以通过写入clear_refs来重置所有页面的引用状态。
为了捕获进程的时间内存使用情况,分析器在计时器模式下运行,它以可配置的频率收集测量值并重置页面状态。为了捕获诸如冷页面数量之类的总结指标,分析器在中断模式下运行,利用Linux作业控制功能。我们修改基准测试以在定时区域的开始和结束时引发SIGSTOP信号,从而暂停进程。暂停进程会使用SIGCHLD信号唤醒分析器。分析器收集测量值并重置页面状态,然后通过发送SIGCONT信号恢复应用程序。对于无法更改基准测试代码的情况,我们还提供了输出中断模式,该模式监视进程的标准输出,并在匹配可配置模式的输出时将其暂停。使用epoll_wait循环等待计时器、信号和输出等事件。
在仿真器中,使用NUMA策略和锁定内存的组合来配置仿真的CXL内存系统。通过使用numa_run_on_node(),将应用程序限制在NUMA节点0上运行。我们让节点0中的内存表示本地/近端内存,其他NUMA节点中的内存表示通过CXL访问的远程内存。默认的分配策略将使用本地节点,直到其填满,然后开始使用其他节点。为了模拟本地和远程内存的一定比例的系统,我们使用mlock()锁定适量的本地内存,以强制分配器使用远程内存。为了模拟只有远程内存的系统,我们将分配策略设置为只使用节点1,使用numa_set_membind()。
采样开销是可调的,基于用户定义的采样频率。在1秒的频率下,与等效的numactl执行相比,分析器的采样开销为3%,仿真器的采样开销为2%。由于锁定了大量本地内存,当使用本地远程比例为0或1以外的比例时,仿真器具有与本地内存数量成比例的额外初始化时间。
使用MPI的工作负载由多个进程组成。在分析器中,我们选择对第0个进程进行采样。在仿真器中,我们独立采样所有进程,并在后处理步骤中聚合结果。
实验
使用两个NUMA测试台来模拟启用CXL的内存系统的潜在配置,如图1所示。第一个测试台具有双插槽Intel Xeon E5-2690V4处理器,通过两个QPI链路连接,配置为两个NUMA域。每个NUMA节点具有64 GB内存容量,总共128 GB内存。第二个测试台有一个AMD EPYC 7742处理器,具有四个NUMA域。它由四个核心复合体组成,每个复合体都有一个单独的内存控制器,分别提供33 GB/s的带宽。该测试台每个NUMA节点具有32 GB的内存容量,总共128 GB的内存。
总结
用仿真器和模拟器评估CXL对HPC应用和图应用的性能影响,将CXL用于内存容量扩展和带宽扩展。
结果显示,在仿真的CXL内存池系统上,CXL内存池占75%的内存使用情况下,七个HPC应用中有五个在仿真CXL系统上几乎没有性能降级。在仿真的高带宽CXL系统上,OpenFOAM和Hypre等带宽敏感性最高的应用程序也保持了性能,突显了CXL启用的内存系统在可扩展、成本效益高带宽系统方面的潜力。对于共享内存服务器上的干扰需要通过系统级的协调来解决,基于对每个作业动态使用情况的理解,以减轻性能降级。
这篇关于Evaluating Emerging CXL-enabled Memory Pooling for HPC Systems——论文泛读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!