Порахуйте кількість дозволених процесорів у контейнері 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маскування маскою, але це робитиму, коли немає варіантів.


1
nproc- роздрукувати кількість доступних одиниць обробки
Брайан

@Brian Це було занадто просто.
pmr

Відповіді:


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".
Брайан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.