VMDK, VHDX などの抽象化層によるオーバーヘッドについて

julien-tromeur-EOSHmMbjT8g-unsplash.jpg

質問

VMDK, VHDX などの抽象化層によるオーバーヘッドについて解説してください


解答

いい観点ですね。
VMDK(VMwareの仮想ディスク形式)、VHDX(Hyper-Vの仮想ディスク形式)などは「仮想ディスクイメージファイル」であり、物理ストレージとゲストOSとの間に抽象化層を1枚挟む形になります。
これによって柔軟性や可搬性が得られますが、その分いくつかのオーバーヘッドが発生します。


オーバーヘッドの主な要


1. I/Oパスの多重化

* 物理環境ではアプリケーション → OSカーネル → デバイスドライバ → ストレージという流れ。

* 仮想環境では、さらに以下が入ります:
* ゲストOSの仮想デバイスドライバ
* ハイパーバイザのストレージ抽象化レイヤ
* 仮想ディスクファイルの管理(VMDK/VHDXのメタデータ操作)

→ I/O処理が複数の層を通るため、遅延が追加されます。


2. 仮想ディスク形式のメタデータ管理

* 固定サイズディスク
ファイルサイズが最初から確保されており、オーバーヘッドは比較的小さい。

* 可変サイズディスク
(シンプロビジョニング) 書き込み時にブロックを都度割り当て、必要ならファイル拡張も発生。

* 新規割り当て時の遅延
* 断片化によるランダムアクセス性能低下
* メタデータ管理(割り当てマップ更新)のオーバーヘッド

3. ホストファイルシステムとの二重管理

仮想ディスクファイルは通常 ホストOSのファイルシステム上に存在します。

* ゲストOS側もファイルシステムを持っているため、二重の管理が走る。
* 例えばゲストで「1ファイルを作成」 → その書き込みは「ホスト上のVMDK/VHDXファイルの更新」として記録される。
* これによりキャッシュやジャーナリングの二重化が発生し、余計なI/Oが増える。


4. スナップショットの影響

* スナップショットを取ると、元ディスクは「読み取り専用」となり、新しい変更は差分ファイルに書き込まれる。
* このとき読み取りは「差分ファイル→元ディスク」の多段アクセスになるため、ランダムI/Oが増加して性能が落ちる。
* 差分チェーンが長いと遅延がさらに大きくなる。


5. 仮想化固有の最適化不足

* TRIM/UNMAP(未使用ブロック解放)がゲストからホストまで正しく伝わらないと、無駄な領域が残り続けて効率が悪化。
* I/Oスケジューリングがホスト・ゲスト双方で二重にかかる場合があり、スループット低下につながる。


実際の性能差

* 最新のハイパーバイザ(VMware ESXi, Hyper-V, KVM など)では最適化が進み、 物理ディスク直結(Raw Device MappingやPassthrough)と比べて 5〜15% 程度の性能差に収まるケースが多いです。
* ただし 可変サイズディスク+スナップショット多用+断片化 といった環境では、数十%の性能低下が起こり得ます。


まとめ

* VMDK/VHDXは利便性(スナップショット、可搬性、管理性)のための抽象化層。
* オーバーヘッドの原因は「多段I/O」「メタデータ管理」「二重ファイルシステム」「スナップショット」など。
* 適切に運用すれば物理直結との差は10%程度まで抑えられる。
* 高性能が必須のDBサーバでは、RAID 10の物理ディスク直結やパススルーディスクが選ばれることもある。




作って理解する仮想化技術 ハイパーバイザを実装しながら仕組みを学ぶ 森真誠/著 品川高廣/監修

価格:3520円
(2025/11/22 12:45時点)
感想(0件)


ゼロからわかるLinuxサーバー超入門 Ubuntu対応版 [ 小笠原 種高 ]

価格:2860円
(2024/11/1 23:58時点)
感想(0件)


 



この記事へのコメント

広告です。クリックいただけると励みになります。