docker run --cpuset参数没有任何效果

8
我通过指定cpuset到1个核心启动了一个Docker容器:

我通过指定cpuset到1个核心启动了一个Docker容器:

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

通过指定cpuset为4个核心,可以创建第二个实例:
docker run --cpuset-cpus="0-3"...

我在每个容器中启动了一个负载进程,并监控了两个容器的 CPU 消耗情况。

负载进程类似于:

ffmpeg input > output

我注意到两个容器的执行时间没有改善(没有加速)。您有任何想法为什么没有改善吗?4核容器应该比1核容器运行得更快,对吧?注意:使用top命令查看1核容器。
CPU0%=100%
CPU1%=0
CPU2%=0
CPU3%=0

使用4核容器时,Docker会随机选择其中一个核心来启动进程。有时这会影响每个核心的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个回答

9
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%。

对于FFmpeg库而言,问题在于如何优化CPU的消耗,以便在多核系统中使用100%的每个核心?ffmpeg input.avi ouput.mp3 - staticx
这是另一个问题。 - Thomasleveil
问题在于我不想使用Docker Hub提供的压力测试工具。我想要对像ffmpeg这样的C库进行100%每个核心的压力测试。 - staticx
1
这是一个非常特定的情况,值得单独提出问题。在Google上快速搜索将显示,FFmpeg进程可以或不能使用多个线程,这取决于您指定的编解码器。因此,您应该针对使用的特定编解码器向FFmpeg提出问题。 - Thomasleveil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接