如果我在模块中有静态数据
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
答案 0 :(得分:0)
这取决于操作系统。如果你正在使用Linux" First Touch"政策将适用。这意味着您程序的所有数据都将分配在一个节点附近,该节点包含运行程序的CPU。
逻辑上,您的程序将看到一个唯一的共享内存。在较低的杠杆中,OS可以在不同的NUMA节点上分配数据,从而导致一些性能问题。
如果您想编写支持NUMA的代码以避免NUMA延迟和争用,这取决于您。虽然一些Linux发行版已经实现了一些NUMA平衡功能。 (例如Automatic NUMA Balancing)