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 make
w 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_list
pobrać Cpus_allowed
bieżą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_allowed
masce, ale zrobię to, gdy nie będzie dostępnych opcji.
nproc
- wydrukuj liczbę dostępnych jednostek przetwarzaniaOdpowiedzi:
Możesz użyć
nproc
narzędzia skryptowego powłoki.Byłoby to
-j$(nproc)
w danym wierszu polecenia make.źródło
--cpus="2"
nie ogranicza liczby jednostek przetwarzających i jest równoważne z-cpu-period="100000" and --cpu-quota="200000"
.