如何限制所有内存分配到一个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?
答
代码会倾向于缓存在本地处理器的L3缓存中。由于它是只读的,因此一旦将其加载到缓存中,就不太可能产生任何流量。除非你有分析信息表明它确实存在问题,否则我不会太费心。