Kapitel 3. Subsysteme und anpassbare Parameter
Subsysteme sind Kernel-Module, die sich der Kontrollgruppen bewusst sind. Typischerweise sind dies Ressourcen-Controller, die verschiedenen Kontrollgruppen in unterschiedlichem Umfang Systemressourcen zuweisen. Subsysteme könnten jedoch für jede andere Interaktion mit dem Kernel programmiert werden, bei der der Bedarf besteht, verschiedene Gruppen von Prozessen unterschiedlich zu behandeln. Das Application Programming Interface (auch kurz API oder Programmierschnittstelle genannt) zur Entwicklung neuer Subsysteme ist in
cgroups.txt
in der Kernel-Dokumentation dokumentiert, die auf Ihrem System unter /usr/share/doc/kernel-doc-kernel-version/Documentation/cgroups/
installiert ist (geliefert vom kernel-doc-Paket). Die neueste Version der Kontrollgruppendokumentation steht zudem online unter http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt zur Verfügung. Beachten Sie jedoch, dass sich die in der aktuellsten Dokumentation genannten Features unter Umständen von jenen unterscheiden, die in dem Kernel auf Ihrem System zur Verfügung stehen.
Statusobjekte, die Subsystemparameter für eine Kontrollgruppe beinhalten, werden als Pseudodateien innerhalb des virtuellen Dateisystems der Kontrollgruppe dargestellt. Diese Pseudodateien können mithilfe von Shell-Befehlen, oder ihren entsprechenden Systemaufrufen bearbeitet werden. So ist
cpuset.cpus
beispielsweise eine Pseudodatei, die definiert, auf welche CPUs eine Kontrollgruppe zugreifen darf. Angenommen, /cgroup/cpuset/webserver
ist eine Kontrollgruppe für den Webserver, der auf einem System läuft, und wir führen den folgenden Befehl aus:
~]# echo 0,2 > /cgroup/cpuset/webserver/cpuset.cpus
Der Wert
0,2
wird dadurch in die cpuset.cpus
-Pseudodatei geschrieben und schränkt daher jegliche Aufgaben, deren PIDs in /cgroup/cpuset/webserver/tasks
aufgeführt sind, so ein, dass nur CPU 0 und CPU 2 auf dem System verwendet werden dürfen.
3.1. blkio
Das Block-I/O-Subsystem (
blkio
) überwacht und steuert den I/O-Zugriff auf Blockgeräte von Aufgaben in Kontrollgruppen. Werden in einige dieser Pseudodateien Werte geschrieben, schränkt dies den Zugriff oder die Bandbreite ein; werden von einigen dieser Pseudodateien Werte gelesen, liefert dies Informationen über I/O-Operationen.
- blkio.weight
- spezifiziert den relativen Anteil (das Gewicht) von Block I/O-Zugriff, der einer Kontrollgruppe standardmäßig zur Verfügung steht, im Bereich
100
bis1000
. Dieser Wert wird für bestimmte Geräte durch denblkio.weight_device
-Parameter außer Kraft gesetzt. Um einer Kontrollgruppe beispielsweise ein standardmäßiges Gewicht von500
für den Zugriff auf Blockgeräte zuzuweisen, führen Sie Folgendes aus:echo 500 > blkio.weight
- blkio.weight_device
- spezifiziert den relativen Anteil (das Gewicht) von Block I/O-Zugriff, der einer Kontrollgruppe standardmäßig für bestimmte Geräte zur Verfügung steht, im Bereich
100
bis1000
. Der Wert dieses Parameters setzt den Wert desblkio.weight
-Parameters für die angegebenen Geräte außer Kraft. Werte werden im Format major:minor weight angegeben, wobei major und minor die in Linux Allocated Devices (auch Linux-Geräteliste genannt, verfügbar unter http://www.kernel.org/doc/Documentation/devices.txt) spezifizierten Gerätetypen und Knotennummern sind. Um einer Kontrollgruppe beispielsweise ein Gewicht von500
für den Zugriff auf/dev/sda
zuzuweisen, führen Sie Folgendes aus:echo 8:0 500 > blkio.weight_device
In der Linux Allocated Devices Notation steht8:0
für/dev/sda
. - blkio.time
- zeigt die Zeit an, die eine Kontrollgruppe I/O-Zugriff auf bestimmte Geräte hatte. Jeder Eintrag umfasst drei Felder: major, minor und time. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. time ist die Zeitspanne in Millisekunden (ms).
- blkio.sectors
- zeigt die Anzahl an Sektoren an, die auf bestimmte Geräte bzw. von bestimmten Geräten durch eine Kontrollgruppe übertragen wurden. Jeder Eintrag umfasst drei Felder: major, minor und sectors. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. sectors ist die Anzahl der Plattensektoren.
- blkio.io_service_bytes
- zeigt die Anzahl an Bytes an, die auf bestimmte Geräte bzw. von bestimmten Geräten durch eine Kontrollgruppe übertragen wurden. Jeder Eintrag umfasst vier Felder: major, minor, operation und bytes. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. operation steht für die Art der Operation (
read
,write
,sync
oderasync
) und bytes ist die Anzahl der übertragenen Bytes. - blkio.io_serviced
- zeigt die Anzahl an I/O-Operationen an, die auf bestimmten Geräten von einer Kontrollgruppe durchgeführt wurden. Jeder Eintrag umfasst vier Felder: major, minor, operation und number. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. operation steht für die Art der Operation (
read
,write
,sync
oderasync
) und number ist die Anzahl der Operationen. - blkio.io_service_time
- zeigt die Zeitspanne zwischen der Absendung einer Anfrage und deren Abschluss bei I/O-Operationen an, die auf bestimmten Geräten von einer Kontrollgruppe durchgeführt wurden. Jeder Eintrag umfasst vier Felder: major, minor, operation und time. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. operation steht für die Art der Operation (
read
,write
,sync
oderasync
) und time ist die Zeitspanne in Nanosekunden (ns). Die Zeit wird in Nanosekunden angegeben statt in größeren Einheiten, damit dieser Bericht auch für Solid-State-Geräte aussagekräftig ist. - blkio.io_wait_time
- zeigt die Zeitspanne an, die I/O-Operationen auf bestimmten Geräten von Kontrollgruppen auf den Service der Scheduler-Queues warten. Wenn Sie diesen Bericht interpretieren, beachten Sie Folgendes:
- Die ausgewiesene Zeit kann größer sein als die Zeit, die insgesamt vergangen ist, da die ausgewiesene Zeit die kumulierte Zeit aller I/O-Operationen für die Kontrollgruppe darstellt, nicht die Zeit, die die Kontrollgruppe selbst auf I/O-Operationen gewartet hat. Um die Zeit herauszufinden, die die Gruppe als Ganzes gewartet hat, verwenden Sie
blkio.group_wait_time
. - Falls das Gerät eine
queue_depth
> 1 hat, beinhaltet die ausgewiesene Zeit nur die Zeit, bis die Anfrage zum Gerät gesendet wird, nicht die Wartezeit, während das Gerät die Anfragen neu ordnet.
Jeder Eintrag umfasst vier Felder: major, minor, operation, and bytes. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. operation steht für die Art der Operation (read
,write
,sync
oderasync
) und time ist die Zeitspanne in Nanosekunden (ns). Die Zeit wird in Nanosekunden angegeben statt in größeren Einheiten, damit dieser Bericht auch für Solid-State-Geräte aussagekräftig ist. - blkio.io_merged
- zeigt die Anzahl an BIOS-Anfragen an, die in Anfragen für I/O-Operationen von einer Kontrollgruppe zusammengeführt werden. Jeder Eintrag umfasst zwei Felder: number und operation. number ist die Anzahl der Anfragen und operation steht für die Art der Operation (
read
,write
,sync
oderasync
). - blkio.io_queued
- zeigt die Anzahl an Anfragen an, die in der Warteschlange stehen für I/O-Operationen von einer Kontrollgruppe. Jeder Eintrag umfasst zwei Felder: number und operation. number ist die Anzahl der Anfragen und operation steht für die Art der Operation (
read
,write
,sync
oderasync
). - blkio.avg_queue_size
- zeigt die durchschnittliche Größe der Warteschlange für I/O-Operationen von einer Kontrollgruppe an, über die Gesamtdauer der Existenz der Gruppe hinweg. Die Größe der Warteschlange wird jedes Mal ermittelt, wenn eine Warteschlange für diese Kontrollgruppe ein Zeitfenster zugeteilt bekommt. Beachten Sie, dass dieser Bericht nur verfügbar ist, falls
CONFIG_DEBUG_BLK_CGROUP=y
auf dem System gesetzt ist. - blkio.group_wait_time
- zeigt die Gesamtdauer (in Nanosekunden — ns) an, die eine Kontrollgruppe auf die Zuteilung eines Zeitfensters für eine ihrer Warteschlangen wartet. Der Bericht wird jedes Mal aktualisiert, wenn eine Warteschlange für diese Kontrollgruppe ein Zeitfenster erhält. Falls Sie also diese Pseudodatei lesen, während die Kontrollgruppe auf ein Zeitfenster wartet, enthält der Bericht nicht die Zeit, die auf die Operation gewartet wird, die derzeit in der Warteschlange steht. Beachten Sie, dass dieser Bericht nur verfügbar ist, falls
CONFIG_DEBUG_BLK_CGROUP=y
auf dem System gesetzt ist. - blkio.empty_time
- zeigt die Gesamtdauer (in Nanosekunden — ns) an, die eine Kontrollgruppe ohne jegliche ausstehende Anfragen ist. Der Bericht wird jedes Mal aktualisiert, wenn eine Warteschlange für diese Kontrollgruppe eine ausstehende Anfrage hat. Falls Sie also diese Pseudodatei lesen, während die Kontrollgruppe keine ausstehende Anfragen hat, enthält der Bericht nicht die Zeit, die in diesem Moment im leeren Zustand verbracht wird. Beachten Sie, dass dieser Bericht nur verfügbar ist, falls
CONFIG_DEBUG_BLK_CGROUP=y
auf dem System gesetzt ist. - blkio.idle_time
- zeigt die Gesamtdauer (in Nanosekunden — ns) an, die der Scheduler für eine Kontrollgruppe untätig bleibt, während er auf eine bessere Anfrage wartet als jene, die bereits in anderen Warteschlangen stehen oder die von anderen Kontrollgruppen stammen. Der Bericht wird jedes Mal aktualisiert, wenn eine Gruppe nicht länger untätig ist. Falls Sie also diese Pseudodatei lesen, während die Kontrollgruppe untätig ist, enthält der Bericht nicht die Zeit, die derzeit untätig verbracht wird. Beachten Sie, dass dieser Bericht nur verfügbar ist, falls
CONFIG_DEBUG_BLK_CGROUP=y
auf dem System gesetzt ist. - blkio.dequeue
- zeigt an, wie oft Anfragen für I/O-Operationen von einer Kontrollgruppe von bestimmten Geräten aus der Warteschlange entfernt wurden. Jeder Eintrag umfasst drei Felder: major, minor und number. major und minor sind die Gerätetypen und Knotennummern, die in den Linux Allocated Devices definiert sind. number ist die Anzahl der Anfragen der Gruppe, die aus der Warteschlange entfernt wurden. Beachten Sie, dass dieser Bericht nur verfügbar ist, falls
CONFIG_DEBUG_BLK_CGROUP=y
auf dem System gesetzt ist. - blkio.reset_stats
- setzt die in anderen Pseudodateien aufgezeichneten Statistiken zurück. Schreiben Sie einen ganzzahligen Wert in diese Datei, um die Statistiken für diese Kontrollgruppe zurückzusetzen.