docker run --cpuset 没有任何效果

Posted

技术标签:

【中文标题】docker run --cpuset 没有任何效果【英文标题】:docker run --cpuset is not having any effect 【发布时间】:2015-10-20 13:35:52 【问题描述】:

我通过将 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%

【问题讨论】:

【参考方案1】:

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

请改用pzip。见Utilizing multi core for tar+gzip/bzip compression/decompression

另见How can I produce high CPU load on a Linux server?


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% 的使用率。

【讨论】:

对于 ffmpeg 库是一样的...如何优化 CPU 消耗以在多核系统中使用 100% 的每个内核? ffmpeg input.avi ouput.mp3 这是另一个问题。 问题是我不想使用Docker Hub提供的压力工具。我想强调 ffmpeg 之类的 C 库,每个内核 100%。 这是一个非常具体的案例,值得提出自己的问题。在 google 中快速搜索将显示 ffmpeg 进程可以或不能使用多个线程,具体取决于您为编码指定的编解码器。所以你应该问一个关于ffmpeg的具体使用和你打算使用的编解码器的问题

以上是关于docker run --cpuset 没有任何效果的主要内容,如果未能解决你的问题,请参考以下文章

在 Docker 中混合 cpu-shares 和 cpuset-cpus

获取当前 CPUSet

Docker 操作指南之运行命令篇

Docker命令RUN无法使用git init --bare吗?

如何在 docker 中的节点前为 Cloud Run 设置 nginx?

Docker windows下安装,Build和Run的步骤及注意事项