【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
パターン②:virt-managerの設定にて
・設定:「ホストCPUの設定をコピー」
・トポロジー:ソケット数1 コア数:8
パターン③:virt-managerの設定にて
・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)
・トポロジー:手動設定なし
パターン④:virt-managerの設定にて
・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)
・トポロジー:ソケット数2 コア数:4
パターン⑤:実マシン
整理すると
パターン |
設定 |
ソケット数 |
コア数 |
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の設定をコピー」
・「host-passthrough」
「host-passthrough」のほうはプロセッサ情報が実CPU情報になるようですね。面白いですねぇ。
2.CrystalMark2004R7での比較
パターン①:virt-managerの設定にて
・設定:「ホストCPUの設定をコピー」
・トポロジー:ソケット数1 コア数:8
パターン②:virt-managerの設定にて
・設定:モデルに直接「host-passthrough」(参考:KVM - ArchWiki)
・トポロジー:ソケット数2 コア数:4
パターン③:実マシン
総合スコアでみるとなぜか実マシンが負けるという・・・
3.結論
ベンチマーク的に見れば仮想環境でも十分性能は発揮できる。1項の設定パターンについては、思った以上にはスコア差出なかったのでパターン③以外であれば何でもいいんじゃないですかね。(適当)
4.おまけ
ところで仮想環境上ではSSDの読み書きは遅くなるのかな? と思って測ってみました。
ただ、フォーマットはqcow2とrawで比較するとraw(非スパース)のほうがいいらしい。
なんでもqcow2は使った分だけディスク領域を使うがオーバーヘッドが発生し、raw(非スパース)は定義したディスク領域を最初からガツっと確保するらしいので、オーバーヘッドが起きにくいとか。ということなので、それも比較。
参考:KVMを使う(ディスク性能編その2) « さくらインターネット研究所
パターン①【qcow2】
・仮想ディスクのパフォーマンスオプション
キャッシュモデル:ハイパーパイザーのデフォルト(writethrough)
IOモード:ハイパーパイザーのデフォルト
パターン②【raw(非スパース)】
※qcow2→raw(スパース)→raw(非スパース)に変換したもの
・仮想ディスクのパフォーマンスオプション
キャッシュモデル:ハイパーパイザーのデフォルト(writethrough)
IOモード:ハイパーパイザーのデフォルト
あまり変わりませんね・・・?
qcow2はディスク拡張すると性能劣化が激しいと聞いており、実際やりましたが(【LinuxMint】【QEMU/KVM】ディスク容量を拡張する - かっこいいブログ名つけたい)、そうでもありませんね。
というより、CT250MX500SSD1使っていますが、read:560MB/s、wirte:510MB/sなのになぜそれより早いのか? 仮想マシンだからキャッシュメモリを使ってるとかそんな感じかな?
仮想マシンで動かしたほうが早くなるってことになるのかな・・・?(謎)