`numstat` 中的大页面数量不正确

`numstat` 中的大页面数量不正确

我问过类似问题问题几年前。

现在我的机器有 4 个 1G 大页和 256 个 2MB 大页:

# cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
4
# cat /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
256

但随后numstat -vm显示:

Per-node system memory usage (in MBs):
                          Node 0           Total
                 --------------- ---------------
MemTotal                65205.89        65205.89
MemFree                 58656.55        58656.55
MemUsed                  6549.34         6549.34
Active                    158.62          158.62
Inactive                   89.90           89.90
Active(anon)               15.32           15.32
Inactive(anon)              9.04            9.04
Active(file)              143.30          143.30
Inactive(file)             80.86           80.86
Unevictable                10.69           10.69
Mlocked                    10.69           10.69
Dirty                       0.02            0.02
Writeback                   0.00            0.00
FilePages                 235.87          235.87
Mapped                     16.08           16.08
AnonPages                  23.42           23.42
Shmem                       9.43            9.43
KernelStack                 5.38            5.38
PageTables                  2.84            2.84
NFS_Unstable                0.00            0.00
Bounce                      0.00            0.00
WritebackTmp                0.00            0.00
Slab                       50.60           50.60
SReclaimable               23.14           23.14
SUnreclaim                 27.46           27.46
AnonHugePages               0.00            0.00
HugePages_Total          4096.00         4096.00
HugePages_Free           4096.00         4096.00
HugePages_Surp              0.00            0.00

根据我上一篇文章的回答,4096 应该是一个“单位”。现在,我很困惑。这里的单位是什么?

在我看来,“单位”是“MB”,并且numastat不包括那些 2MB 的大页面?

为什么这里没有报告 2MB 的大页面?

答案1

Linux 上的大页面并不容易理解。尤其是当某些工具显示其他工具无法显示的内容,并且每个人都在进行自己的单位转换时。

系统范围/proc/meminfo将显示所有大页面大小的总和Hugetlb

巨无霸

是所有大小的巨页所消耗的内存总量(以 kB 为单位)。如果使用不同大小的巨页,此数字将超过 HugePages_Total * Hugepagesize。要获取更多详细信息,请参阅 /sys/kernel/mm/hugepages

numastat -m将根据每个 NUMA 节点的统计数据输出“meminfo-like”,/sys/devices/system/node/node?/meminfo 但它也会将单位转换为 MB。我不知道为什么这显然缺少所有大小的总和。也许内核放弃了这一点,让用户工具对每个节点的数据做他们想做的事情?大概你得到的输出只有 4x 1GB 页面。

hugeadm(来自 libhugetlbfs)通过对每个页面大小求和来确定其推荐的 shmmax /sys/kernel/mm/hugepages/hugeadm --explain对于检查每个池的默认值和大小也很有用。


仅使用一个大页面大小可能更易于操作。小于 5 GB 的 2 MB 页面相对较小,这些页面可能全部为 2 MB。1 GB 页面大小可以工作,但对于小分配来说可能是一种低效的空间利用。

相关内容