GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So deaktivieren Sie eine CPU

Nach einigen Tests habe ich die folgenden Ergebnisse erhalten:

echo 0 > /sys/devices/system/cpu/cpu4/online

deaktiviert die 4. CPU.

"disable the 4th CPU" bedeutet, dass die späteren Prozesse nicht mehr der 4. CPU zugeordnet werden. Mit anderen Worten, die Prozesse, die sich vor dem "Deaktivieren der 4. CPU" auf der 4. CPU befanden, werden nicht aus der CPU verschoben, während die CPU deaktiviert wird.

Sagen, dass ich vier CPUs habe:0, 1, 2 und 3. Also kann ich:

echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu2/online
echo 0 > /sys/devices/system/cpu/cpu3/online
./MyShell.sh

um ./MyShell.sh zu erzwingen der CPU0 zuzuweisen.

Übrigens werden beim Neustart alle CPUs automatisch aktiviert.


Neben der @Yves-Antwort können Sie tatsächlich die isolcpus verwenden Kernel-Parameter.

So deaktivieren Sie die vierte CPU/den vierten Kern (CPU 3) mit Debian oder Ubuntu:

In /etc/default/grub isolcpus=3 hinzufügen bis GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=3"

Führen Sie

aus
sudo update-grub

Starten Sie den Server neu.

isolcpus – Isolieren Sie CPUs vom Kernel-Scheduler.

Zusammenfassung isolcpus=CPU_Nummer [, CPU_Nummer ,...]

Beschreibung Entfernt die angegebenen CPUs, wie sie durch die cpu_numbervalues ​​definiert sind, aus dem allgemeinen Kernel-SMP-Balancing und den Scheduleralgroithms. Die einzige Möglichkeit, einen Prozess auf oder von einer "isolierten" CPU zu verschieben, ist über die CPU-Affinitäts-Systemaufrufe. cpu_number beginnt bei 0, der Maximalwert ist also um 1 kleiner als die Anzahl der CPUs auf dem System.

Diese Option ist die bevorzugte Methode zum Isolieren von CPUs. Die Alternative, die CPU-Maske aller Tasks im System manuell festzulegen, kann zu Problemen und einer suboptimalen Load-Balancer-Leistung führen.

Interessanterweise kann die Verwendung dieser Kernelparameter eine CPU für die spätere Nutzung der CPU-Affinität zu einem Prozess/Pin eines Prozesses an eine CPU reservieren und somit sicherstellen, dass keine Benutzerprozesse mehr auf dieser CPU laufen.

Darüber hinaus kann der Server auch stabiler gemacht werden, wenn garantiert wird, dass ein bestimmter Prozess mit einer sehr hohen Last seine eigenen CPUs zum Spielen hat. Ich habe gesehen, wie Meru das mit seinen Linux-basierten Controllern gemacht hat, bevor ich auf dieses Setup aufmerksam wurde.

Der zugehörige Befehl, um dann der vierten CPU (CPU 3) einen Prozess zuzuweisen, lautet:

sudo taskset -cp PID

taskset wird verwendet, um die CPU-Affinität eines laufenden Prozesses anhand seiner PID festzulegen oder abzurufen oder um einen neuen Befehl mit einer bestimmten CPU-Affinität zu starten. Die CPU-Affinität ist eine Scheduler-Eigenschaft, die einen Prozess an einen bestimmten Satz von CPUs auf dem System "bindet". Der Linux-Scheduler berücksichtigt die angegebene CPU-Affinität und der Prozess wird nicht auf anderen CPUs ausgeführt. Beachten Sie, dass der Linux-Scheduler auch die natürliche CPU-Affinität unterstützt:Der Scheduler versucht, Prozesse aus Leistungsgründen so lange wie möglich auf derselben CPU zu halten. Daher ist das Erzwingen einer bestimmten CPU-Affinität nur in bestimmten Anwendungen sinnvoll.


ZUSAMMENFASSUNG

Es gibt mehrere Techniken, die auf diese Frage angewendet werden:

setze isolcpus = 4 in Grub und Reboot kann die 5. CPU/CPU 4 dauerhaft für Landprozesse des Benutzers deaktiviert werden;

echo 0 > /sys/devices/system/cpu/cpu4/online deaktiviert die 5. CPU/CPU 4, die weiterhin für die ihr bereits zugewiesenen Prozesse arbeitet, aber der CPU 4 werden keine neuen Prozesse mehr zugewiesen;

taskset -c 3 ./MyShell.sh erzwingt MyShell.sh der 4. CPU/CPU 3 zuzuweisen, wobei die 4. CPU immer noch andere Landprozesse des Benutzers akzeptieren kann, wenn isolcpus sie nicht davon ausschließt.

PS. Anekdotisch mein bestes Beispiel für die Verwendung von isolcpus /taskset auf dem Feld war ein SSL-Frontend für einen sehr beschäftigten Website, die alle paar Wochen instabil wurde, wo Ansible/ssh würde mich aus der Ferne nicht mehr reinlassen.

Ich habe die oben besprochenen Techniken angewendet, und seitdem funktioniert es sehr stabil.


Linux
  1. So deaktivieren Sie ETag in NGINX

  2. CentOS / RHEL 6 :So deaktivieren Sie IPv6

  3. So erhalten Sie die CPU-Auslastung

  4. Wie beschränke ich einen Prozess auf einen CPU-Kern in Linux?

  5. Wie deaktiviere ich alles in crontab -l?

So deaktivieren Sie SELinux unter CentOS 8

So deaktivieren Sie SELinux unter CentOS

So erhalten Sie die CPU-Auslastung eines einzelnen Prozesses in Linux

So deaktivieren Sie SELinux auf AlmaLinux 8

Wie deaktiviere ich Bootchart?

So deaktivieren Sie Swap unter Linux