我进行了一个实验,比较了一个码头容器的CPU性能和它正在运行的主机的CPU性能。
病例
A:在主机上运行的基准程序(Intel i5,2.6 GHz,2处理器,2核)
B:在同一主机上运行的Docker容器上运行的基准程序。(对B中的容器没有资源限制,即容器本身拥有所有1024个cpu共享。没有其他容器正在运行)
基准程序:数值积分
数值积分:是大规模并行程序的一个标准示例。使用示例程序库编写了一个用C++编写的标准数值积分OpenMP (已经进行了正确性测试)。该程序由程序中的可用线程从1-11中运行11次。这11次运行是针对每个案例A和B进行的,因此总共对主机执行了22次,对于容器执行了11次。
X轴:程序中可用的线程数
Y轴:表示性能,它是时间的反比(用一个常数乘以时间的反比来运行程序)。
结果

观测
在主机上运行的对接器容器的性能略优于主机。本试验在2个不同的寄主上重复4-5次,每次,容器性能曲线略高于主机性能曲线。
问题
当停靠器容器在主机上运行时,容器的性能如何高于主机?
可能的原因:更高优先级的码头cgroup进程?
我假设容器的cgroup中的进程可能获得更高的进程优先级,从而使在容器中运行的程序比程序直接在主机上运行时的性能更高。这听起来像是一个可能的解释吗?
发布于 2016-01-02 00:45:21
感谢@miraculixx和@Zboson的评论,这帮助我理解了容器的性能并不比主机好。奇怪的结果(图)是由于在执行实验时在主机和容器上使用不同的编译器版本造成的。当Case A&B在更新到容器和主机中相同版本的编译器后再次运行时,结果如下:
没有优化标志的

带有优化标志的-O3的

观测
可以观察到,容器具有与主机相同或稍差的性能;这在直觉上是有意义的。(如果没有优化,就会出现一些差异)
P.S.对误导性问题的标题表示歉意。我不知道性能差异可能是由于不同的编译器版本,直到评论发布。
https://stackoverflow.com/questions/34544127
复制相似问题