CPU und Scheduling

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • top — CPU-Nutzung und Prozesse live beobachten.
  • ps — Scheduling-Einstellungen eines Prozesses untersuchen.
  • nice -n 10 BEFEHL — einen Befehl mit niedrigerer Scheduling-Priorität starten, indem seine geerbte Niceness um 10 erhöht wird.

Befehle und Optionen

Diese Befehle kommen im kurzen Beispiel unten vor.

Befehl oder Taste Bedeutung
top -d 1 Die Live-Anzeige jede Sekunde aktualisieren; -d legt das Intervall fest.
q in top Die Anzeige beenden und zur Shell zurückkehren.
ps -o pid,ni,comm -o wählt die Spalten: Prozess-ID, Niceness und Programmname.
nice -n 10 BEFEHL -n 10 erhöht die geerbte Niceness innerhalb ihres gültigen Bereichs um 10. Die Zahl ist kein CPU-Prozentsatz.

Im Beispiel ist BEFEHL das Programm ps: Wir untersuchen die Priorität des gerade gestarteten Befehls. Hintergrundprozesse und gespeicherte PID-Variablen sind nicht erforderlich.

Die entscheidenden Konzepte

1. Die CPU führt Anweisungen aus

Die CPU (Central Processing Unit) erledigt die Rechenarbeit laufender Programme. Speicher hält Code und Daten bereit; CPU-Zeit ermöglicht einem Programm, damit zu arbeiten.

Ein Prozess kann im Speicher bleiben und dabei fast keine CPU nutzen. Ein Server beim Warten auf eine Anfrage und ein Worker beim Berechnen eines Ergebnisses benötigen deshalb unterschiedliche Ressourcen.

2. Der Scheduler verteilt CPU-Zeit

Ein Thread ist ein Ausführungsstrang innerhalb eines Prozesses. Ein Prozess kann einen oder mehrere Threads besitzen. Der Linux-Scheduler entscheidet, welche ausführbaren Threads Zeit auf den verfügbaren logischen CPUs erhalten.

Wollen mehr Threads arbeiten, als gleichzeitig ausgeführt werden können, müssen einige warten. Ein schlafender Thread konkurriert normalerweise erst nach dem Aufwachen wieder um CPU-Zeit.

Mehr CPUs ermöglichen mehr gleichzeitige Arbeit. Sie führen aber einen einzelnen Thread nicht automatisch parallel aus. Die Anwendung muss ihre Arbeit aufteilen können.

3. CPU-Nutzung misst Aktivität, nicht Funktionsfähigkeit

Im üblichen Linux-top-Modus beansprucht ein Prozess mit 100 % CPU ungefähr eine logische CPU. Ein Prozess mit mehreren beschäftigten Threads kann über 100 % erreichen. Das unterscheidet sich von der Gesamtauslastung des Systems: Ein beschäftigter Thread lastet nicht unbedingt alle CPUs aus.

Achte auf diese Prozessspalten:

  • %CPU: CPU-Nutzung während des Aktualisierungsintervalls nach der ersten Messung.
  • TIME+: aufsummierte CPU-Zeit, nicht die seit dem Start verstrichene Zeit.
  • S: Zustand; R bedeutet laufend oder bereit, S bedeutet schlafend.
  • NI: Niceness, die im nächsten Abschnitt erklärte Scheduling-Präferenz.

Hohe CPU-Nutzung kann nützliche Arbeit bedeuten. Niedrige Nutzung kann bedeuten, dass eine langsame Anwendung auf Datenbank oder Netzwerk wartet. Vergleiche die Nutzung mit Antwortzeiten und erledigter Arbeit, bevor du ein Problem daraus ableitest.

4. Niceness ist eine Präferenz, keine Grenze

Bei gewöhnlichen Arbeitslasten beeinflusst Niceness, wie CPU-Zeit bei Konkurrenz verteilt wird. Der Bereich reicht von -20 bis 19: Eine höhere Zahl bedeutet niedrigere Priorität. Der übliche Ausgangswert ist 0 und wird vom startenden Prozess geerbt.

nice -n 10 ändert diesen Ausgangswert normalerweise von 0 auf 10. Es bedeutet nicht „verwende 10 % CPU“. Ein Prozess mit niedrigerer Priorität kann bei freier Kapazität weiterhin eine CPU vollständig auslasten.

Niceness begrenzt weder die CPU-Nutzung noch garantiert sie Antwortzeiten. Sie ändert die Scheduling-Präferenz; verbindliche CPU-Grenzen sind ein anderer Mechanismus.

Ein kleines Beispiel

Optional: Verwende ein Bash-Terminal unter Linux mit top und ps aus procps. Administratorrechte sind nicht erforderlich.

top -d 1

Warte zwei Aktualisierungen ab. Wähle einen Prozess und vergleiche %CPU, TIME+ und Zustand. Die Werte hängen von der aktuellen Arbeitslast ab; auf einem ruhigen System siehst du möglicherweise kaum Aktivität. Drücke q, um zur Shell zurückzukehren, und führe dann Folgendes aus:

nice -n 10 ps -o pid,ni,comm

Suche die Zeile mit dem Namen ps und lies ihren NI-Wert. Aus einer Shell mit Niceness 0 erwartest du 10. Die Shell selbst behält ihre ursprüngliche Einstellung. ps gibt eine Momentaufnahme aus und endet. Das zeigt die Einstellung, nicht die Verteilung von CPU-Zeit zwischen konkurrierenden Workern.

Es bleibt keine zusätzliche Arbeitslast laufen und Aufräumen ist nicht erforderlich.

Merke dir: Der Scheduler verteilt CPU-Zeit an ausführbare Arbeit. top zeigt die Nutzung; Niceness beeinflusst die Priorität, statt eine Nutzungsgrenze festzulegen.