手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 仮想マシンの性能確認 – KVM / virtio / HugePages / io_uring を見る

Ubuntu 26.04 の KVM 環境で、作成した仮想マシンが意図した性能前提で動いているかを確認します。ここでの目的は、単発のベンチマーク数値を競うことではなく、CPU、メモリ、ストレージ I/O、ネットワークの各層で、設定した前提が反映されているかを見ることです。

この環境では、libvirt XML に host-passthroughvirtioio_uringcache=noneHugePages、Open vSwitch / OVN 接続などを含めています。性能確認では、まずそれらが実際の VM に入っているかを確認します。

参考
書籍
参考書籍

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

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

Amazon で見る

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

性能確認はベンチマークの前に状態を見る

VM の性能が出ない場合、いきなり fioiperf3 の数値を見るより、先に構成状態を確認した方が原因を追いやすくなります。

  • VM が想定した vCPU / memory で定義されているか
  • CPU mode が host-passthrough になっているか
  • ディスク bus が virtio になっているか
  • disk driver の iocachediscard が意図通りか
  • HugePages が使われているか
  • 仮想 NIC が virtio になっているか
  • OVS / OVN 側で VM interface が見えているか

libvirt XML を確認する

まず、VM の libvirt XML を確認します。VM 作成時に定義した CPU、メモリ、ディスク、NIC が反映されているかを見ます。

VM_NAME="ubuntu-test-g01-n001-v.mgmt.s01.example.com"

sudo virsh --connect qemu:///system dumpxml "$VM_NAME" > "/tmp/${VM_NAME}.xml"

grep -E '<vcpu|<memory|<currentMemory|<cpu|<topology|<memoryBacking|<hugepages' "/tmp/${VM_NAME}.xml"
grep -E '<disk|<driver|<target dev|<interface|<model|<virtualport|interfaceid' "/tmp/${VM_NAME}.xml"

XML 上で host-passthroughhugepagesvirtioio_uring が見えるかを確認します。ここで見えない場合、ベンチマーク以前に VM 定義が意図と異なっています。

VM の CPU とメモリを確認する

ホスト側から VM のリソース状態を確認します。

VM_NAME="ubuntu-test-g01-n001-v.mgmt.s01.example.com"

sudo virsh --connect qemu:///system dominfo "$VM_NAME"
sudo virsh --connect qemu:///system vcpuinfo "$VM_NAME"
sudo virsh --connect qemu:///system dommemstat "$VM_NAME"
sudo virsh --connect qemu:///system domstats "$VM_NAME" --vcpu --balloon

VM 内でも CPU、メモリ、NUMA の見え方を確認します。

lscpu
free -h
numactl --hardware 2>/dev/null || true
cat /proc/meminfo | grep -i huge

HugePages の消費を確認する

HugePages を使う VM では、VM 起動前後で free hugepages が減るかを確認します。

cat /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
cat /sys/kernel/mm/hugepages/hugepages-1048576kB/free_hugepages

sudo virsh --connect qemu:///system list --all

VM が起動しているのに HugePages が消費されていない場合、XML の memoryBacking、HugePages の予約サイズ、VM のメモリサイズを確認します。逆に HugePages が不足している場合、VM は起動に失敗することがあります。

ストレージ I/O を確認する

ストレージ I/O は、VM 内での fio と、ホスト側の disk 定義をセットで見ます。単に IOPS が高いか低いかではなく、virtio / io_uring / cache 設定が意図通りかを確認します。

sudo apt update
sudo apt install -y fio

fio --name=randread \
  --filename=/tmp/fio-test.img \
  --size=2G \
  --direct=1 \
  --rw=randread \
  --bs=4k \
  --iodepth=32 \
  --numjobs=1 \
  --runtime=60 \
  --time_based \
  --group_reporting

この結果は VM 内のファイルシステム、ホスト側ストレージ、qcow2、cache 設定、I/O engine の影響を受けます。数値だけを切り出さず、条件を記録して比較します。

ネットワークを確認する

ネットワークは、VM 内の NIC、libvirt の interface、OVS / OVN の port を順に確認します。

# VM 内
ip -br link
ip -br addr
ethtool -i enp1s0 2>/dev/null || true

# ホスト側
VM_NAME="ubuntu-test-g01-n001-v.mgmt.s01.example.com"
sudo virsh --connect qemu:///system domiflist "$VM_NAME"
sudo ovs-vsctl show
sudo ovn-nbctl show

帯域を測る場合は iperf3 を使います。ただし、測定先、MTU、OVS / OVN、ACL、上位 network の条件で結果が変わります。

sudo apt install -y iperf3

# 測定先で実行
iperf3 -s

# VM 側で実行
iperf3 -c 10.1.0.10 -P 4 -t 30

ホスト側の負荷を見る

VM 内の数値だけでは、ホスト側で何が詰まっているか分かりません。VM 実行中に、ホスト側の CPU、I/O、network の状態も確認します。

top
iostat -xz 1
vmstat 1
sudo ovs-vsctl show
sudo virsh --connect qemu:///system domstats "$VM_NAME"

確認結果を比較できる形で残す

性能確認では、結果の数値だけでなく条件を残すことが重要です。同じ VM でも、HugePages の有無、io_uring の有無、cache 設定、MTU、接続先 bridge が変わると結果は変わります。

  • VM 名、vCPU、memory、CPU mode
  • HugePages の有無と page size
  • ディスク形式、bus、driver io、cache
  • NIC model、bridge、OVN logical switch
  • 測定コマンドと runtime
  • ホスト側の負荷状況

よく見る問題

  • VM XML ではなく古い domain 定義で起動している
  • HugePages が不足して VM が起動しない
  • virtio ではなく emulated device になっている
  • OVN ACL や routing の問題を性能問題と誤認している
  • fio の対象が一時ファイルで、実際に見たい disk と違う
  • 測定中にホスト側の別 VM や storage 負荷が重なっている

まとめ

Ubuntu 26.04 の KVM VM 性能確認では、ベンチマークの数値を見る前に、VM が意図した構成で動いているかを確認します。CPU、HugePages、virtio、io_uring、OVS / OVN、ACL、ストレージ条件を分けて見ることで、性能問題を切り分けやすくなります。

VM パフォーマンスは単一の設定で決まるものではありません。KVM ホスト、VM XML、仮想ディスク、仮想 NIC、ネットワーク、ストレージの層を順番に確認することが重要です。

関連記事

Ubuntu 26.04 仮想マシンの性能確認 – KVM / virtio / HugePages / io_uring を見る

コメントを残す

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

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

トップへ戻る