KVM/Proxmox ベンチマーク:CPU、ディスク、ネットワークのパフォーマンスをプロのように測定する

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

なぜ広告のスペックを鵜呑みにしてはいけないのか?

想像してみてください。午前2時、ウェブアプリがカメのように遅くなり、電話が鳴り止みません。ProxmoxのダッシュボードではCPU/RAMは正常(緑色)を示しているのに、実際にはユーザーから苦情が殺到しています。犯人は多くの場合、I/O Waitや仮想化ネットワークカードのボトルネックといった、目に見えにくい場所に隠れています。

経験上、VPSプロバイダーのデフォルト設定を信じるのは大きな間違いです。私の12台のVMを運用しているホームラボでは、データベースをインストールする前に必ずすべてをベンチマークします。仮想化には常に「Virtualization Overhead(仮想化オーバーヘッド)」が伴います。測定を行わなければ、ハードウェア의パワーの何パーセントがハイパーバイザーによって浪費されているかを知ることはできません。

「入門用」ベンチマークツールセット

包括的な評価を行うために、以下の3つの標準的なツールを使用します。

  • sysbench: CPUの計算能力とRAM速度のテスト.
  • fio: ディスクI/O測定のゴールドスタンダード。ddは氷山の一角しか測定できないため、使用しないでください。
  • iperf3: VM間、またはVMとホスト間の実際の帯域幅を測定。

Ubuntu/Debianでのクイックインストール:

sudo apt update && sudo apt install fio sysbench iperf3 -y

CentOS/RHELの場合、まずEPELをインストールする必要があります:

sudo yum install epel-release -y && sudo yum install fio sysbench iperf3 -y

1. CPUパワーの測定:「うるさい隣人」問題を回避する

仮想化環境では、CPUリソースは通常共有(オーバーコミット)されます。同じノード上の別のVMが重いタスクを実行していると、パフォーマンスが即座に低下します。

以下のコマンドは、CPUに素数計算を行わせることで安定性をテストします:

sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run

events per second(1秒あたりのイベント数)の項目に注目してください。実例を挙げると、ProxmoxでCPUタイプを kvm64 から host に変更したところ、この数値が15〜20%向上しました。host モードでは、VMが物理CPUの全インストラクションセット(AES-NI、AVXなど)を活用できるようになります。

2. ディスクパフォーマンス:決定的な数値はIOPS

MySQLやPostgreSQLのようなアプリケーションは、シーケンシャルな読み書きは行いません。これらは1秒間に数千の小さなランダム操作を実行します。よく使われる dd コマンドはシーケンシャル書き込み速度しか測定できないため、結果は実態とかけ離れたものになります。

以下は、重いデータベース負荷をシミュレートするためのランダム書き込み(Random Write)テストのシナリオです:

fio --name=randwrite --ioengine=libaio --iodepth=64 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting

注意深く確認すべき重要なパラメータ:

  • IOPS: 一般的なSATA SSDの場合、5,000以上。NVMeの場合、50,000を超えることもあります。
  • Latency(レイテンシ): 平均が20msを超えると、CPU負荷が低くてもシステムに明らかな「ラグ」を感じるようになります。

3. iperf3によるネットワークテスト

仮想ネットワークカード virtio は非常に強力ですが、MTUの設定を誤ると速度が半分に低下することがあります。テストするには、2つの異なるマシンでiperf3を実行する必要があります。

ターゲットマシン(サーバー): iperf3 -s

ソースマシン(クライアント): iperf3 -c [IP_SERVER] -t 30 -P 4

パラメータ -P 4 は4つのスレッドを並列で開きます。10Gbpsネットワークを使用しているのに結果が2-3Gbpsしか出ない場合は、ProxmoxのVirtIOネットワークカードのMultiqueue設定を確認してください。

リアルタイムのシステム監視

最終的な結果を待つだけではなく、ベンチマーク中に別のターミナルを開いて htopiotop を実行し、システムの挙動を観察してください。

コマンド sudo iotop -o を使用すると、fio プロセスが実際にどれだけのスループットを占有しているかがわかります。IOPSが低いのに IO> カラムが99%を示している場合、物理ディスクがハードウェアの限界に達しています。

実践的な経験:パフォーマンスを30%向上させる

高性能なNVMeドライブを使用しているにもかかわらず、IOPSが非常に低いケースに遭遇したことがあります。ベンチマーク後、ディスクバスを VirtIO Block から SCSI に変更すると劇的に改善することがわかりました。さらに、コントローラーに VirtIO SCSI Single を使用し、iothread を有効にすることで、IOPSパフォーマンスがさらに30%向上しました。

実際のシステムでトラブルが発生するまで原因を探すのはやめましょう。最初からベンチマークを行い、ベースライン(基準値)を取得しておくことが重要です。これにより、将来インフラをアップグレードする際の比較や障害診断が容易になります。

Share: