Docker --cpus использовать процессорные ядра или процессоры для ограничения использования? - PullRequest
0 голосов
/ 05 февраля 2020

Docker имеют - процессор для ограничения использования процессора для контейнера.

Согласно документам , оно будет

Укажите, сколько доступных ресурсов ЦП может использовать контейнер. Например, если на хост-машине установлено два ЦП, и вы установили --cpus = "1.5", контейнеру гарантировано не более полутора ЦП.

Однако я запускаю машину:

# cat /proc/cpuinfo | grep "cpu cores" | tail -n 1
8
# cat /proc/cpuinfo | grep "processor" | wc -l
16

Имеет ли смысл устанавливать --cpus = 8, если я хочу установить 50% -ное ограничение для контейнера? Или это будет 100%?

Я не вижу четкого ответа ни в документации Docker, ни в руководстве по cgroups.

Я видел подробное объяснение различий между физическим процессором и виртуальным процессором и ядра здесь , но это не проясняет, что я должен использовать для своих пределов с Docker.

1 Ответ

0 голосов
/ 10 февраля 2020

По умолчанию процесс в контейнере запускается без ограничений ЦП и может использовать все доступное время процессора, конкурируя с другими процессами, запущенными на хосте Linux. При установке --cpus это конфигурирует настройки cgroup для ограничения процессов внутри этого контейнера, чтобы использовать только столько долей процессорного времени. Это управляется ядром, но базовое оборудование все еще видно в /proc/cpuinfo. Вместо этого вы должны взглянуть на настройки cgroup:

$ docker run -it --rm --cpus 0.75 busybox sh
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
75000
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000

Контраст с неограниченным контейнером:

$ docker run -it --rm busybox sh
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
-1
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
/ # 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...