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

问题描述:

我是NUMA感知多线程编程的新手。我正在编写我的代码,以便所有线程及其内存分配都被限制在一个节点上。在节目的一开始,我提出以下电话:如何限制所有内存分配到一个NUMA节点

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

我的理解是,一个电话这种方式将绑定所有线程和内存分配到numa_bind到节点0

而且,当

pthread_setaffinity_n 

然而,当我查看/ proc // numa_maps,我仍然可以看到,某些库(如libc中)被绑定到:我从这个代码开始并行线程,我用它们绑定到特定CPU节点1上的内存。我怎样才能确保所有的内存需求红色由进程绑定到节点0?

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

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