在 x86_64/Linux 上通过 tmpfs 和 NUMA 使用共享内存

在 x86_64/Linux 上通过 tmpfs 和 NUMA 使用共享内存

我想做的是:将一个文件放在 tmpfs 上,但确保所有文件(它的所有页面)最终都位于同一个 NUMA 节点上。首先,我认为这很简单:我只需mmap()一个 tmpfs 文件MAP_SHARED,然后用mbind()它将其绑定到我想要的节点,然后我只需复制。然而,mbind() 的手册页明确排除了这种方法:

NUMA policy is not supported on a memory-mapped file range 
that was mapped with the MAP_SHARED flag.

天啊!手册mbind()页说,对于共享映射,我只能依赖进程内存策略(使用set_mempolicy())。但这远非理想:我正在运行一个大量的多线程应用程序,我不想关心哪个线程正在执行复制。我宁愿内存策略与 tmpfs 绑定在一起文件相反,让我的生活更轻松。

有人对如何解决这个问题有任何想法吗?

相关内容