2

我是 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?

4

2 回答 2

0

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

于 2013-09-10T13:10:22.497 回答
0

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

于 2016-12-29T16:04:27.423 回答