Was sind cgroups?
Zur Navigation springen
Zur Suche springen
Grundsätzliches
- cgroups sind ein Teil des Linux-Systemkerns, mit dem sich die Nutzung von Ressourcen durch Prozesse beschränken und überwachen lässt.
- Sie spielen bei Ressourcen-Management und Container-Virtualisierungen eine wichtige Rolle.
Wie funktionieren cgroups?
- Prozesse oder Tasks sind unter Linux von vornherein hierarchisch organisiert.
- Jeder Task muss von einem anderen gestartet werden.
- Dabei erbt er mehrere Eigenschaften wie Nice-Level und I/O-Priorität des aufrufenden Prozesses.
- Analog dazu sind Control Groups hierarchisch strukturierte Gruppen von Prozessen.
- Ein wesentlicher Unterschied ist, dass es mehrere Gruppen-Hierarchien geben kann, während immer nur einen Prozess-Baum existiert.
- Mithilfe von cgroups lassen sich zusammengehörige Prozesse gruppieren, beispielsweise nach Arbeitsteams, Software-Containern oder virtuellen Servern.
- Auf diese Weise können Kontrollgruppen verschiedenen Subsystemen für das Ressource-Management zugeordnet werden.
- Jedes Subsystem (auch resource controller genannt) entspricht einer vom Kernel verwalteten Ressource.
Zu den wichtigsten Subsystemen gehören
cpu
- begrenzt oder priorisiert die CPU-Nutzung durch die Prozesse in einer Gruppe.
cpusets
- legt fest, auf welchen Prozessorkernen die Tasks laufen dürfen.
blkio
- limitiert Zugriffe auf Blockgeräte wie Speichermedien.
devices
- kontrolliert, welche Hardware-Geräte genutzt werden dürfen.
memory
- limitiert den Speicherbedarf.
net_prio
- begrenzt den Datendurchsatz von Netzwerkverbindungen.
cpuacct
- misst die verbrauchte Prozessorzeit für Analysen und Abrechnungen.
perf_event
- ermöglicht Performance-Analysen.
Ressourcen-Management mit cgroups
- Control Groups liefern mehrere Methoden zum Einrichten, Konfigurieren und Steuern von Gruppen.
- Einerseits exportiert der Kernel einen virtuellen Verzeichnisbaum unter „/sys/fs/cgroup/“.
- Hier lassen sich Gruppen mit klassischen Unix-Befehlen wie „mkdir“, „rmdir“ und „mv“ anlegen, entfernen oder umbenennen.
- Um Prozesse zu Gruppen und Subsystemen hinzuzufügen, können die PIDs der Task per „echo“ oder „printf“ in entsprechende Dateien geschrieben werden.
- Auf gleiche Weise lassen sich Limits setzen.
- Bequemer ist die Verwaltung per systemd oder libcgroup.
- Beide liefern Befehle für den Umgang mit cgroups, wie systemd-cgls, systemd-run, systemd-cgtop respektive cgcreate, cgexec und cgclassify.
- Des Weiteren lassen sich dauerhafte Kontrollgruppen mit Konfigurationsdateien wie /etc/cgconfig.conf oder Systemd-Unit-Files anlegen.
- Sie können für ihre Anwendungen, Systemdienste oder Software-Container Unit-Files mit Voreinstellungen anbieten.
Einsatzbereiche von Control Groups
- Cgroups lösen auf einheitliche Weise eine ganze Reihe unterschiedlicher Probleme.
- Auf privaten PCs oder betrieblichen Workstations lassen sich rechen- und speicherintensive Programme wie Webbrowser, Computer-Algebra-Systeme oder wissenschaftliche Simulationsanwendungen besser kontrollieren.
- Ebenso ermöglichen sie eine präzise Verteilung der knappen Ressourcen von Smart-Devices, IoT-Geräten und anderen Embedded Devices.
- Zur vollen Entfaltung kommen Kontrollgruppen bei Servern und Container-Virtualisierungen.
- Oft laufen mehrere Dienste wie Webserver, Datenbanken und Applikationsserver auf einem System, und bei virtuellen Hosting-Paketen teilen sich mehrere User dieselbe Hardware.
- Hier braucht es heute mehr als die rudimentären oder verschwenderischen Methoden der Isolierung und Ressourcen-Verteilung durch chroot-cages und nice respektive virtuelle Maschinen.
- Kontrollgruppen liefern ein fein granuliertes System für die Vergabe und Überwachung verschiedener Betriebsmittel.
- Mithilfe der Accounting-Funktion lassen sich Tarife auf Basis der verbrauchten Ressourcen bei virtuellen Servern und SaaS-Systemen implementieren.
- Control Groups können mit Kernel-Namespaces, Capabilities und Sicherheitserweiterungen wie SELinux oder AppArmor kombiniert werden.
- Obwohl die daraus resultierende Isolation weniger strikt ist als bei vollständiger Virtualisierung, reicht sie in vielen Fällen aus.
- Container-Technologien wie Docker, Snap, LXC und libvirt basieren alle auf dieser Kombination.