这是现在坐在我面前的笔记本电脑:
它安装了 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个逻辑核心和16GB RAM。我只为虚拟机分配了 2 个逻辑核心和 2GB RAM。我认为这应该没什么区别 - 这个测试不受内存限制并且是单线程的。
- 我在运行主机测试时关闭了虚拟机
- 我在 Ubuntu bash 进程上运行 strace。正如预期的那样,在测试开始和结束时只有少数系统调用,并且在大部分测试(循环
for
)期间没有系统调用。所以这个测试应该很大程度上是CPU限制的,并且不受MacOS和Ubuntu之间I/O实现差异的影响。 - 我进行了多次测试,结果看起来相当一致。
- 没有其他值得注意的系统负载。