Capitolo 1. Introduzione ai Control Group (Cgroups)
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)[] 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[] 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.
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.