Steuern der Priorität von Anwendungen mithilfe von cgroups

8

Ich möchte cgroups besser verstehen und die Anwendungsfälle für die Anwendung von cgroups verstehen.

Sind cgroups eine gute Möglichkeit, verschiedene Anwendungen zu priorisieren (dh bestimmten Anwendungstypen wie Webservern eine höhere Priorität einzuräumen)?

Johnnie
quelle
CPU-Drosselung ist ein guter Anwendungsfall für Gruppen
Ken Sharp

Antworten:

8

Es gibt verschiedene Verwendungszwecke für cgroups . Aus der Systemadministration heraus ist es wahrscheinlich am wichtigsten, die Ressourcen zu begrenzen - das klassische Beispiel hierfür ist der CPU-Zugriff. Wenn Sie eine Gruppe für z. B. erstellen sshdund ihr einen nicht zu vernachlässigenden CPU-Zeitanteil geben (im Vergleich zu anderen Gruppen oder der Standardeinstellung, unter die alle unsortierten Prozesse fallen), können Sie sich garantiert auch in Zeiten anmelden, in denen der Computer ausgeführt wird eine CPU-intensive Aufgaben.

Interessanter ist, dass Sie sich fast sofort anmelden können, wenn Sie diesen "Remotezugriff" -Prozessen eine viel höhere CPU-Freigabe als dem Rest geben (da der ssh-Daemon Vorrang vor den übrigen laufenden Prozessen hat), ohne dass Sie Schaden nehmen die Gesamtberechnungsstärke der Maschine, da die Ressourcen nur nach Bedarf zugewiesen werden. Normalerweise möchten Sie dies zusammen mit der Priorisierung von E / A (einschließlich Netzwerk) tun. Wie John im Kommentar unten richtig hervorhebt, möchte man diese Dinge jedoch nicht unachtsam tun (da sie auf unerwartete Weise zurückschlagen könnten). Es ist wichtig zu beachten, dass die Gruppen standardmäßig vererbt werden - dh man möchte kein Speicher- / CPU-Schwein aus einer solchen SSH-Sitzung heraus starten. Dafür gibt es jedoch Mechanismen, die cgroups beim Start Prozesse zuweisen können.

Eine andere Verwendung besteht darin, die Prozesse voneinander zu isolieren. In Kombination mit anderen Funktionen (Namespace-Isolierung) in neueren Linux-Kerneln werden sie verwendet, um Virtualisierung auf Betriebssystemebene wie LXC (Linux Containers) zu erstellen .

Ansonsten können Sie verschiedene Abrechnungs- und Steuerungsaufgaben erledigen (Einfrieren einiger Prozessgruppen, Zuweisen zu bestimmten CPU-Kernen usw.).

Die beiden Links hier sollten ein vernünftiger Ausgangspunkt sein, wenn Sie nach weiteren Informationen suchen. Möglicherweise möchten Sie auch das Documentation/cgroupsVerzeichnis im Linux-Kernel-Quellbaum überprüfen .

Peterph
quelle
Vielen Dank. Das sshd-Beispiel ist interessant und bringt einen anderen verwandten Gedanken hervor. Ein Aspekt, den ich nicht berücksichtigt habe, ist die Sicherstellung, dass andere Ressourcen angemessen zugewiesen werden. Ich gehe davon aus, dass jemand mit unvollständigen Kenntnissen des Profils einer Anwendung Chaos anrichten kann, indem er nur Ressourcen für die CPU zuweist (in diesem Beispiel) und keine Zuweisung für I / O (sagen wir Netzwerk). Wenn ja - gibt es bekannte Profile für cgroups, die irgendwo veröffentlicht werden?
Johnnie
@ John interessante Frage in der Tat. Vielleicht möchten Sie Distributionen überprüfen systemd, die (ab) cgroups für ihre eigenen Zwecke verwenden - die systemd-Einheitendateien für Dienste geben möglicherweise Hinweise darauf, was sinnvoll sein könnte. Aber am Ende ist es immer Sache des Systemadministrators, auf die harte Tour zu lernen, was wirklich nicht die "gute Idee (TM)" ist.
Peterph
1
@kokbira hängt von der Ebene ab - im Allgemeinen schreiben Sie in das cgroupPseudofilesystem, das Sie möglicherweise zuerst bereitstellen müssen. In den meisten Fällen erledigt das Init-System dies heute für Sie und verwendet cgroups häufig bereits auf irgendeine Weise. Die einzige endgültige Antwort ist das Lesen der Dokumentation: Kernel-Dokumente , OpenRC @ Gentoo , systemd @ freedesktop .
Peterph
1
@kokbira Das Betriebssystem macht das, was Sie ihm sagen (zumindest ein gutes - es gibt einige, die viele andere Dinge tun, denen Sie sie nicht erzählen, aber das ist eine andere Geschichte). Die Idee ist, dass wenn Sie eine Anwendung ausführen, Sie möchten, dass sie alles erhält, was sie benötigt, um das auszuführen, was Sie erwarten. Wenn sich die Anwendung schlecht verhält, ist es Sache des Systembetreibers (in diesem Fall Sie), etwas dagegen zu unternehmen. Die Verteilungsautoren könnten sich einige Heurestiken einfallen lassen, um diese Art von Problemen zu erkennen, aber es würde mehr Probleme verursachen, die es beheben würde.
Peterph
1
@kokbira Was Firefox selbst betrifft, würde ich vorschlagen, einige Addons zu verwenden, die die Belastung des Browsers und folglich des gesamten Systems verringern. Aus meiner Erfahrung reichen NoScript & uBlock Herkunft aus. Insbesondere NoScript in "Alles standardmäßig blockieren" wirkt Wunder - aktivieren Sie einfach das Nötigste, um mit den von Ihnen verwendeten Websites zu arbeiten, und Sie können problemlos auf Hunderte von Registerkarten auf einem 8-GB-RAM-System zugreifen und trotzdem recht gut arbeiten. Außerdem haben Sie den zusätzlichen Schutz vor all dem JS-Müll, den die meisten Websites heutzutage für unnötige ausgefallene Effekte verwenden.
Peterph