今私の前にあるノートパソコンはこんな感じです。
VMWare Fusion 8.5.3およびUbuntu 16.04 64ビットVMがインストールされています。ホストのbashと仮想マシンのbashのパフォーマンスを比較するために、以下の小さなテストを実行しました。
time for i in {1..1000000}; do :; done
MacOSの一般的なbashバージョンは3.2.57なので、公正な比較のために同じバージョンをダウンロードして仮想マシンで実行するように構築しました。
結果 - 仮想マシンはホストの2倍以上高速です。!
ホスト(MacOS)
mymac:~ me$ time for i in {1..1000000}; do :; done
real 0m4.608s
user 0m4.536s
sys 0m0.067s
mymac:~ me$
仮想マシン(Ubuntu)
ubuntu@ubuntu:~$ time for i in {1..1000000}; do :; done
real 0m2.146s
user 0m2.136s
sys 0m0.008s
ubuntu@ubuntu:~$
同じCPUで同じコードを効果的に実行する必要がある場合(仮想化の一形態)、どのように仮想マシンを高速化できますか?
ノート
- MacOSホストには8つの論理コアと16 GBのRAMがあります。仮想マシンには2つの論理コアと2 GBのRAMしか割り当てられていません。私はこれに違いはないと思います。このテストはメモリバインディングではなく、シングルスレッドです。
- ホストテストの実行中にVMをシャットダウンしました。
- Ubuntu bashプロセスでstraceを実行しています。予想どおり、テストの開始と終了にはいくつかのシステムコールがあり、
for
ほとんどのテスト(ループ)中にシステムコールはありません。したがって、このテストは主にCPUにバインドする必要があり、MacOSとUbuntuの間のI / O実装の違いによって影響を受けるべきではありません。 - 複数のテストを実行しましたが、結果はかなり一貫しているようです。
- 他に顕著なシステム負荷はありません。