NUMA下的linux内核模块内存布局

时间:2015-04-24 09:35:47

标签: linux-kernel

如果我在模块中有静态数据 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

1 个答案:

答案 0 :(得分:0)

这取决于操作系统。如果你正在使用Linux" First Touch"政策将适用。这意味着您程序的所有数据都将分配在一个节点附近,该节点包含运行程序的CPU。

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

如果您想编写支持NUMA的代码以避免NUMA延迟和争用,这取决于您。虽然一些Linux发行版已经实现了一些NUMA平衡功能。 (例如Automatic NUMA Balancing