VMware Workstation Player I/Oキャッシュを無効化する方法

仮想化基盤
スポンサーリンク

今回はVMware vSphereではなく、ホスト型の仮想化ソフト「VMware Workstation Player」 (バージョン 16.0) の話です。そして、キャッシュ「有効化」ではなく「無効化」の方法です。この設定で、ベンチマーク結果のスコアを下げることができます。…という、ひねくれた話題ですが、趣旨は「仮想マシンのベンチマークをより正確にする」ということです。

I/Oキャッシュの“無効化”方法

まずは、対象の仮想マシンをシャットダウンし、VMware Workstation Player で「パワーオフ」の状態にしておきます。

次に、仮想マシンのvmxファイルをテキストエディタで開いて編集します。vmxファイルは、仮想マシンを新規作成する際に「場所」として指定したフォルダにあります(仮想ハードディスク(.vmdk)のファイルがあるフォルダと同一であるケースが多いです)。

このvmxファイルの最終行などに、次の1行を追加して保存します。上書き保存する前に、編集前のファイルをバックアップしておくと安心です。

hard-disk.useUnbuffered = "TRUE"

環境によって異なりますが、下の赤枠部分のようなイメージです。

この後、仮想マシンを通常通りパワーオンすれば、設定が反映されます。

何でわざわざ無効化?

通常であれば、デフォルトの有効のままで問題ないと思います。ただ、これで都合が悪いと思ったのは、仮想マシンでストレージI/Oのベンチマークテストを行う場合です。実際に行ってみて、本来の実力以上の結果が出てしまったのです。測定結果は後述しますが、HDDなのにSSD以上の性能値になってしまったため、この原因とみられるキャッシュを無効化する必要があったのです。

他にベンチマーク以外の不都合として、停電などで突然電源が落ちた場合、データの不整合が生じる可能性があるかもしれません。つまり、ストレージに書き込んだつもりのデータが、実はまだメモリ上のキャッシュにしか書かれていなかった場合、不意の電源OFFでデータの整合性が失われるのでは、ということです。そのような事象に遭遇したことはありませんが、特に仮想マシンでデータベースソフトを動かしている場合は、無効化したほうが良いのかもしれません。

I/Oパフォーマンスの比較

前述の設定による効果を計測した結果が、下のものです。5,400rpmの外付けHDD上にvmdkファイル(仮想ハードディスク)を配置し、仮想マシン上から 「CrystalDiskMark」でベンチマークテストを行いました。比較のために、そのHDD自体の性能も、ホスト側から同様に計測しました。

上の結果から分かるように、デフォルトのキャッシュ有効状態のスコアは、ホスト側で計測した結果(本来の実力)よりも、ほとんど高くなっています。これに対して、前述の設定でキャッシュ無効化した場合は、本来の実力に近い値となっています。

参考までに、ホストで計測したSSDのベンチマーク例は下の通りです。注目して頂きたいのは、上のキャッシュ有効のケースで、HDDにもかかわらずSSD以上の性能値になっている部分があるという点です。「キャッシュすごい!」と言いたいのではなく、「ホントかいな?」ということです。

考察

なぜこんなことが起こるのか?推測はこうです。キャッシュが有効の場合、仮想マシンからストレージに書き込みを行ったとき、ホストのメモリに格納して書き込み完了とします(実際のデータは、後でメモリからHDDに書き込まれる)。だからまず、書き込み性能が高くなります。

読み込み時は、ホストのメモリに残っているものは、HDDからの読み込みを省略します。そのため、最近書き込んだデータの読み込みは、メモリからの読み込みになるため、この場合の読み込み性能も高くなります。

CrystalDiskMarkのベンチマークは、自分でテストデータ(ランダムデータ)をいったんストレージに書き込んで、それを読み込む速さを計測していると考えます。この場合、前述の動作によって高速化され、高いスコアになったのではないでしょうか。以上はあくまで仮説であり、違っているかもしれませんのでご注意を。

「キャッシュを使って高速化できているなら、それが仮想マシンの実力なのでは?」という声が聞こえてきそうです。ですが、書き込みはともかく、実際の読み込みはこんなにキャッシュヒット率が高くないと思います。特に、起動後の初回の読み込みは、キャッシュにはないのでHDD相応のスピードになるでしょう。なので、このベンチマーク結果は現実との乖離が大きいと考えたわけです。

フィードバック

フィードバック

コメント

タイトルとURLをコピーしました