Definition „Control Groups“ Was sind cgroups?

Autor / Redakteur: MirkoK / Stephan Augsten

Control Groups oder kurz 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.

Firma zum Thema

Cgroups wurden für das Ressourcen-Management und die Prozess-Isolation unter Linux eingeführt.
Cgroups wurden für das Ressourcen-Management und die Prozess-Isolation unter Linux eingeführt.
(Bild: chuttersnap / Unsplash)

Linux brachte von Anfang an verschiedene Mechanismen mit, um die Nutzung von System-Ressourcen durch Prozesse zu kontrollieren. Doch Werkzeuge und Konfigurationsdateien wie nice, ionice, cpulimit und /etc/security/limits.conf funktionieren uneinheitlich und sind heute nicht mehr flexibel genug.Moderne Cloud-Plattformen mit Techniken wie Containerisierung und virtuelle Server erfordern leistungsfähigere Methoden für Ressource-Management und Prozess-Isolation.

Cgroups wurden 2006 von einigen Programmierern bei Google entwickelt, um Lösungen für eine Reihe verschiedener Anwendungsfälle zu liefern. Seit der im Januar 2008 erschienenen Kernel-Version 2.6.24 sind cgroups fester Bestandteil des Linux-Kernels.

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. Letzteres ist auch für Application-Developer interessant. 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.

(ID:47000027)