mirror of https://github.com/mkerrisk/man-pages
191 lines
6.3 KiB
Groff
191 lines
6.3 KiB
Groff
.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
|
|
.\" <mtk.manpages@gmail.com>
|
|
.\" and Copyright 2003,2004 Andi Kleen, SuSE Labs.
|
|
.\" numa_maps material Copyright (c) 2005 Silicon Graphics Incorporated.
|
|
.\" Christoph Lameter, <cl@linux-foundation.org>.
|
|
.\"
|
|
.\" %%%LICENSE_START(VERBATIM)
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\" %%%LICENSE_END
|
|
.\"
|
|
.TH NUMA 7 2012-08-05 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
numa \- overview of Non-Uniform Memory Architecture
|
|
.SH DESCRIPTION
|
|
Non-Uniform Memory Access (NUMA) refers to multiprocessor systems
|
|
whose memory is divided into multiple memory nodes.
|
|
The access time of a memory node depends on
|
|
the relative locations of the accessing CPU and the accessed node.
|
|
(This contrasts with a symmetric multiprocessor system,
|
|
where the access time for all of the memory is the same for all CPUs.)
|
|
Normally, each CPU on a NUMA system has a local memory node whose
|
|
contents can be accessed faster than the memory in
|
|
the node local to another CPU
|
|
or the memory on a bus shared by all CPUs.
|
|
.SS NUMA system calls
|
|
The Linux kernel implements the following NUMA-related system calls:
|
|
.BR get_mempolicy (2),
|
|
.BR mbind (2),
|
|
.BR migrate_pages (2),
|
|
.BR move_pages (2),
|
|
and
|
|
.BR set_mempolicy (2).
|
|
However, applications should normally use the interface provided by
|
|
.IR libnuma ;
|
|
see "Library Support" below.
|
|
.SS /proc/[number]/numa_maps (since Linux 2.6.14)
|
|
.\" See also Changelog-2.6.14
|
|
This file displays information about a process's
|
|
NUMA memory policy and allocation.
|
|
.PP
|
|
Each line contains information about a memory range used by the process,
|
|
displaying\(emamong other information\(emthe effective memory policy for
|
|
that memory range and on which nodes the pages have been allocated.
|
|
.PP
|
|
.I numa_maps
|
|
is a read-only file.
|
|
When
|
|
.I /proc/<pid>/numa_maps
|
|
is read, the kernel will scan the virtual address space of the
|
|
process and report how memory is used.
|
|
One line is displayed for each unique memory range of the process.
|
|
.PP
|
|
The first field of each line shows the starting address of the memory range.
|
|
This field allows a correlation with the contents of the
|
|
.I /proc/<pid>/maps
|
|
file,
|
|
which contains the end address of the range and other information,
|
|
such as the access permissions and sharing.
|
|
.PP
|
|
The second field shows the memory policy currently in effect for the
|
|
memory range.
|
|
Note that the effective policy is not necessarily the policy
|
|
installed by the process for that memory range.
|
|
Specifically, if the process installed a "default" policy for that range,
|
|
the effective policy for that range will be the process policy,
|
|
which may or may not be "default".
|
|
.PP
|
|
The rest of the line contains information about the pages allocated in
|
|
the memory range, as follows:
|
|
.TP
|
|
.I N<node>=<nr_pages>
|
|
The number of pages allocated on
|
|
.IR <node> .
|
|
.I <nr_pages>
|
|
includes only pages currently mapped by the process.
|
|
Page migration and memory reclaim may have temporarily unmapped pages
|
|
associated with this memory range.
|
|
These pages may show up again only after the process has
|
|
attempted to reference them.
|
|
If the memory range represents a shared memory area or file mapping,
|
|
other processes may currently have additional pages mapped in a
|
|
corresponding memory range.
|
|
.TP
|
|
.I file=<filename>
|
|
The file backing the memory range.
|
|
If the file is mapped as private, write accesses may have generated
|
|
COW (Copy-On-Write) pages in this memory range.
|
|
These pages are displayed as anonymous pages.
|
|
.TP
|
|
.I heap
|
|
Memory range is used for the heap.
|
|
.TP
|
|
.I stack
|
|
Memory range is used for the stack.
|
|
.TP
|
|
.I huge
|
|
Huge memory range.
|
|
The page counts shown are huge pages and not regular sized pages.
|
|
.TP
|
|
.I anon=<pages>
|
|
The number of anonymous page in the range.
|
|
.TP
|
|
.I dirty=<pages>
|
|
Number of dirty pages.
|
|
.TP
|
|
.I mapped=<pages>
|
|
Total number of mapped pages, if different from
|
|
.IR dirty
|
|
and
|
|
.I anon
|
|
pages.
|
|
.TP
|
|
.I mapmax=<count>
|
|
Maximum mapcount (number of processes mapping a single page) encountered
|
|
during the scan.
|
|
This may be used as an indicator of the degree of sharing occurring in a
|
|
given memory range.
|
|
.TP
|
|
.I swapcache=<count>
|
|
Number of pages that have an associated entry on a swap device.
|
|
.TP
|
|
.I active=<pages>
|
|
The number of pages on the active list.
|
|
This field is shown only if different from the number of pages in this range.
|
|
This means that some inactive pages exist in the memory range that may be
|
|
removed from memory by the swapper soon.
|
|
.TP
|
|
.I writeback=<pages>
|
|
Number of pages that are currently being written out to disk.
|
|
.SH CONFORMING TO
|
|
No standards govern NUMA interfaces.
|
|
.SH NOTES
|
|
The Linux NUMA system calls and
|
|
.I /proc
|
|
interface are available only
|
|
if the kernel was configured and built with the
|
|
.BR CONFIG_NUMA
|
|
option.
|
|
.SS Library support
|
|
Link with \fI\-lnuma\fP
|
|
to get the system call definitions.
|
|
.I libnuma
|
|
and the required
|
|
.I <numaif.h>
|
|
header are available in the
|
|
.I numactl
|
|
package.
|
|
.PP
|
|
However, applications should not use these system calls directly.
|
|
Instead, the higher level interface provided by the
|
|
.BR numa (3)
|
|
functions in the
|
|
.I numactl
|
|
package is recommended.
|
|
The
|
|
.I numactl
|
|
package is available at
|
|
.UR ftp://oss.sgi.com\:/www\:/projects\:/libnuma\:/download/
|
|
.UE .
|
|
The package is also included in some Linux distributions.
|
|
Some distributions include the development library and header
|
|
in the separate
|
|
.I numactl-devel
|
|
package.
|
|
.SH SEE ALSO
|
|
.BR get_mempolicy (2),
|
|
.BR mbind (2),
|
|
.BR move_pages (2),
|
|
.BR set_mempolicy (2),
|
|
.BR numa (3),
|
|
.BR cpuset (7),
|
|
.BR numactl (8)
|