手当たり次第に書くんだ

飽きっぽいのは本能

VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークの見方

VM のパフォーマンス最適化は、単に CPU やメモリを増やす話ではありません。NUMA、CPU スケジューリング、HugePages、I/O、ネットワーク、割り込み、ストレージ経路をまとめて見ないと、どこがボトルネックなのか判断しにくくなります。

最適化の前提

VM は物理リソースを抽象化して使います。そのため、性能問題を見るときは「ゲスト OS の中」だけでなく、ホスト、ハイパーバイザー、物理デバイス、NUMA 配置まで含めて考えます。

見るべきレイヤ

レイヤ主な観点
CPUvCPU / 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 nodeinfo

CPU ピニングと 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 の整合性を見る方が重要です。特に低レイテンシ用途では、性能値そのものより「揺らぎを許容できる設計か」を判断します。

VM パフォーマンス最適化 – NUMA / CPU / I/O / ネットワークの見方

コメントを残す

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

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

トップへ戻る