KVM の VM で HugePages を使う場合、VM 起動後に余っているメモリを使うのではなく、ホスト起動時に VM 用の大きなページを予約しておく考え方になります。特に 1 GiB HugePages は、あとから柔軟に確保するものではなく、起動時予約として扱う方が安定します。
この記事では、Ubuntu 26.04 の KVM / libvirt 環境で、1 GiB HugePages を予約し、libvirt XML で VM に使わせ、起動後に消費状態を確認する流れを整理します。VM 作成記事で使った memoryBacking の前提を、ホスト側のメモリ設計として補強する記事です。
- 1 GiB HugePages を KVM ホスト起動時に予約する理由
- GRUB の kernel command line で予約数を指定する考え方
- libvirt XML の
memoryBackingと VM 側の関係 - VM 起動前後で HugePages の消費状態を確認する手順
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| 仮想化基盤 | KVM / QEMU / libvirt |
| HugePages | 1 GiB HugePages |
| 設定箇所 | kernel command line / libvirt XML |
| 確認コマンド | /proc/meminfo、numastat、virsh dumpxml |
- 現在の HugePages と NUMA 状態を確認する
- VM の同時起動数から予約数を決める
- GRUB で 1 GiB HugePages を起動時予約する
- 再起動後に予約状態を確認する
- libvirt XML で VM に HugePages を使わせる
- VM 起動後に消費状態を確認する
書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ
HugePages、TLB、CPU 仮想化支援、メモリ仮想化、仮想デバイスなど、KVM / QEMU の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
HugePages を使う理由
HugePages は、通常より大きな memory page を使うことで、page table や TLB の負荷を減らすための仕組みです。VM のように大きな連続メモリを使う workload では、メモリアクセスの揺れを減らしやすくなります。
| 項目 | 通常 page | HugePages |
|---|---|---|
| page size | 多くの環境で 4 KiB | 2 MiB または 1 GiB |
| TLB 負荷 | page 数が多くなりやすい | page 数を減らしやすい |
| 柔軟性 | OS が扱いやすい | 予約した分は用途が限定される |
| VM 用途 | 一般的な VM でも動く | 性能を安定させたい VM に向く |
HugePages は汎用設定ではない
HugePages は、すべてのサーバーで有効にすればよい設定ではありません。予約した HugePages は通常のメモリとして自由に使えないため、予約しすぎるとホスト OS や他のサービスのメモリを圧迫します。
KVM ホストで VM 用に使う場合は、VM の割り当てメモリ、同時起動数、NUMA node、ホストに残すメモリを先に決めてから予約します。性能設定というより、メモリの用途を先に固定する設計です。
現在の HugePages 状態を確認する
まず、現在の HugePages 状態を確認します。設定前後や VM 起動前後で比較できるようにしておくと、予約と消費の関係が見やすくなります。
grep -i huge /proc/meminfo
numastat -m
lscpu
numactl --hardware予約数を計算する
1 GiB HugePages の場合、hugepages=24 は 1 GiB page を 24 個、つまり 24 GiB 分予約するという意味です。VM に 8 GiB を 3 台分使わせるなら 24 個、というように考えます。
| 予約値 | 意味 |
|---|---|
hugepages=8 | 1 GiB HugePages を 8 個予約する |
hugepages=24 | 1 GiB HugePages を 24 個予約する |
hugepages=96 | 1 GiB HugePages を 96 個予約する |
GRUB で 1 GiB HugePages を予約する
1 GiB HugePages を起動時に予約する場合は、kernel command line に default_hugepagesz=1G hugepagesz=1G hugepages=数 を指定します。IOMMU を使う KVM ホストでは、環境に応じて intel_iommu=on または amd_iommu=on も合わせて指定します。
sudo tee /etc/default/grub.d/99-kvm-hugepages.cfg >/dev/null <<'EOF'
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G hugepages=24"
EOFAMD 環境では intel_iommu=on の代わりに amd_iommu=on を使います。既存の GRUB 設定と重複しないように、自分の環境に合わせて整理してください。
sudo update-grub
sudo reboot再起動後に予約状態を確認する
再起動後に、kernel command line と HugePages の予約状態を確認します。ここで予約できていなければ、VM 側の XML を確認しても HugePages は使えません。
cat /proc/cmdline
grep -i huge /proc/meminfo
numastat -mlibvirt XML で HugePages を使う
libvirt 側では、VM 定義に memoryBacking を入れて HugePages を使わせます。XML template を管理している場合も、最終的には virsh dumpxml で実際の定義を確認します。
<memoryBacking>
<hugepages/>
</memoryBacking>virsh --connect qemu:///system dumpxml vm-example
virsh --connect qemu:///system dominfo vm-exampleVM 起動時の確認
VM を起動したら、HugePages の空き数が減っているかを確認します。VM の memory size と HugePages の予約単位が合っていない場合、起動に失敗することがあります。
virsh --connect qemu:///system start vm-example
grep -i huge /proc/meminfo
virsh --connect qemu:///system dommemstat vm-example予約しすぎに注意する
HugePages は性能を安定させるために有効ですが、予約しすぎると通常メモリが不足します。KVM ホストでは、VM 用 HugePages、host OS 用メモリ、storage cache、OVS / OVN / libvirt などの常駐サービス用メモリを分けて考えます。
- VM の合計メモリをそのまま全量予約しない
- ホスト OS と管理サービス用のメモリを残す
- 同時起動する VM 数を前提にする
- NUMA node ごとの空きと配置を見る
- 変更後は VM 起動前後の
HugePages_Freeを比較する
NUMA と HugePages
NUMA 環境では、HugePages がどの node に予約され、VM の vCPU と memory がどの node に配置されるかが重要です。HugePages を予約していても、VM の vCPU と memory が遠い NUMA node に分かれると性能が安定しにくくなります。
numactl --hardware
numastat -m
virsh --connect qemu:///system vcpuinfo vm-example
virsh --connect qemu:///system dumpxml vm-exampleVM パフォーマンス記事への接続
書籍
作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ
HugePages、TLB、CPU 仮想化支援、メモリ仮想化、仮想デバイスなど、KVM / QEMU の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
まとめ
Ubuntu 26.04 の KVM 環境で HugePages を使う場合は、ホスト起動時に必要な数を予約し、libvirt XML で VM に使わせ、VM 起動後に実際の消費を確認します。
HugePages は VM のメモリ性能を安定させる選択肢ですが、予約しすぎるとホスト全体のメモリ運用を難しくします。VM の割り当てメモリ、同時起動数、NUMA、ホスト側に残すメモリを決めてから設定するのが安全です。

