Was sind cgroups?

Aus Xinux Wiki
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.

Quelle