Login


 
Newsletter
Werbung
Do, 14. Oktober 2010, 15:00

Ressourcen-Verwaltung mit Control Groups (cgroups)

Die sogenannten cgroups (Control Groups) dienen der Gruppierung von Prozessen. Dies ermöglicht dem Betriebssystem, einer Gruppe von definierten Prozessen ausgewählte Ressourcen zuzuweisen. Dabei werden auch Hierarchien unterstützt. Dieser Artikel zeigt an praktischen Beispielen, wie man cgroups nutzbringend verwendet.

Memory-Subsystem

Das Memory-Subsystem wurde früher in einigen Distributionen absichtlich standardmäßig abgeschaltet oder erst gar nicht im Kernel mitgebaut. Grund hierfür waren anfängliche Skalierungsprobleme, die ab 32 CPUs spürbar wurden und das System ab 64 CPUs nahezu unbrauchbar machten. Diese Probleme gehören allerdings alle der Vergangenheit an. In aktuellen Kernelversionen und Distributionen ist dieses Problem bereits behoben und das System aktiviert und nutzbar.

Das Memory-Subsystem liefert ausführliche Statistiken über den Speicherverbrauch einer Gruppe aus Prozessen, welche sonst mühsam gesammelt werden müssten. So kann unter anderem mit dem Subsystem-Eintrag memory.max_usage_in_bytes auch der Speicher-Spitzenverbrauch einer Control Group gemessen werden. Sehr wertvoll ist auch die Funktion des Memory-Subsystems, einer Gruppe gnadenlos ein Speicherlimit zu setzen. Dies ermöglicht es, speicherhungrige Dienste vom restlichen System zu isolieren. In Verbindung mit dem Group CPU Scheduler ist es sogar möglich, Fork-Bomben-artige Prozesse erfolgreich zu isolieren, ohne die restlichen Gruppen unbrauchbar zu machen oder gar zu beeinflussen. Hierzu wird einfach das entsprechende Limit in den Subsystem-Eintrag memory.limits_in_bytes geschrieben:

# mount -t cgroup -o memory nodev /cgroup
# mkdir /cgroup/students
# cd /cgroup/students
# cat memory.max_usage_in_bytes 
0
# echo 800M > memory.max_usage_in_bytes 
# for n in `cat ../tasks`; do echo $n > tasks ; done
# cat memory.usage_in_bytes 
569344
# cat memory.max_usage_in_bytes 
569344
# cat memory.stat
cache 0
rss 237568
mapped_file 0
pgpgin 437
pgpgout 379
inactive_anon 0
active_anon 180224
inactive_file 0
active_file 0
unevictable 0
hierarchical_memory_limit 9223372036854775807
total_cache 0
total_rss 237568
total_mapped_file 0
total_pgpgin 437
total_pgpgout 379
total_inactive_anon 0
total_active_anon 180224
total_inactive_file 0
total_active_file 0
total_unevictable 0

Dieses Beispiel zeigt, dass die leere Gruppe students keinen Speicher bisher verbraucht hat. Anschließend wird das Speicherlimit für diese Gruppe auf 800 Megabyte gesetzt und sämtliche Prozesse aus der Root-Gruppe in diese Gruppe verschoben. Der aktuelle Speicherverbrauch all dieser Prozesse entspricht zugleich der Spitzenlast des bisher gemessenen Speicherverbrauchs. In der Subsystem-Pseudodatei memory.stat können sehr detaillierte Informationen über den aktuellen Speicherverbrauch der Gruppe abgefragt werden.

Kommentare (Insgesamt: 18 || Alle anzeigen || Kommentieren )
Re[4]: Untergruppen erstellen? (volvic, Di, 9. November 2010)
Re[3]: Untergruppen erstellen? (sprudel, So, 31. Oktober 2010)
Re[2]: Untergruppen erstellen? (volvic, Mi, 27. Oktober 2010)
Re: Untergruppen erstellen? (sprudel, Fr, 22. Oktober 2010)
Untergruppen erstellen? (volvic, Do, 21. Oktober 2010)
Pro-Linux
Gewinnspiel
Neue Nachrichten
Werbung