linux NUMA下内核模块内存布局

linux kernel module memory layout under NUMA

如果我在模块中有静态数据,例如 static int some_param 和我 运行 在带有 NUMA 的多 cpu 机器上。数据段将位于何处?我读到在 NUMA 上可能会复制文本以避免访问远内存节点的延迟,但数据无法复制,因为它不是只读的。 模块本身在哪里加载?它是 NUMA 感知的还是必须加载到预定义模块映射区域。

参考资料如下: http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Mark_Wagner.pdf http://www.cs.dartmouth.edu/~sergey/cs108/solaris_kernel_memory.pdf http://halobates.de/memory.pdf

这取决于OS。如果您使用 Linux,将应用 "First Touch" 政策。这意味着您程序的所有数据都将分配在靠近包含您的程序 运行.

的 CPU 的节点上

从逻辑上讲,您的程序将看到一个唯一的共享内存。在较低的杠杆中,OS 可能会在不同的 NUMA 节点上分配数据,从而导致一些性能问题。

这取决于您是否要编写 NUMA 感知代码来避免 NUMA 延迟和争用。尽管一些 Linux 发行版已经实现了一些 NUMA 平衡功能。 (例如 Automatic NUMA Balancing