如何将所有内存分配限制为一个NUMA节点

时间:2012-10-09 19:02:12

标签: numa

我是NUMA感知多线程编程的新手。我正在编写我的代码,以便所有线程及其内存分配都限制在一个节点上。在程序开始时,我进行以下调用:

struct bitmask *bm = numa_parse_nodestring("0");
if (bm == 0) {
    exit(1);
}
numa_bind(bm);

我的理解是以这种方式调用numa_bind会将所有线程和所有内存分配绑定到节点0。

此外,当我从此代码启动pthread时,我使用以下命令将它们绑定到特定的CPU:

pthread_setaffinity_n

但是,当我查看/ proc // numa_maps时,我仍然可以看到某些库(例如libc)绑定到节点1上的内存。如何确保进程所需的所有内存都是绑定到节点0?

2 个答案:

答案 0 :(得分:0)

libc之类的共享库不能绑定到进程/应用程序指定的内存库。请参阅shared-library-numa

答案 1 :(得分:0)

代码往往会缓存在本地处理器的L3缓存中。由于它是只读的,因此一旦将其加载到缓存中,就不太可能产生任何流量。我不会太烦心,除非你有分析信息表明它确实存在问题。