blob: 08ec2c2bdce3bfeac1250b3b7febca235d164f90 [file] [log] [blame]
Mauro Carvalho Chehabe4a5c332017-05-16 10:04:34 -03001===============================
Linus Torvalds1da177e2005-04-16 15:20:36 -07002Numa policy hit/miss statistics
Mauro Carvalho Chehabe4a5c332017-05-16 10:04:34 -03003===============================
Linus Torvalds1da177e2005-04-16 15:20:36 -07004
5/sys/devices/system/node/node*/numastat
6
7All units are pages. Hugepages have separate counters.
8
Vlastimil Babka77691ee2020-05-07 14:02:17 +02009The numa_hit, numa_miss and numa_foreign counters reflect how well processes
10are able to allocate memory from nodes they prefer. If they succeed, numa_hit
11is incremented on the preferred node, otherwise numa_foreign is incremented on
12the preferred node and numa_miss on the node where allocation succeeded.
13
14Usually preferred node is the one local to the CPU where the process executes,
15but restrictions such as mempolicies can change that, so there are also two
16counters based on CPU local node. local_node is similar to numa_hit and is
17incremented on allocation from a node by CPU on the same node. other_node is
18similar to numa_miss and is incremented on the node where allocation succeeds
19from a CPU from a different node. Note there is no counter analogical to
20numa_foreign.
21
22In more detail:
23
Mauro Carvalho Chehabe4a5c332017-05-16 10:04:34 -030024=============== ============================================================
Geunsik Lim36519c92012-02-25 11:12:23 +090025numa_hit A process wanted to allocate memory from this node,
26 and succeeded.
27
28numa_miss A process wanted to allocate memory from another node,
29 but ended up with memory from this node.
30
31numa_foreign A process wanted to allocate on this node,
Vlastimil Babka77691ee2020-05-07 14:02:17 +020032 but ended up with memory from another node.
Geunsik Lim36519c92012-02-25 11:12:23 +090033
Vlastimil Babka77691ee2020-05-07 14:02:17 +020034local_node A process ran on this node's CPU,
35 and got memory from this node.
Geunsik Lim36519c92012-02-25 11:12:23 +090036
Vlastimil Babka77691ee2020-05-07 14:02:17 +020037other_node A process ran on a different node's CPU
38 and got memory from this node.
Geunsik Lim36519c92012-02-25 11:12:23 +090039
40interleave_hit Interleaving wanted to allocate from this node
41 and succeeded.
Mauro Carvalho Chehabe4a5c332017-05-16 10:04:34 -030042=============== ============================================================
Linus Torvalds1da177e2005-04-16 15:20:36 -070043
44For easier reading you can use the numastat utility from the numactl package
Geunsik Lim36519c92012-02-25 11:12:23 +090045(http://oss.sgi.com/projects/libnuma/). Note that it only works
Linus Torvalds1da177e2005-04-16 15:20:36 -070046well right now on machines with a small number of CPUs.
47
Vlastimil Babka77691ee2020-05-07 14:02:17 +020048Note that on systems with memoryless nodes (where a node has CPUs but no
49memory) the numa_hit, numa_miss and numa_foreign statistics can be skewed
50heavily. In the current kernel implementation, if a process prefers a
51memoryless node (i.e. because it is running on one of its local CPU), the
52implementation actually treats one of the nearest nodes with memory as the
53preferred node. As a result, such allocation will not increase the numa_foreign
54counter on the memoryless node, and will skew the numa_hit, numa_miss and
55numa_foreign statistics of the nearest node.