Linux 为什么Docker中的算术运算速度较慢?

Linux 为什么Docker中的算术运算速度较慢?,linux,performance,docker,containers,ubuntu-16.04,Linux,Performance,Docker,Containers,Ubuntu 16.04,我有一个简单的程序来测量浮点乘法(和随机生成,编译g++-O0)。 在主机(Ubuntu 16.04)上运行时,每10000000次乘法得到约1.6秒,在图像“Ubuntu”的容器中运行时(无需重新编译),得到约3.6秒。 有人能解释为什么它慢了2.5倍吗 p、 我多次运行程序来消除异常值。我不需要优化它,只需要详细解释那里发生了什么 test.cpp 编译g++-O0测试.cpp 要在生成后使用的容器中运行,请执行以下操作: docker run-it.bin/bash \a.out 更新:

我有一个简单的程序来测量浮点乘法(和随机生成,编译g++-O0)。 在主机(Ubuntu 16.04)上运行时,每10000000次乘法得到约1.6秒,在图像“Ubuntu”的容器中运行时(无需重新编译),得到约3.6秒。 有人能解释为什么它慢了2.5倍吗

p、 我多次运行程序来消除异常值。我不需要优化它,只需要详细解释那里发生了什么

test.cpp 编译
g++-O0测试.cpp

要在生成后使用的容器中运行,请执行以下操作:

docker run-it.bin/bash

\a.out

更新: 使用
-static
标志编译后,两种环境中的程序运行时相同
还有一个问题,为什么它实际上是一样的?是否应该有一些容器化开销?

您正在从libc调用
rand
函数,这可能在Docker容器中以不同的方式实现

要获得可靠的结果,请在主机和容器中使用完全相同的操作系统和软件包版本,或者使用以下方式静态链接libc:

g++ -O0 -static-libstdc++ -static-libgcc test.cpp

您正在从libc调用
rand
函数,这可能在Docker容器中以不同的方式实现。为了获得可靠的结果,请在主机和容器中使用完全相同的操作系统和软件包版本,或者使用类似于
g++-O0-static libstdc++-static libgcc test.cpp的东西静态链接libc。能否在docker Build
中从头开始运行相同的编译二进制文件?虽然您需要为此生成静态编译的二进制文件。@AlexYu只使用
-static
进行测试,现在docker中的运行时间与主机中的运行时间相同,但我认为这很好地回答了这个问题。我建议这样做:。不要混淆它使用的是
podman
而不是
docker
——这是一样的。它解释了哪些容器隔离了哪些容器没有隔离。第4页直接指出:“容器只是作为容器运行时的子进程启动的常规Linux进程,而不是由在shell中运行命令的用户启动的。”
FROM ubuntu

WORKDIR /arythmetics

COPY a.out .

g++ -O0 -static-libstdc++ -static-libgcc test.cpp