Подсчитать количество разрешенных процессоров в контейнере Docker

14

Мой конкретный сценарий заключается в следующем. Я запускаю Docker-контейнер с определенным процессором:

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

внутри этого контейнера я запускаю сценарий оболочки в качестве точки входа, и этот сценарий оболочки будет запускаться makeв какой-то момент. Я хотел бы выяснить, какое количество рабочих мест ( -j) будет. Конечно, я мог бы передать количество выделенных процессоров через среду, но автоматический способ его обнаружения был бы гораздо предпочтительнее.

Я знаю, что могу использовать taskset -c -p $$или cat /proc/self/status | grep Cpus_allowed_listдля получения Cpus_allowedтекущего процесса, но я не знаю, как получить фактическое количество разрешенных процессоров. Я хотел бы избежать синтаксического анализа вывода этих команд или возиться с Cpus_allowedмаской, но сделаю это, когда нет параметров.

PMR
источник
1
nproc- напечатать количество доступных единиц обработки
Брайан
@ Брайан Это было слишком просто.
вечера

Ответы:

19

Вы можете использовать nprocинструмент сценария оболочки.

Так что это будет -j$(nproc)в рассматриваемой командной строке make.

Брайан
источник
1
"docker run --rm --cpus 2 debian nproc" -> 8?
Эван Бенн
2
@EvanBenn --cpus="2"не ограничивает количество единиц обработки и эквивалентен -cpu-period="100000" and --cpu-quota="200000".
Брайан