NUMA - Linux手册页

时间:2019-08-20 18:02:00  来源:igfitidea点击:

Linux程序员手册 第7部分
更新日期: 2012-08-05

名称

numa-非统一内存架构概述

说明

非统一内存访问(NUMA)是指将内存分为多个内存节点的多处理器系统。存储节点的访问时间取决于访问CPU和被访问节点的相对位置。 (这与对称多处理器系统相反,在对称多处理器系统中,所有CPU的所有内存访问时间都相同。)通常,NUMA系统上的每个CPU都有一个本地内存节点,其内容访问速度比内存中的内存更快。另一个CPU本地的节点或所有CPU共享的总线上的内存。

NUMA system calls

Linux内核实现了以下与NUMA相关的系统调用:get_mempolicy(2),mbind(2),migrate_pages(2),move_pages(2)和set_mempolicy(2)。但是,应用程序通常应使用libnuma提供的接口。请参阅下面的"图书馆支持"。

/proc/[number]/numa_maps (since Linux 2.6.14)

该文件显示有关进程的NUMA内存策略和分配的信息。

每行包含有关该进程使用的内存范围的信息,除其他信息外,还显示该内存范围的有效内存策略以及在哪些节点上分配了页面。

numa_maps是只读文件。读取/ proc // numa_maps时,内核将扫描进程的虚拟地址空间并报告如何使用内存。对于该过程的每个唯一存储范围,仅显示一行。

每行的第一字段显示存储范围的起始地址。此字段允许与/ proc // maps文件的内容相关联,该文件包含范围的结束地址和其他信息,例如访问权限和共享。

第二个字段显示当前对内存范围有效的内存策略。请注意,有效策略不一定是该进程为该内存范围安装的策略。具体地说,如果进程为该范围安装了"默认"策略,则该范围的有效策略将是进程策略,该策略可以为"默认",也可以不是。

该行的其余部分包含有关在内存范围内分配的页面的信息,如下所示:

N<node>=<nr_pages>
在上分配的页面数。仅包含该进程当前映射的页面。页面迁移和内存回收可能具有与此内存范围关联的临时未映射页面。仅在过程尝试引用它们之后,这些页面才能再次显示。如果内存范围代表共享内存区域或文件映射,则其他进程当前可能在相应的内存范围中映射了其他页面。
file=<filename>
支持内存范围的文件。如果文件映射为私有,则写访问可能已在此内存范围中生成了COW(写时复制)页面。这些页面显示为匿名页面。
heap
内存范围用于堆。
stack
堆栈使用内存范围。
huge
巨大的内存范围。显示的页数是大页面,而不是常规尺寸的页面。
anon=<pages>
范围内的匿名页面数。
dirty=<pages>
脏页数。
mapped=<pages>
映射的页面总数(如果与脏页面和匿名页面不同)。
mapmax=<count>
扫描期间遇到的最大mapcount(映射单个页面的进程数)。这可以用作在给定存储器范围内发生的共享程度的指标。
swapcache=<count>
在交换设备上具有关联条目的页面数。
active=<pages>
活动列表上的页面数。仅当此范围内的页数不同时,才显示此字段。这意味着内存范围内存在一些不活动的页面,可能会被交换程序很快从内存中删除。
writeback=<pages>
当前正在写到磁盘的页面数。

遵循规范

NUMA接口没有标准。

备注

仅当使用CONFIG_NUMA选项配置和构建内核时,Linux NUMA系统调用和/ proc接口才可用。

Library support

与-lnuma链接以获取系统调用定义。 libnuma和必需的标头在numactl软件包中可用。

但是,应用程序不应直接使用这些系统调用。相反,建议使用numactl软件包中numa(3)函数提供的更高级别的接口。 numactl软件包可在以下网站获得。该软件包还包含在某些Linux发行版中。一些发行版本在单独的numactl-devel软件包中包括开发库和标头。

另外参见

get_mempolicy(2),mbind(2),move_pages(2),set_mempolicy(2),numa(3),cpuset(7),numactl(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/