Gibt es eine Möglichkeit, Prozesse wirklich zu priorisieren oder Linux dazu zu bringen, ihre Prioritäten zu respektieren?

Gibt es eine Möglichkeit, Prozesse wirklich zu priorisieren oder Linux dazu zu bringen, ihre Prioritäten zu respektieren?

Ich weiß, dass es wie in anderen Betriebssystemen Prozessprioritäten gibt, die von -20 (höchste Priorität) bis 19 (niedrigste Priorität) reichen, aber Linux scheint sie zu ignorieren.

Gerade habe ich im Hintergrund den Kernel erstellt (obwohl makeProzesse Priorität 0 haben) und da das ziemlich lange gedauert hat, habe ich beschlossen, mir etwas anzusehen. Also habe ich ein ziemlich anspruchsvolles H264-Video (~30 % der CPU-Zeit eines Core2 2,6 GHz) in VLC geöffnet und festgestellt, dass es zu Rissen, verlorenen Frames und visuellen Artefakten kam (vermutlich aufgrund des vorherigen), obwohl der Ton in Ordnung zu sein schien.

Also habe ich beschlossen, die Priorität von VLC zu ändern renice. Als ich sah, dass PulseAudio dies tat, habe -11ich beschlossen, es auf die gleiche Stufe zu stellen, und das habe ich getan sudo renice -11 -p VLC_PROC_#.

Das Gleiche passierte immer wieder, also habe ich es auf -20 eingestellt, aber ich habe immer noch visuelle Artefakte gesehen.

Ich frage mich also, warum Linux einem -20-Prozess nicht tatsächlich Priorität gegenüber einigen 0-Prozessen einräumt und ihm alles gibt, was er braucht? Gibt es eine Möglichkeit, Prozesse in Linux wirklich zu priorisieren?

Falls es wichtig ist: Ich verwende hier einen 64-Bit-Arch und XFCE als Desktopumgebung.

BEARBEITEN:Die Kernelkompilierung wurde durchgeführt, /tmpwobei ich die Quellen habe tmpfsund alle bereits im RAM waren. Die RAM-Nutzung erreichte nicht einmal 60 % und es waren keine Paging-Operationen vorhanden.

Das oben beschriebene Szenario ist nur einTestfall, mich interessiert mehr, warum Linux eine bestimmte Leistung erbracht hat und ob es eine Möglichkeit gibt, echte Prioritäten festzulegen.

Antwort1

renicebeeinflusst die Priorität eines Prozesses. Aber wie Sie erfahren haben, bedeutet eine höhere Priorität eines Prozesses nicht automatisch, dass er auch über alle benötigten Ressourcen verfügt. Eine höhere Priorität gibt dem Prozess lediglich eine größere Chance, Ressourcen zu ergattern.

renicewirkt sich nur auf die CPU-Zeit aus. Es hat also nur dann einen Effekt, wenn zwei oder mehr Prozesse um die CPU-Zeit konkurrieren. Wenn der limitierende Faktor nicht die CPU-Zeit, sondern die I/O-Bandbreite ist, hat der Nice-Wert keine Auswirkungen. Vielleicht verbraucht die Kompilierung in Ihrem Fall viel Festplattenbandbreite und VLC kann die Daten nicht schnell genug von der Festplatte lesen. Versuchen Sieionicestattdessen oder zusätzlich zu nice.

Wenn Sie dies häufig tun, erhalten Sie bessere Ergebnisse, wenn sich das Video und die Zusammenstellung auf getrennten Datenträgern befinden. Sie erhalten möglicherweise auch bessere Ergebnisse, wenn Sie das Video vorab in den Datenträgercache laden ( cat /path/to/video.file >/dev/nulloder tail -c +456m | head -c 123m /path/to/video.file >/dev/null123 MB ab Offset 456 MB lesen) – wenn Sie jedoch nicht über viel RAM verfügen, wird die Zusammenstellung wahrscheinlich den Cachespeicherplatz zurückfordern. Wenn Sie sicher sein möchten, dass das Video im Speicher ist, erstellen Sie eine Ramdisk und kopieren Sie das Video darauf.

Antwort2

Die Prozesspriorität ist nicht das einzige, was ins Spiel kommt, wenn Sie versuchen, zu optimierenBenutzererfahrung. Das Kompilieren des Kernels ist eine ziemlich I/O-lastige Angelegenheit - viel Lesen/Schreiben von/in kleine Dateien, was das Dateisystem ziemlich ausdehnen kann (es gibt einen Grund, warum es manchmalals eigenständiger Maßstab verwendet), insbesondere auf einem Multiprozessor-Rechner. Wenn Sie über genügend RAM verfügen, empfehle ich Ihnen, den Kernel zumindest teilweise in tmpfs zu kompilieren: Legen Sie entweder den Quellbaum dort ab (was effektiv als Vorabruf in den Cache fungiert) oder senden Sie die Ausgabe dorthin, indem Sie

make O=/dev/shm ...

oder wo auch immer Sie Ihre Instanz bereitstellen möchten, tmpfsdie groß genug ist, um die Kernelobjektdateien aufzunehmen (die leicht im Gigabyte-Bereich liegen können).

Außerdem kannst du auch prüfen, ob VLC eine Caching-Funktion hat (ich vermute, dass er das hat, MPlayer hat diese -cacheOption beispielsweise), mit der du die Daten intern zwischenspeichern lassen kannst. Dann muss er die Daten nicht erst abrufen, wenn er sie braucht, sondern wenn sie verfügbar sind.

Eine weitere Sache ist, dass die Anzeige über den X-Server erfolgt – dessen Priorität müsste ebenfalls erhöht werden (siehe den Kommentar von Wumpus Q. Wumbley unter der Frage).

Zwei weitere Optionen sind die Verwendung von cgroups und/oder RT-Scheduler (für die erste siehe z. B.Steuern der Priorität von Anwendungen mithilfe von Kontrollgruppen, für Letzteres siehe z. B. dieGentoo-Anweisungen).

Als letztes möchten Sie vielleicht Ihr System ein wenig optimieren, indem Sie unnötige Dienste deaktivieren. Persönlich würde ich PulseAudio als ersten Dienst in Betracht ziehen.

Was Sie beschreiben, klingt jedoch eher nach einem I/O mit hoher Priorität. Ich vermute, Sie haben ein starkes Swapping erlebt. Sind Sie sicher, dass Ihr tmpfs nicht zwangsweise ausgelagert wurde? In diesem Fall wird zumindest iorenice leider keine große Hilfe sein.

Antwort3

Wie andere bereits gesagt haben, können viele Teile eines Systems betroffen sein, einschließlich der Speicherbandbreite, und diese anderen Teile des Systems haben ebenfalls ihre eigene Planung und Prioritäten.

Sie können chrt -i 0der Kompilierung immer echte Leerlaufpriorität geben. http://linux.die.net/man/1/chrt

Oder drosseln Sie die Kompilierung mithilfe von cgroups. http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups.html

Oder werfen Sie alles darauf:

eatmydata cgexec -g cpu:throttled chrt -i 0 ionice -c3 nice -n19 /path/to/compile-script >/dev/null

Hinweis: nice -n19Es sollte keinen Unterschied machen, ob chrt -i 0es verwendet wird, aber es schadet auch nicht.

Mein altes P4 kann dasselbe, ohne dass VLC sich aufregt.

verwandte Informationen