>>前回

 検証(5)ではディスクの読み書き、検証(6)ではネットワーク転送の性能を見る。RHEL6のKVMでは、ゲスト環境からディスクやネットワークにアクセスするためのデバイスドライバとして、デフォルトで「virtioドライバ」が使われる。検証(5)や(6)でも、このvirtioドライバを用いる。virtioドライバは、ホスト環境で動作する通常のデバイスドライバをゲスト環境から利用可能にする、特殊なソフトウエアである。

 なお、virtioドライバのうち、ゲスト環境で動作する部分は「virtioフロントエンドドライバ」と呼ばれる。RHEL6には、このvirtioフロントエンドドライバが標準で用意されている。Windows用のvirtioフロントエンドドライバも存在し、KVMサイト(http://www.linux-kvm.org/)から無償でダウンロード可能である。KVMではvirtioドライバを使う代わりに、デバイスをエミュレーションすることによって、一般のデバイスドライバをゲスト環境で用いることも可能である。ただし、オーバーヘッドが大きく性能が大幅に低下する。

図6●KVMのディスク読み書きの性能
図6●KVMのディスク読み書きの性能
ブロックデバイスの読み出し性能(左)と書き込み性能(右)を調べた(キャッシュ無しの設定)
[画像のクリックで拡大表示]

 検証(5)として、データをコピーするddコマンドによって、KVMのゲスト環境からブロックデバイスにシーケンシャルアクセスし、読み出しと書き込みの性能を調べた。その際、ddにオプションの「iflag=direct」、「oflag=direct」を付け、OSのキャッシュが働かないようにした。その結果を図6に示す。KVMのオーバーヘッドは、データ読み出しでは1.4%。データ書き込みでは16.6%と大きかった。データ書き込みでは処理のどこかに非効率な部分があって、オーバーヘッドが大きくなったと見られるが、詳細は不明である。

 KVMにはゲスト環境のディスクキャッシュについての設定項目(「無し」「ライトスルー」「ライトバック」)がある。デフォルトは「ライトスルー」(読み出しのみキャッシュを利用)であるが、検証(5)ではホスト環境に合わせるために、運用管理ツールのvirt-manager(別掲記事のKVMの運用管理に使える「virt-manager」を参照)を用いて「無し」に設定した。