当前高性能的资源池,已经大量使用了大页内存,但是由于一些服务器内存在各个numa之间分布不均匀,所以有可能造成某一numa上面的内存耗尽,但是整体来看还有大量空闲大页内存存在,本文章介绍各numa上面大页内存使用量及动态设置的方法。
我们通常查看本机器一共有多少大页内存,是通过cmdline命令查看的。
[root@gzinf-computer-55e235e17e25 node0]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-4.19.90-2102.2.0.0066.ctl2.x86_64 root=UUID=fabe2f94-3dad-47c8-909e-386a3481d399 ro console=tty0 pci=realloc biosdevname=0 net.ifnames=0 console=ttyS0,115200n8 crashkernel=512M iommu=pt intel_iommu=on default_hugepagesz=1024M hugepagesz=1024M hugepages=447 isolcpus=18-19,22-23,26-27,50-51,54-55,58-59 irqaffinity=29-31,62-63,0-17,20-21,24-25,28,32-49,52-53,56-57,60-61 nohz_full=18-19,22-23,26-27,50-51,54-55,58-59
其中,hugepages是代表大页内存的数目,而hugepagesz是每个大页的大小。两值相乘,即为大页内存所耗的总的内存量。但是该命令只能看初始预留的数目,当前系统中的已经消耗量、及free量,可以通过cat /proc/meminfo命令来查看。
其中Hugepagesize为每页大页内存所占的内存量,HugePages_Total为初始预留大页内存的数目,HugePages_Free为当前仍然空闲的大页内存。该命令只能查看整机的情况,不能查看到某个numa的情况,如果想要查看具体某个numa上面大页的信息,可以使用如下的命令:
cat /sys/devices/system/node/node*/meminfo
下面以numa0为例:
可以看到该numa的大页预留与使用情况。
对于一些numa上面内存分配不均的情况,可能需要动态调整每个numa上面大页内存的预留情况,可以使用下面的命令。
echo num > /sys/devices/system/node/node*/hugepages/hugepages-1048576kB/nr_hugepages
设置完成后,可以使用cat /sys/devices/system/node/node*/meminfo确定是否成功。