繁体   English   中英

NUMA 在虚拟内存中是如何表示的?

[英]How is NUMA represented in virtual memory?

有许多资源从硬件角度描述了 NUMA 的体系结构以及编写 NUMA 感知软件的性能影响,但我还没有找到关于如何根据 NUMA 决定虚拟页面和物理帧之间的映射的信息.

更具体地说,在现代 Linux 上运行的应用程序仍然看到一个连续的虚拟地址空间。

应用程序如何知道地址空间的哪些部分映射到本地内存,哪些映射到另一个 NUMA 节点的内存?

如果答案是应用程序无法分辨,操作系统如何决定何时将虚拟页面映射到另一个 NUMA 节点的物理内存而不是本地物理内存?

一个快速的答案是让程序查看 /proc/self/numa_maps。 示例输出如下所示:

$ cat /proc/self/numa_maps    # dumps current zsh numa_maps
55a4d27ff000 default file=/usr/bin/zsh mapped=177 N0=177 kernelpagesize_kB=4
55a4d2ab9000 default file=/usr/bin/zsh anon=2 dirty=2 N0=2 kernelpagesize_kB=4
55a4d2abb000 default file=/usr/bin/zsh anon=6 dirty=6 N0=4 N1=2 kernelpagesize_kB=4
55a4d2ac1000 default anon=9 dirty=9 N0=4 N1=5 kernelpagesize_kB=4

每行显示的第一个字段是起始地址,它允许与 /proc/pid/maps 的输出相关联。 然后N<node>=<pages>告诉您每个节点上分配了多少页。

因此,如果您需要知道某个内存区域的 NUMA 节点号,请对该文件的输出进行二等分搜索。

这里有更多信息:

https://www.kernel.org/doc/Documentation/vm/numa_memory_policy.txt https://lwn.net/Articles/486858/更好的 NUMA 调度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM