Policz liczbę dozwolonych procesorów w kontenerze Docker

14

Mój konkretny scenariusz jest następujący. Uruchamiam kontener dokerów z określonym zestawem procesorów:

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

w tym kontenerze uruchamiam skrypt powłoki jako punkt wejścia i ten skrypt powłoki makew pewnym momencie uruchomi się. Chciałbym dowiedzieć się, jaka byłaby dobra liczba miejsc pracy ( -j). Mógłbym oczywiście przekazać liczbę przydzielonych procesorów przez środowisko, ale automatyczny sposób na ich wykrycie byłby znacznie preferowany.

Wiem, że mogę użyć taskset -c -p $$lub cat /proc/self/status | grep Cpus_allowed_listpobrać Cpus_allowedbieżący proces, ale nie wiem, jak pobrać rzeczywistą liczbę dozwolonych procesorów. Chciałbym uniknąć analizowania danych wyjściowych tych poleceń lub majstrowania przy Cpus_allowedmasce, ale zrobię to, gdy nie będzie dostępnych opcji.

pmr
źródło
1
nproc- wydrukuj liczbę dostępnych jednostek przetwarzania
Brian
@Brian To było zbyt łatwe.
pmr

Odpowiedzi:

19

Możesz użyć nprocnarzędzia skryptowego powłoki.

Byłoby to -j$(nproc)w danym wierszu polecenia make.

Brian
źródło
1
„docker run --rm --cpus 2 debian nproc” -> 8?
Evan Benn,
2
@EvanBenn --cpus="2"nie ogranicza liczby jednostek przetwarzających i jest równoważne z -cpu-period="100000" and --cpu-quota="200000".
Brian