手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 KVM HugePages の基本 – VM 用メモリを起動時に予約する

Ubuntu 26.04 仮想化基盤の関連記事

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 の消費状態を確認する手順
対象 OSUbuntu 26.04 Server
仮想化基盤KVM / QEMU / libvirt
HugePages1 GiB HugePages
設定箇所kernel command line / libvirt XML
確認コマンド/proc/meminfonumastatvirsh dumpxml
  1. 現在の HugePages と NUMA 状態を確認する
  2. VM の同時起動数から予約数を決める
  3. GRUB で 1 GiB HugePages を起動時予約する
  4. 再起動後に予約状態を確認する
  5. libvirt XML で VM に HugePages を使わせる
  6. VM 起動後に消費状態を確認する
参考
書籍
参考書籍

作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ

HugePages、TLB、CPU 仮想化支援、メモリ仮想化、仮想デバイスなど、KVM / QEMU の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

HugePages を使う理由

HugePages は、通常より大きな memory page を使うことで、page table や TLB の負荷を減らすための仕組みです。VM のように大きな連続メモリを使う workload では、メモリアクセスの揺れを減らしやすくなります。

項目通常 pageHugePages
page size多くの環境で 4 KiB2 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=81 GiB HugePages を 8 個予約する
hugepages=241 GiB HugePages を 24 個予約する
hugepages=961 GiB HugePages を 96 個予約する
予約数は、VM の合計メモリだけで決めない方が安全です。ホスト OS、libvirt、OVS / OVN、ストレージ cache、監視エージェントなどに残す通常メモリも含めて考えます。

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"
EOF

AMD 環境では 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 -m

libvirt 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-example

VM 起動時の確認

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-example
Ubuntu 26.04 KVM HugePages の関連記事

VM パフォーマンス記事への接続

VM パフォーマンス関連記事
参考
書籍
参考書籍

作って理解する仮想化技術 ── ハイパーバイザを実装しながら仕組みを学ぶ

HugePages、TLB、CPU 仮想化支援、メモリ仮想化、仮想デバイスなど、KVM / QEMU の性能設計を低レイヤから理解したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

まとめ

Ubuntu 26.04 の KVM 環境で HugePages を使う場合は、ホスト起動時に必要な数を予約し、libvirt XML で VM に使わせ、VM 起動後に実際の消費を確認します。

HugePages は VM のメモリ性能を安定させる選択肢ですが、予約しすぎるとホスト全体のメモリ運用を難しくします。VM の割り当てメモリ、同時起動数、NUMA、ホスト側に残すメモリを決めてから設定するのが安全です。

Ubuntu 26.04 KVM HugePages の基本 – VM 用メモリを起動時に予約する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る