5

我通过将 cpuset 指定为 1 个内核来启动一个 docker 容器:

docker run --cpuset-cpus="0"...

第二个通过将 cpuset 指定为 4 个核心:

docker run --cpuset-cpus="0-3"...

我在每个容器中启动了一个加载过程,并监控了两个容器的 CPU 消耗。

加载过程如下:

ffmpeg input > output

我观察到两个容器之间的执行时间没有改善(没有加速)。

你知道为什么没有改进吗?具有 4 个核心的容器应该比 1 个核心容器运行得更快,对吗?

注意:将顶部用于 1core 容器

CPU0%=100%
CPU1%=0
CPU2%=0
CPU3%=0

使用 top 作为 4core 容器,docker 随机选择 4 个核心之一来启动进程。有时它会影响每个核心的 30%

CPU0%=0                  CPU0%=30%                   CPU0%=0
CPU1%=100%       or      CPU0%=30%            or     CPU0%=0
CPU2%=0                  CPU0%=30%                   CPU0%=0
CPU3%=0                  CPU0%=30%                   CPU0%=100%
4

1 回答 1

6

gzip不使用多个内核,即使它们可用。因此,该程序不太适合进行有关 CPU 内核使用的性能测试。

请改用pzip。请参阅利用多核进行 tar+gzip/bzip 压缩/解压缩

另请参阅如何在 Linux 服务器上产生高 CPU 负载?


方便的是,该stress工具已经在 Docker Hub 上可用,因此您可以通过运行以下命令来验证 docker--cpuset-cpus选项是否正常工作:

docker run --rm -it --cpuset-cpus="0-3" jess/stress --cpu 4

→ 您将见证所有 4 个核心都达到 100% 的使用率。

然后通过运行:

docker run --rm -it --cpuset-cpus="0-1" jess/stress --cpu 4

→ 您将见证只有 2 个核心达到 100% 的使用率。

于 2015-07-29T14:03:04.177 回答