【KVM/QEMU】仮想マシン(Win10)と実マシン(Win10)のベンチマーク比較(おまけで仮想ディスクベンチマーク)

タイトルの通りですが、どんなもんだろうと思って比較しました。

■前提条件

仮想マシンはついこないだ構築したばかり(【Linux Mint】KVMによるパススルー設定 - かっこいいブログ名つけたい)でLinuxMint上のWin10です。

・実マシンと言っているのは、↑とは別のSSDにインストール済みの元々使っていたWin10ですが、割と使い込んでいるのでいろいろアプリが入ってます。

・基本的に各パターン1回程度の実行です。本当は何回かやったほうがいいと思うけど、時間が足りない。

・一応、環境を再記載

マザボ:ASRock Z170 Extreme4

メモリ:DDR4 32GB

CPU:Core i7-6700K 

グラボ:STRIX-GTX1060-DC2O6G

 

1.cpu-z(1.84)でのCPUベンチマーク比較

パターン①:virt-managerの設定にて

・設定:「ホストCPUの設定をコピー」

トポロジー:ソケット数2 コア数:4

f:id:engetu21:20180410204603p:plain

 

パターン②:virt-managerの設定にて

・設定:「ホストCPUの設定をコピー」

トポロジー:ソケット数1 コア数:8

f:id:engetu21:20180410204332p:plain

 

パターン③:virt-managerの設定にて

・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)

トポロジー:手動設定なし

f:id:engetu21:20180410205139p:plain

 

パターン④:virt-managerの設定にて

・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)

トポロジー:ソケット数2 コア数:4

f:id:engetu21:20180410205300p:plain

 

パターン⑤:実マシン

f:id:engetu21:20180410205408p:plain

 

整理すると

パターン

設定

ソケット数

コア数

CPU Single Thread

CPU Multi Thread

パターン①

ホストCPUの設定をコピー

2

4

418

2322.1

パターン②

ホストCPUの設定をコピー

1

8

427.8

2288.8

パターン③

host-passthrough

手動設定なし

手動設定なし

440.4

869.7

パターン④

host-passthrough

2

4

412.2

2335.5

パターン⑤

-

1

8

435.2

2408.8

です。

計測時の画像でReferenceを設定していたりしていなかったりはご愛嬌で・・・。

パターン③のCPU Multi Threadが極端に遅いのはソケット数とコア数がともに2ずつしか認識していないからですね。Windows7~10ではソケット数の上限が2個に制約されてしまうらしいです(WindowsServerならそうでもないらしい?)。ので、Redhat仮想化のチューニングと最適化ガイド - Red Hat Customer Portalで記載されている、

「注記

環境によっては要件が異なることもありますが、 ソケット数を選択する場合、 コア、 スレッドいずれもひとつのみにした方が一般的には最善のパフォーマンスとなります。」

というのを信じて、仮想Windowsマシンをソケット数8でコア数1で設定しても、パターン③同様にソケット数は2個として認識されます。

 

実際のところ、仮想環境でオーバーヘッドがかかるかと思いきやそうでもない感じですかね?

実マシンとの性能差異がない、というか、Referenceの6700Kと比較しても遜色がないですな・・・。

ちなみに

【Linux/QEMU/KVM】 CPU Pinning(CPUアフィニティ)の設定でゲスト上のWindowsを快適に動かす - TECHLOGICS

を参考にCPU Pinningをやっていますが、やっていない状態とあまりスコアの違いは見られませんでした。

 

なお、設定を「ホストCPUの設定をコピー」と「host-passthrough」ではcpu-z上でCPU欄は以下のように変わります。

・「ホストCPUの設定をコピー」

f:id:engetu21:20180410212007p:plain

・「host-passthrough」

f:id:engetu21:20180410222205p:plain

「host-passthrough」のほうはプロセッサ情報が実CPU情報になるようですね。面白いですねぇ。

 

2.CrystalMark2004R7での比較

パターン①:virt-managerの設定にて

・設定:「ホストCPUの設定をコピー」

トポロジー:ソケット数1 コア数:8

f:id:engetu21:20180410213633p:plain

 

パターン②:virt-managerの設定にて

・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)

トポロジー:ソケット数2 コア数:4

f:id:engetu21:20180410213437p:plain

 

パターン③:実マシン

f:id:engetu21:20180410213320p:plain

 

総合スコアでみるとなぜか実マシンが負けるという・・・

 

3.結論

ベンチマーク的に見れば仮想環境でも十分性能は発揮できる。1項の設定パターンについては、思った以上にはスコア差出なかったのでパターン③以外であれば何でもいいんじゃないですかね。(適当)

 

4.おまけ

ところで仮想環境上ではSSDの読み書きは遅くなるのかな? と思って測ってみました。

ただ、フォーマットはqcow2とrawで比較するとraw(非スパース)のほうがいいらしい。

なんでもqcow2は使った分だけディスク領域を使うがオーバーヘッドが発生し、raw(非スパース)は定義したディスク領域を最初からガツっと確保するらしいので、オーバーヘッドが起きにくいとか。ということなので、それも比較。

参考:KVMを使う(ディスク性能編その2) « さくらインターネット研究所

 

パターン①【qcow2】

・仮想ディスクのパフォーマンスオプション
キャッシュモデル:ハイパーパイザーのデフォルト(writethrough)
IOモード:ハイパーパイザーのデフォルト

f:id:engetu21:20180410214459p:plain

 

パターン②【raw(非スパース)】

※qcow2→raw(スパース)→raw(非スパース)に変換したもの

・仮想ディスクのパフォーマンスオプション
キャッシュモデル:ハイパーパイザーのデフォルト(writethrough)
IOモード:ハイパーパイザーのデフォルト

f:id:engetu21:20180410214812p:plain

 

あまり変わりませんね・・・?

qcow2はディスク拡張すると性能劣化が激しいと聞いており、実際やりましたが(【LinuxMint】【QEMU/KVM】ディスク容量を拡張する - かっこいいブログ名つけたい)、そうでもありませんね。

というより、CT250MX500SSD1使っていますが、read:560MB/s、wirte:510MB/sなのになぜそれより早いのか? 仮想マシンだからキャッシュメモリを使ってるとかそんな感じかな?

仮想マシンで動かしたほうが早くなるってことになるのかな・・・?(謎)