Ubuntu 20.04では、KVMがどのhugepagesを使用しているかを調べたいと思います。 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仮想マシンを起動できます。
<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つは無料です。)