Chcę wyłączyć 3 rdzenie procesora i uruchomić procesor na jednym rdzeniu. Mam polecenie używane: maxcpus=1
. Ale potem wykonałem to polecenie ls /sys/devices/system/cpu
. Nadal pokazuje cpu0,cpu1,cpu2,cpu3
.
Próbowałem również: echo 0 > /sys/devices/system/cpu3/online
ale pojawia się następujący błąd: no such file or directory
.
maxcpus=1
polecenie ? Czy umieściłeś ten ciąggrub.cfg
jako opcję rozruchu? (Zaktualizuj swoje pytanie zamiast odpowiadać w komentarzach).maxcpus=1
) różni się w zależności od dystrybucji. Również/sys
ścieżka, którą masz, jest po prostu niewłaściwa, właściwa jest ścieżka/sys/devices/system/cpu/cpu3/online
.Odpowiedzi:
Jak wskazał Patrick w komentarzu ,
/sys
źle zrozumiałeś ścieżkę .Jeśli chcesz wyłączyć wszystkie procesory, z wyjątkiem
cpu0
:Pisanie
maxcpus=1
w wierszu poleceń powłoki nie ma żadnego efektu. Dokładniej, ustawia zmiennąmaxcpus
na wartość1
w tej powłoce, co nie ma żadnego innego efektu. Możesz ustawić liczbę procesorów w czasie uruchamiania, przekazującmaxcpus
jako parametr jądra . W tym celu musisz zmienić konfigurację programu ładującego (np. Zmienić wiersz poleceń jądra w U-Boot).źródło
/sys/devices/system/cpu/online
i./offline
plików do sterowania wszystkimi rdzeniami.core
i wyłączenie?niekoniecznie wyłączasz lub dezaktywujesz rdzenie.
należałoby użyć CPUSET i taskset
http://man7.org/linux/man-pages/man7/cpuset.7.html
Krótko mówiąc, jeśli masz 1 procesor posiadający 6 rdzeni, skonfiguruj cpusety i uruchom proces w procesorze skonfigurowanym tylko na jednym rdzeniu, na przykład na rdzeniu nr 3. Gdyby to był proces równoległy, wszystko byłoby ograniczone do tego jednego rdzenia, tak że jeśli uruchomisz 4 procesy w danym procesorze, mając zdefiniowany tylko jeden rdzeń, to każdy z 4 procesów uzyska 25% wykorzystania procesora na rdzeniu # 3.
Opierając się na tym, zwykle dzieje się tak, że procesor jest tak skonfigurowany, że
także: https://linux.die.net/man/1/taskset
źródło