现代Linux中是否存在NUMA下一次触摸策略?

10
在 NUMA 系统中工作时,内存可以相对于当前的 NUMA 节点是本地的或远程的。为了使内存更加本地化,有一个“首次访问”策略(默认的内存绑定策略): http://lse.sourceforge.net/numa/status/description.html 默认内存绑定非常重要。用户程序的内存应该分配在靠近运行它们的 CPU 的节点上。因此,默认情况下,缺页错误将通过包含发生缺页错误的 CPU 的节点中的内存进行满足。由于第一次访问页面的 CPU 将是引起缺页的 CPU,所以这个默认策略被称为“首次访问”。 http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html
默认策略被称为首次访问。根据这种策略,首先接触(即写入或读取)内存页面的进程会导致该页面在运行该进程的节点上分配。这个策略对于顺序程序和许多并行程序都很有效。
还有其他一些非本地策略。此外,还有一个函数来要求将存储器段显式移动到某个 NUMA 节点。
但是有时(在单个应用程序的多个线程的上下文中),具有“下一个触摸”策略可能是有用的:调用某个函数以“取消绑定”带有一些数据的一些内存区域(高达 100 MB),并在该区域上重新应用类似于“首次触摸”的处理程序,这将在下一个触摸(读或写)时将页面迁移到访问线程所在的 NUMA 节点上。
如果有大量数据需要由许多线程处理,并且存在对这些数据的不同访问模式(例如第一阶段-通过线程按列拆分 2D 数组;第二阶段-按行拆分相同的数据),则此策略非常有用。
自 Solaris 9 以来,这种策略已经受到支持,使用 MADV_ACCESS_LWP 标志的 madvice。
https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise MADV_ACCESS_LWP 告诉内核,下一个 LWP 访问指定地址范围将会访问它,因此内核应尝试为该范围和 LWP 分配内存和其他资源。

2009年5月,Linux内核发布了名为“affinity-on-next-touch”的补丁。具体信息请参见http://lwn.net/Articles/332754/链接)。但据我所知,该补丁并未被主线接受,是吗?

此外,还有Lee Schermerhorn的“migrate_on_fault”补丁,其详情请参见http://free.linux.hp.com/~lts/Patches/PageMigration/

所以问题来了:当前的vanilla Linux内核或一些主要的分支中(例如RedHat Linux内核或Oracle Linux内核)是否有针对NUMA的next-touch功能?


请查看此论文 - https://hal.inria.fr/inria-00358172/file/article.pdf "Enabling High-Performance Memory Migration for Multithreaded Applications on Linux", Brice Goglin, Nathalie Furmento, 2009。"通过mprotect和信号处理程序的用户空间中下一次触摸策略的实现,是他们MaMI/Marcel的一部分。https://runtime.bordeaux.inria.fr/MaMI/ / https://runtime.bordeaux.inria.fr/marcel/ - osgx
1个回答

1
根据我的理解,在原始内核中没有类似的东西。numactl具有手动迁移页面的功能,但在您的情况下可能没有帮助。(如果您想自己检查,NUMA策略描述在Documentation/vm/numa_memory_policy中)
我认为这些补丁没有合并,因为我没有看到任何相关的代码片段出现在当前内核中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接