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

osg*_*sgx 7 memory linux-kernel numa

当我们在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

默认策略称为first-touch.在此策略下,首先触摸(即写入或读取)内存页面的进程会导致该页面在运行该进程的节点中分配.此策略适用于顺序程序和许多并行程序.

还有一些其他非本地政策.还有一个功能要求将内存段显式移动到某个NUMA节点.

但有时候(在单个应用程序的许多线程的上下文中)有一个"下一步触摸"策略是有用的:调用一些函数来"取消绑定"某些内存区域(最多100s MB)和一些数据并重新应用"第一次触摸"此区域上的类似处理程序将在下次触摸(读取或写入)时将页面迁移到访问线程的numa节点.

当许多线程要处理大量数据并且存在对此数据的不同访问模式时(例如,第一阶段 - 通过线程按列分割2D数组;第二阶段 - 按行分割相同数据),此策略非常有用.

从9开始,通过带有MADV_ACCESS_LWP标志的madvice支持这种策略

https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise

MADV_ACCESS_LWP告诉内核接触指定地址范围的下一个LWP将最大程度地访问它,因此内核应该尝试为此范围和LWP分配内存和其他资源.

有(可能是2009年)linux内核的补丁名为"affinity-on-next-touch", http://lwn.net/Articles/332754/(线程),但据我所知它是不被接受到主线,不是它?

还有Lee Schermerhorn的"migrate_on_fault"补丁 http://free.linux.hp.com/~lts/Patches/PageMigration/.

所以,问题是:NUMA在当前的Linux内核或者一些主要的分支中是否有下一步的触摸,比如RedHat linux内核或Oracle linux内核?

小智 1

根据我的理解,香草内核中没有类似的东西。numactl 具有手动迁移页面的功能,但它可能对您的情况没有帮助。(NUMA 策略说明位于 Documentation/vm/numa_memory_policy 如果您想自行检查)

我认为这些补丁没有合并,因为我没有看到当前内核中出现任何相关的代码片段。