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
aussudo 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.