NUMA - Linux手册页
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/。