Linux-Kernel

如何查看 1GB 大表的數量(以及我應該遵循哪些文件)?

  • March 2, 2022

我正在嘗試找出 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 巨頁,但我仍然對我應該遵循的文件感到困惑:

我對設置和監控大頁面的不同程序感到困惑。我似乎已經讓他們工作了,但我仍然不清楚。

主要資源:

上述每個連結都描述了部分重疊的過程。似乎基於核心和發行版的差異,但我不清楚它們到底是什麼,我似乎無法在任何地方找到它的明確說明。

在我的 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

  1. 在您的主機上執行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> 
  1. 檢查系統文件以了解每個節點的使用情況和目前狀態:
# 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 個是免費的)

引用自:https://unix.stackexchange.com/questions/594279