手当たり次第に書くんだ

飽きっぽいのは本能

VM ストレージ I/O を最適化する考え方 – virtio / raw / qcow2 / io_uring を見る

VM パフォーマンス ハブへ戻る

VM のストレージ I/O は、仮想ディスク形式だけで決まりません。guest filesystem、virtio device、QEMU、cache mode、host filesystem、storage backend、物理ディスクまで含めた経路で見る必要があります。

この記事では、virtio-blk / virtio-scsi、raw / qcow2、cache mode、discard、io_uring、NVMe passthrough を、単なる速い遅いではなく用途ごとの選択として整理します。

ストレージ I/O の経路を分けて見る

見る内容
guest OSfilesystem、I/O scheduler、mount option
仮想デバイスvirtio-blk、virtio-scsi、queue 数
QEMUcache mode、aio、io_uring、threading
仮想ディスクraw、qcow2、snapshot、thin provisioning
host / backendfilesystem、LVM、ZFS、Ceph、NVMe、RAID

VM の中でディスクが遅く見えても、原因は guest ではなく host filesystem や backend storage にあることがあります。逆に backend が速くても、仮想ディスク形式や cache mode が合っていなければ性能は伸びません。

virtio-blk と virtio-scsi の違い

virtio-blk はシンプルな block device として扱いやすく、単純な VM では十分なことが多いです。virtio-scsi は SCSI の機能を使えるため、複数ディスク、hotplug、discard、queue などを扱う場合に選択肢になります。

方式向く用途
virtio-blk単純な仮想ディスク、構成を簡単にしたい VM
virtio-scsi複数ディスク、hotplug、discard、queue を意識する VM

raw と qcow2 は性能と機能の交換である

raw は単純なディスクイメージで、余計な変換が少なく性能を読みやすい形式です。qcow2 は snapshot、thin provisioning、圧縮などの機能を持ちますが、その分だけレイヤが増えます。

形式特徴注意点
raw構造が単純で性能を読みやすいsnapshot などの機能は外部で考える必要がある
qcow2snapshot や thin provisioning を扱いやすい機能分のオーバーヘッドと断片化に注意する

本番 VM では raw、検証やテンプレート運用では qcow2、という単純な分け方もありますが、実際には backup、snapshot、storage backend、運用手順まで含めて決めます。

cache mode は性能だけで決めない

QEMU の cache mode は、性能だけでなくデータ保護と整合性にも関係します。writeback は速く見えることがありますが、障害時のリスクを理解する必要があります。none / directsync / writethrough / writeback などは、storage backend の性質と合わせて判断します。

VM のストレージ設定では、benchmark の数字だけでなく、電源断、host 障害、backend 障害、snapshot、backup といった運用条件を合わせて見ます。

discard は thin provisioning と回収に関係する

discard は、guest 側で不要になった block を backend に伝えるための仕組みです。thin provisioning や SSD / NVMe の回収に関係します。ただし、常時 discard がよいとは限らず、定期的な fstrim の方が扱いやすい場合もあります。

io_uring は I/O 経路を効率化する選択肢

io_uring は Linux の非同期 I/O インターフェースで、QEMU の I/O backend として使える構成があります。従来の native aio や threads と比べて、I/O 経路を効率化できる可能性があります。

ただし、io_uring を使えば必ず速くなるわけではありません。kernel、QEMU、libvirt、storage backend、ワークロードの組み合わせで効果が変わるため、実測と障害時の挙動を合わせて確認します。

NVMe passthrough は最短経路だが制約も大きい

NVMe を PCI Passthrough で VM に渡すと、仮想ディスクレイヤを大きく迂回できます。性能面では有利ですが、デバイスの共有性、移動性、snapshot、backup、host 側からの監視が難しくなります。

これは SR-IOV / PCI Passthrough と同じで、性能と仮想化基盤の柔軟性を交換する選択です。

現在の VM で確認すること

virsh domblklist vm-name
virsh dumpxml vm-name
qemu-img info /path/to/disk.qcow2
iostat -xz 1
lsblk -o NAME,TYPE,SIZE,MODEL,ROTA,DISC-MAX,DISC-GRAN

設計時の確認ポイント

  • 性能を優先するのか、snapshot や thin provisioning を優先するのか
  • raw / qcow2 のどちらが運用に合うか
  • virtio-blk / virtio-scsi のどちらが機能要件に合うか
  • cache mode と障害時のデータ保護をどう考えるか
  • discard / fstrim をどう扱うか
  • backend storage の latency と throughput を確認しているか

関連する記事

参考書籍

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

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

Amazon で見る

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

まとめ

VM のストレージ I/O は、raw / qcow2 の単純比較だけでは判断できません。virtio-blk / virtio-scsi、cache mode、discard、io_uring、backend storage、snapshot / backup 運用まで含めて見る必要があります。

性能だけを追うと raw や passthrough に寄りやすくなりますが、運用の柔軟性や保護機能を失うこともあります。VM の用途ごとに、性能、機能、運用性のどこを優先するかを決めることが重要です。

VM パフォーマンス ハブへ戻る

VM ストレージ I/O を最適化する考え方 – virtio / raw / qcow2 / io_uring を見る

コメントを残す

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

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

トップへ戻る