Мой конкретный сценарий заключается в следующем. Я запускаю Docker-контейнер с определенным процессором:
docker run --cpuset-cpus="0-2" # ...
внутри этого контейнера я запускаю сценарий оболочки в качестве точки входа, и этот сценарий оболочки будет запускаться make
в какой-то момент. Я хотел бы выяснить, какое количество рабочих мест ( -j
) будет. Конечно, я мог бы передать количество выделенных процессоров через среду, но автоматический способ его обнаружения был бы гораздо предпочтительнее.
Я знаю, что могу использовать taskset -c -p $$
или cat /proc/self/status | grep Cpus_allowed_list
для получения Cpus_allowed
текущего процесса, но я не знаю, как получить фактическое количество разрешенных процессоров. Я хотел бы избежать синтаксического анализа вывода этих команд или возиться с Cpus_allowed
маской, но сделаю это, когда нет параметров.
nproc
- напечатать количество доступных единиц обработкиОтветы:
Вы можете использовать
nproc
инструмент сценария оболочки.Так что это будет
-j$(nproc)
в рассматриваемой командной строке make.источник
--cpus="2"
не ограничивает количество единиц обработки и эквивалентен-cpu-period="100000" and --cpu-quota="200000"
.