我想做的是:将一个文件放在 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 绑定在一起文件相反,让我的生活更轻松。
有人对如何解决这个问题有任何想法吗?