我正在尝试找出 Ubuntu 20.04 下 KVM 使用的大页面。如果我更改 2048 KiB(默认大小)页面的数量,我会看到这反映在/proc/meminfo
:~$ echo 0 |sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
0
:~$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 50331648 kB
:~$ echo 512 |sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
512
:~$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 512
HugePages_Free: 512
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 51380224 kB
:~$
但是,当我更改 1GB 页面的数量时,我没有看到任何反映这一点的内容。
:~$ echo 0 | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
0
:~$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 512
HugePages_Free: 512
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 51380224 kB
:~$ echo 16 | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
16
:~$ cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 512
HugePages_Free: 512
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 51380224 kB
据我了解,这意味着我的系统支持 1GB 大页面,对吧?
ls /sys/kernel/mm/hugepages
hugepages-1048576kB hugepages-2048kB
1Gb 页面是否在其他地方列出?我可以查看他们的状态吗?
编辑:感谢@Krackout,我可以看到我的 1GB 大页面,但我仍然对我应该遵循哪些文档感到困惑:
我对设置和监视大页面的不同过程感到困惑。我似乎已经让他们工作了,但仍然有很多我不清楚的地方。
主要资源:
- https://help.ubuntu.com/community/KVM%20-%20Using%20Hugepages
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/sect-virtualization_tuning_optimization_guide-memory-tuning
- https://mathiashueber.com/configuring-hugepages-use-virtual-machine/
- https://wiki.archlinux.org/index.php/KVM
- https://wiki.debian.org/Hugepages
上述每个链接都描述了部分重叠的过程。似乎差异基于内核和发行版,但我不清楚它们到底是什么,而且我似乎无法在任何地方找到明确的说明。
在我的 Ubuntu 20.04 设置中,对我有用的是将以下内容放入crontab -e
:
@reboot echo 64 | sudo tee /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
@reboot mount -t hugetlbfs -o pagesize=1G none /dev/hugepages
之后,我可以在 virt-manager 中启动包含以下 XML 的 KVM 虚拟机:
<memoryBacking>
<hugepages>
<page size='1048576' unit='KiB'/>
</hugepages>
</memoryBacking>
所以我能够做的方式并不完全是任何指南所说的。
答案1
在 Debian Linux 中,需要插入内核参数hugepagesz=1G
(当然还要重新启动)。您还可以libhugetlbfs-bin
使用命令安装包并查看信息hugeadm
。Hugepades 上的 Debian wiki 页面应该适用于基于 Debian 的 Ubuntu。
答案2
在您的主机上运行
virsh capabilities
,它将显示该主机上启用的大页面:# virsh capabilities <topology> <cells num='2'> <cell id='0'> <memory unit='KiB'>16088120</memory> <pages unit='KiB' size='4'>3382030</pages> <pages unit='KiB' size='2048'>1250</pages> <pages unit='KiB' size='1048576'>0</pages> ----to be continued----- <cell id='1'> <memory unit='KiB'>16466052</memory> <pages unit='KiB' size='4'>2427937</pages> <pages unit='KiB' size='2048'>1250</pages> <pages unit='KiB' size='1048576'>4</pages> <distances>
检查系统文件以了解每个节点的使用情况和当前状态:
# cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/free_hugepages 0 # cat /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages 0 # cat /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages 4 # cat /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/free_hugepages 3
(节点0没有1G的hugepage页;节点1有4个1G的hugepage,其中3个是空闲的)