为什么 bash 在 Ubuntu VM 上比在主机 MacOS 上显示得更快?

为什么 bash 在 Ubuntu VM 上比在主机 MacOS 上显示得更快?

这是现在坐在我面前的笔记本电脑:

在此输入图像描述

它安装了 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实现差异的影响。
  • 我进行了多次测试,结果看起来相当一致。
  • 没有其他值得注意的系统负载。

相关内容