Linux-Kernel
如何查看 1GB 大表的數量(以及我應該遵循哪些文件)?
我正在嘗試找出 KVM 在 Ubuntu 20.04 下使用的大頁面。如果我更改 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
之後,我可以在包含以下 XML 的 virt-manager 中啟動 KVM VM:
<memoryBacking> <hugepages> <page size='1048576' unit='KiB'/> </hugepages> </memoryBacking>
所以我能夠做到的方式並不完全是任何指南所說的。
在 Debian Linux 中,需要插入核心參數
hugepagesz=1G
(當然還要重新啟動)。您還可以使用命令安裝libhugetlbfs-bin
包和查看資訊。hugepades 上的 Debian wiki 頁面應該適用於基於 Debian 的 Ubuntu。hugeadm
- 在您的主機上執行
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 的大頁面;節點 1 有 4 個 1G 的大頁面,3 個是免費的)