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%.