![Wie nutzt Debian viele CPU-Kerne?](https://rvso.com/image/50606/Wie%20nutzt%20Debian%20viele%20CPU-Kerne%3F.png)
Ich habe gerade ein Konto auf einem 24-Core-VPS bekommen (laut UnixBench gibt es 24 CPUs).
- Allgemein ausgedrückt: Wie kann ich all diese Kerne für allgemeine Shell-Berechnungen in Debian sinnvoll nutzen?
- Muss ich etwas Besonderes eingeben, wenn ich lang laufende Apps aus der Shell herausgebe, damit jeder Prozess auf einem separaten Kern ausgeführt wird, falls einer verfügbar ist? Oder übernimmt Debian das alles einfach, ohne dass ich es bemerke?
Antwort1
Sie müssen nichts Besonderes tun: Es ist die Aufgabe des Kernels, zu entscheiden, welcher Thread auf welche CPU läuft, und er erledigt diese Aufgabe weitaus besser, als ein Mensch es könnte.
Allerdings haben 24 CPUs keinen Sinn, wenn nicht mindestens 24 Threads gleichzeitig ausgeführt werden können. Programme werden nicht auf magische Weise schneller, wenn mehr CPUs verfügbar sind: Nur Programme, die für mehrere parallele Threads codiert sind, profitieren davon, und viele Programme profitieren nicht davon, nicht weil sie auf minderwertige Weise geschrieben sind, sondern weil das, was sie tun, von Natur aus nicht parallelisierbar ist.
Ein Programm mit N gleichzeitigen Rechenthreads profitiert von bis zu N CPUs (es ist jedoch möglicherweise nicht N-mal schneller, da die Synchronisierung zwischen den Threads Zeit in Anspruch nimmt). Das Ausführen von M verschiedenen Programmen, die kaum oder gar nicht interagieren, nutzt ebenfalls M CPUs (oder sogar mehr, wenn die Programme mehrere Threads gleichzeitig ausführen).
In einigen Fällen ist ein manueller Eingriff erforderlich, um die Vorteile der Parallelität zu nutzen. Wenn Sie mehrere Datenverarbeitungsaufgaben starten, achten Sie darauf, dass sie parallel (mit etwas mehr als einer Aufgabe pro CPU) und nicht nacheinander ausgeführt werden. Wenn Sie beispielsweise Software erstellen, übergeben Sie die -j
Option an make
. Hier sind einige weitere Beispiele und Erklärungen:
- Vier Aufgaben parallel... wie mache ich das?
- Parallele Ausführung eines Programms auf mehreren Dateien
- Warum wird bei einer Dual-Core-CPU die Option -j3 für make empfohlen?
- Bis zu X-Befehle parallel ausführen
Wenn Sie einen Webserver betreiben, können alle für hohe Belastungen ausgelegten Webserver die Parallelität gut ausnutzen. Apache wird als Testfall verwendet, um die Leistung von Optimierungen im Linux-Kernel zu bewerten. Beachten Sie jedoch, dass die Parallelität in der CPU nur dann hilfreich ist, wenn kein anderer Engpass vorliegt, z. B. Konflikte aufgrund von Datenbankzugriffen oder Eingabe-/Ausgabebandbreite.
Antwort2
Die Nutzung vieler Kerne zur Leistungssteigerung hängt stark von Ihrer Anwendung ab. Einige Anwendungen müssen schrittweise ausgeführt werden: Es gibt einfach keine Möglichkeit, die Berechnung parallel auf viele Kerne aufzuteilen, da man zur Berechnung eines bestimmten Schritts die Ergebnisse der vorherigen Schritte kennen muss. In diesem Fall ist die Verwendung von 24 Kernen genauso gut wie die Verwendung von nur einem.
In anderen Fällen, in denen die Anwendung viele Dinge tun muss, die nicht voneinander abhängen, können viele Kerne die Arbeit erheblich beschleunigen. Ein treffendes Beispiel: Wenn Sie ein Projekt mit vielen Quelldateien kompilieren, können Sie jede Quelldatei einzeln kompilieren, bevor Sie die verschiedenen Dateien verknüpfen. In einem solchen Fall können Sie den Compiler jede Datei auf einem separaten Kern kompilieren lassen. Anwendungen, die mehrere CPU-Kerne nutzen können, verfügen normalerweise über einen Schalter, mit dem Sie dies anfordern können. Wenn Sie beispielsweise ein Projekt mit GNU kompilieren make
, können Sie ihm den -j
Schalter gefolgt von einer Zahl übergeben. Diese Zahl gibt an, wie viele Jobs make
gleichzeitig (sprich: auf verschiedenen Kernen) gestartet werden sollen.