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