单一docker集装箱在CPU性能上略胜过其主机:为什么?

我运行了一个实验来比较Docker容器的CPU性能与它运行的主机的CPU性能。

案例

:在主机上运行的基准程序(Intel i5,2.6 GHz,2个处理器,2个内核)
B :在同一台主机上运行的Docker容器上运行的基准程序。 (没有对B中的容器进行资源限制,即容器本身拥有全部1024个cpu份额,没有其他容器正在运行)

基准程序:数值积分

数值积分:是一个大规模并行程序的标准例子。 使用OpenMP库以C ++编写的标准数值集成示例程序 (已经过testing,其正确性)。 该程序运行11次,程序中的可用线程数量从1到11不等。 这11个运行是针对每个情况A和B完成的。因此总共22个运行完成了11个主机和11个集装箱。

X轴:程序中可用的线程数

Y轴:表示与时间相反的性能(通过将运行程序的时间的倒数乘以常数来计算)。

结果 在这里输入图像说明

意见

在主机上运行的docker容器稍微胜过主机。 这个实验在2个不同的主机上重复4-5次, 每次容器性能曲线略高于主机性能曲线。

在Docker容器在主机上运行时,容器性能如何高于主机?

可能的原因:docker cgroup进程的优先级较高?

我假设容器的cgroup中的进程可能会获得更高的进程优先级,从而导致与在主机上直接运行程序时相比,在容器内运行的程序的性能更高。 这听起来像一个可能的解释?

感谢@miraculixx和@Zoson的评论,这帮助我了解容器并不是真的超越主机。 奇怪的结果(问题图)是由于在执行实验时在主机和容器上使用不同的编译器版本而引起的。 在容器和主机更新到相同版本的编译器后,情况A和B再次运行时,结果如下:

没有优化标志

在这里输入图像说明

优化标志-O3

在这里输入图像说明

意见

可以观察到,容器与主机相比具有相同或稍低的性能; 这很直观。 (没有优化,有一些差异)

PS道歉误导性问题标题。 我不知道性能差异可能是由于不同的编译器版本,直到发布评论。