docker run --cpuset 没有任何效果

sta*_*icx 5 multicore resource-management cpu-usage docker cpuset

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

docker run --cpuset-cpus="0"...
Run Code Online (Sandbox Code Playgroud)

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

docker run --cpuset-cpus="0-3"...
Run Code Online (Sandbox Code Playgroud)

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

加载过程如下:

ffmpeg input > output
Run Code Online (Sandbox Code Playgroud)

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

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

注意:对 1core 容器使用 top

CPU0%=100%
CPU1%=0
CPU2%=0
CPU3%=0
Run Code Online (Sandbox Code Playgroud)

使用 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%
Run Code Online (Sandbox Code Playgroud)

Tho*_*eil 6

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

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

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


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

docker run --rm -it --cpuset-cpus="0-3" jess/stress --cpu 4
Run Code Online (Sandbox Code Playgroud)

? 您将见证所有 4 个内核的使用率均达到 100%。

然后通过运行:

docker run --rm -it --cpuset-cpus="0-1" jess/stress --cpu 4
Run Code Online (Sandbox Code Playgroud)

? 您会看到只有 2 个内核达到 100% 的使用率。