Docker Run --cpuset не имеет никакого эффекта

Я запустил один докер-контейнер, указав процессор в 1 ядре:

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

Второй, указав процессор на 4 ядра:

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

Я запустил процесс загрузки в каждом контейнере и контролировал потребление ресурсов процессора для обоих контейнеров.

Процесс загрузки выглядит так:

ffmpeg input > output

Я заметил, что нет никакого улучшения в сроках выполнения между обоими контейнерами (без ускорения).

Есть ли у вас идеи, почему нет улучшений? Контейнер с 4 ядрами должен работать быстрее, чем 1 контейнер с ядром, верно?

NB: используя верх для 1 core контейнера

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

используя top для контейнера 4 core, 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 не использует несколько ядер, даже если они доступны. В результате эта программа не очень подходит для тестирования производительности в отношении использования ядер ЦП.

Вместо этого используйте pzip. см. Использование многоядерных файлов для сжатия / распаковки tar + gzip / bzip

Также см. Как я могу создать высокую загрузку процессора на сервере Linux?


удобноstressинструмент уже доступен в Docker Hub, так что вы можете убедиться, что докер--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%.

Другие вопросы по тегам