Product SiteDocumentation Site

Capitolo 1. Introduzione ai Control Group (Cgroups)

1.1. Come sono organizzati i Control Group
1.2. Relazione tra Sottosistemi, Gerarchie, Control Groups e Task
1.3. Implicazioni sulla gestione delle risorse
Fedora 16 fornisce un modo per gestire le risorse di sistema: control groups, denominati con la forma abbreviata cgroups, in questa guida. I cgroup permettono di allocare risorse—come tempo di CPU, memoria di sistema, banda di rete, o loro combinazioni—tra gruppi di task (processi), definiti dall'utente, in esecuzione nel sistema. E' possibile monitorare i cgroup configurati, vietare l'accesso ai cgroup a determinate risorse, ed anche riconfigurare dinamicamente i cgroup su un sistema in esecuzione. Il servizio cgconfig («control group config »), può essere configurato per avviarsi al boot e ristabilire i cgroup predefiniti, rendendoli persistenti al reboot.
Usando cgroup gli amministratori di sistema hanno un controllo più dettagliato sull'assegnazione, priorità, negazione, gestione e controllo delle risorse di sistema. Le risorse hardware possono essere suddivise tra task ed utenti, aumentandone l'efficienza globale.

1.1. Come sono organizzati i Control Group

I cgroup sono organizzati seguendo una gerarchia, come i processi, ed i cgroup figlio ereditano alcuni degli attributi dei rispettivi genitori. Tuttavia sono presenti alcune differenze tra i due modelli.

Il modello di processo Linux

Tutti i processi su un sistema Linux sono processi figlio di un genitore comune: il processo init, eseguito dal kernel al momento dell'avvio il quale a sua volta inizia altri processi (che a loro volta avviano i propri processi figlio). Poichè tutti i processi discendono da un unico genitore, il modello di processo Linux è costituito da un unica gerarchia o albero.
Inoltre, ogni processo Linux, ad eccezione di init, eredita l'ambiente (come la variabile PATH)[1] ed altri attributi (come i descrittori dei file aperti), del processo genitore.

Il modello Cgroup

I cgroups sono simili ai processi:
  • essi seguono una gerarchia, e
  • i cgroups figli, ereditano alcuni attributi del proprio cgroup genitore.
La differenza sostanziale è che diverse gerarchie di cgroups possono coesistere su un sistema. Se il modello di processo Linux è un albero singolo di processi, il modello cgroup presenta uno o più alberi di task (cioè processi), separati e scollegati tra loro.
Gerarchie multiple separate di cgroups sono necessarie poichè ogni gerarchia è collegata ad uno o più sottosistemi. Un sottosistema[2] rappresenta una singola risorsa, come ad esempio il tempo di CPU o la memoria. Fedora 16 fornisce nove sottosistemi di cgroup, elencati di seguito, in base al nome e alla funzione.
Sottosistemi disponibili in Fedora
  • blkio — questo sottosistema imposta i limiti sull'accesso input/output da e per i dispositivi a blocchi come ad esempio le unità fisiche (dischi, solid state, USB, ecc.).
  • cpu — questo sottosistema utilizza lo scheduler per fornire un accesso ai task del cgroup per la CPU.
  • cpuacct — questo sottosistema genera delle notifiche automatiche relative alle risorse della CPU usate dai task di un cgroup.
  • cpuset — questo sottosistema assegna le CPU individuali (su un sistema multicore) ed i nodi della memoria ai task in un cgroup.
  • devices — questo sottosistema permette o nega l'accesso ai dispositivi in base ai task presenti in un cgroup.
  • freezer — questo sottosistema sospende o ripristina i task in un cgroup.
  • memory — questo sottosistema imposta i limiti sull'utilizzo della memoria usata dai task in un cgroup e genera automaticamente le analisi sulle risorse della memoria utilizzata dagli stessi task.
  • net_cls — questo sottosistema etichetta i pacchetti di rete con un identificatore di classe (classid), in grado di permettere al traffic controller (tc) di Linux, di identificare i pacchetti originati da un particolare task del cgroup.
  • ns — Il sottosistema namespace.

I sottosistemi sono conosciuti anche come controllori di risorse

Nella terminologia usata in cgroup, come ad esempio nelle pagine man o nella documentazione del kernel, si può incontrare il termine resource controller o semplicemente controller. Entrambi i termini sono sinonimi di «sottosistema», e ciò deriva dal fatto che un sottosistema generalmente programma una risorsa o applica un limite ai cgroups nella gerarchia alla quale è collegato.
La definizione di sottosistema (resource controller) è una definizione generale: è qualcosa che agisce su un gruppo di task, cioè processi.


[1] Il processo genitore è in grado di alterare l'ambiente prima di passarlo al processo figlio.
[2] I sottosistemi possono essere chiamati anche controllori delle risorse, o più semplicemente controllori, nelle pagine man di libcgroup ed in altre documentazioni.