最強.NET開発PCを作るよ(その4) ストレージ編
の番外編として、CrystalDiskMark で HDD, SSD のアクセススピードを比較してみます。
VMWare が仮想 HDD にアクセスすると、それはそのまま物理 HDD のスピードに影響される訳で、遅い HDD 上に VM のディスクを作るとか、複数の VM が同じ HDD にアクセスしに行くと VM のスピードが落ちるのではないか?という仮説を確認します。
■まずは基本性能のチェック
左から
- C ドライブの SSD
- D ドライブの 新しい HDD
- G ドライブの古い HDD
です。シーケンシャルアクセス(Seq)が、SSD が HDD の約3倍ぐらい。しかし、Visual Studio を使ったコンパイルの場合や SQL Server によるデータの更新には、20K ぐらいの小さなファイルアクセスが頻繁に発生します。となると、512K の 10 倍ぐらいから 4K の 30倍ぐらいの違いの間ぐらい、SSD は HDD よりもディスクアクセスのスピードが違うのではないか?という予想が立てられます。
■VMWare 上でベンチマークする
SSD 上の場合(左がホスト、右がVMWare上)
HDD 上の場合(左がホスト、右がVMWare上)
VMWare 上だと、小さなファイル(4Kぐらいのファイル)で効率化されてるかと思ったら、そうではないみたいですね。逆にシーケンシャルのほうも、さほど VMWare 上だからといって、遅くなるものではないみたいです。
■同じ物理ドライブでベンチマークを動かす
VMWare 上で試す前に、同じ物理ドライブ(C ドライブの SSD上)で、2つのベンチマークを動かしてみます。そうすると、シーケンシャルのRead/Writeががくんと落ちて、1/2 になっています。同じ物理ドライブに対して R/W が発生するので、2 倍の負荷がかかります。当然ですが、スピードが 1/2 に落ちますよね。
ただし、よく見ると 512K や 4K は、それほど落ちていないことがわかります。もともとランダムアクセスで遅くなっているところがあるので、HDD のシーク速度を補う形でパフォーマンスが出ているかと。
異なる物理ドライブ(SSD と HDD)で動かすと次のように、それぞれのドライブだけでテストしたものと同じ結果が得られます。
■同じ物理ドライブで VMWare を動かす
VM の仮想ディスクを、同じ物理ドライブした状態で、それぞれの VM でベンチマークを起動します。VM 自体が別々なので、別々のパフォーマンスになるように見えますが、当然同じ物理ドライブを共有してしまっているので、パフォーマンスは 1/2 になってしまいます。
こんな風に SSD の C ドライブだけが使われている状態になります。
逆に VM の仮想ディスクを異なる物理ドライブにした状態では、VM のパフォーマンスが良いことがわかります。左が SSD に配置している VM、右が HDD に配置している VM になります。単体で動かしたときと同じ程度のパフォーマンスが得られていますよね。
また、ホストのタスクマネージャーをみると、C ドライブ(SSD) と E ドライブ(HDD)の両方が使われていることがわかります。
■同時に動かす VM は別の物理ドライブに配置する
そんなわけで、同時に動かす VM の仮想ドライブは、異なる物理ドライブに配置するとパフォーマンスが良くなるという実験結果が得られました。今回の場合は、ベンチマークを使って HDD, SSD に直接アクセスした訳ですが、VM に振り分けられるメモリが少ない場合はスワップが発生するので、この時点で、同じ物理ドライブに配置している場合はパフォーマンスが大きく低下することになると考えられます。
開発機の場合は VM をいくつも立ち上げることは稀なんでしょうが、仮想専用のサーバー機で VMWare や Hyper-V を使っている場合には、注意したいところかと。
これは自分にとって良い資料となりました。
貴重な報告ありがとうございます。