VM のパフォーマンス最適化は、単に CPU やメモリを増やす話ではありません。NUMA、CPU スケジューリング、HugePages、I/O、ネットワーク、割り込み、ストレージ経路をまとめて見ないと、どこがボトルネックなのか判断しにくくなります。
書籍
Linux のコマンドライン操作やサーバー管理の基礎を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
最適化の前提
VM は物理リソースを抽象化して使います。そのため、性能問題を見るときは「ゲスト OS の中」だけでなく、ホスト、ハイパーバイザー、物理デバイス、NUMA 配置まで含めて考えます。
見るべきレイヤ
| レイヤ | 主な観点 |
| CPU | vCPU / pCPU、CPU ピニング、スケジューラ、コンテキストスイッチ |
| メモリ | NUMA、HugePages、メモリ帯域、リモートメモリアクセス |
| ストレージ | virtio-blk / virtio-scsi、raw / qcow2、io_uring、NVMe |
| ネットワーク | virtio-net、SR-IOV、DPDK、割り込み、キュー |
| 配置 | NIC / NVMe / VM の NUMA ノード整合性 |
NUMA を無視しない
大きめのサーバーでは CPU とメモリが NUMA ノードに分かれます。VM の vCPU、メモリ、NIC、NVMe が別 NUMA ノードにまたがると、リモートアクセスが増え、レイテンシやスループットに影響します。
numactl --hardware
lscpu
lstopo-no-graphics 2>/dev/null || true
virsh nodeinfoCPU ピニングと HugePages
CPU ピニングや HugePages は、単なる高速化ではなく、実行モデルをより決定的にするための設計要素です。NFV や低レイテンシ用途では、共有実行の揺らぎをどこまで許容するかが重要になります。
virsh vcpuinfo <vm-name>
virsh dumpxml <vm-name> | grep -E 'vcpu|cputune|numatune|hugepages' -nストレージ I/O
ストレージは VM でボトルネックになりやすい層です。raw と qcow2、virtio-blk と virtio-scsi、ホスト側の I/O スタック、物理デバイスの性能を分けて確認します。
virsh domblklist <vm-name>
qemu-img info /var/lib/libvirt/images/<vm>.qcow2
iostat -xz 1ネットワーク I/O
ネットワーク性能では、仮想 NIC、キュー、割り込み、CPU 配置、SR-IOV や DPDK の有無が効きます。単に帯域だけではなく、pps とレイテンシも確認します。
ethtool -l <interface>
ethtool -S <interface>
mpstat -P ALL 1まとめ
VM パフォーマンス最適化では、個別チューニングを積み上げるより、CPU、メモリ、I/O、ネットワーク、NUMA の整合性を見る方が重要です。特に低レイテンシ用途では、性能値そのものより「揺らぎを許容できる設計か」を判断します。


