【问题标题】:linux kernel module memory layout under NUMANUMA下linux内核模块内存布局
【发布时间】:2015-04-24 09:35:47
【问题描述】:

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

【问题讨论】:

  • AFAIK 模块将仅加载到架构定义的模块虚拟地址空间中。此外,引用你读过的东西对每个人都有帮助。
  • 感谢 Jonathon 添加的参考资料。

标签: linux-kernel


【解决方案1】:

这取决于操作系统。如果您使用的是 Linux,将应用“First Touch”策略。这意味着您程序的所有数据都将分配在一个靠近包含您的程序运行的 CPU 的节点上。

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

这取决于您是否要编写可识别 NUMA 的代码以避免 NUMA 延迟和争用。尽管一些 Linux 发行版已经实现了一些 NUMA 平衡特性。 (例如Automatic NUMA Balancing

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 2011-11-29
    • 2014-06-01
    • 2012-04-11
    • 2013-12-17
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多