
Ich betreibe einen Ubuntu-Basisserver mit zwei Prozessen: - Prozess 1 – führt Berechnungen während 100 % der Betriebszeit durch und verwende diesen, um Rechenleistung mit der Community zu teilen (er läuft mit @prio 19) - Prozess 2 – führt von Zeit zu Zeit 5–10 Minuten lang Berechnungen durch und verwende diesen, um Berechnungen für mich durchzuführen (er läuft mit @prio -19)
Ich möchte, dass Prozess 2 100 % der Rechenleistung erhält (Prozess 1 sollte in diesem Moment nahe 0 % der CPU-Leistung kommen).
Ich habe versucht, nice/renice zu verwenden und Prozess 1 erhält Prio 19 (niedrigste mögliche) und Prozess 2 Prio -19 (höchste mögliche). Aber das Beste, was ich bekomme, sind 50 % der CPU für Prozess 1 und 50 % der CPU für Prozess 2 (geprüft mit htop) – was mich irgendwie überrascht hat …
Beide Prozesse sind Multithread-Prozesse und verbrauchen - wenn sie einzeln ausgeführt werden - 100 % aller CPU-Kerne. Keine anderen Ressourcen (E/A, Speicher, Bandbreite usw.) können diese Nutzung beeinflussen.
Ich möchte keinen Prozess manuell stoppen/starten, wenn ich Rechenleistung benötige (beide Prozesse müssen ständig laufen); 100 % der CPU für Prozess 2 müssen automatisch bereitgestellt werden.
Was muss ich tun, um mein Ziel zu erreichen? Danke.
Antwort1
Dank @ubfan1 habe ich verschiedene Planungsstrategien ausprobiert und hier ist das beste Ergebnis, das ich bisher erzielt habe:
Prozess 1 wird mit der SCHED_BATCH-Richtlinie ausgeführt
Prozess 2 läuft mit SCHED_RR-Richtlinie
Ergebnisse: wenn beide Prozesse gleichzeitig laufen: - Prozess 1 wird mit ca. 5% der CPU-Auslastung angegeben - Prozess 2 wird mit ca. 95% der CPU-Auslastung angegeben
und wenn nur Prozess 1 Berechnungen durchführt (Prozess 2 wartet auf meine Eingabe, um Berechnungen zu starten) - Prozess 1 nutzt 100 % der CPU
Falls jemand mehr darüber erfahren möchte, kann er dies lesen: