Capitolo 2. Utilizzo dei Control Groups
2.1. Il servizio cgconfig
Il servizio cgconfig
installato con il pacchetto libcgroup-tools, fornisce un modo conveniente per creare gerarchie, allegare alle stesse i sottosistemi e gestire i cgroup al loro interno. Si raccomanda di usare cgconfig per gestire gerarchie e cgroup nel sistema.
Il servizio cgconfig
non è avviato, per impostazione predefinita, su Fedora 16. All'avvio del servizio con chkconfig
, esso legge il file di configurazione di cgroup — /etc/cgconfig.conf
. Quindi i cgroup vengono ricreati ad ogni sessione diventando così persistenti. A seconda del contenuto del file di configurazione, cgconfig è in grado di creare gerarchie, montare i file system necessari, creare cgroup ed impostare i parametri di sottosistemi per ogni gruppo.
Il file predefinito /etc/cgconfig.conf
installato con il pacchetto libcgroup-tools, crea e monta una gerarchia individuale per ogni sottosistema, e collega i sottosistemi alle sudddette gerarchie.
Se si interrompe il servizio cgconfig
(con il comando systemctl stop cgconfig.service
), allora si smontano tutte le gerarchie montate.
2.1.1. Il file /etc/cgconfig.conf
Il file /etc/cgconfig.conf
contiene due voci principali — mount e group. Le voci di mount creano e montano le gerarchie come file system virtuali, collegando i sottosistemi a queste gerarchie. Per definire le voci di mount usare la seguente sintassi:
mount {
<controller>
= <path>
;
…
}
Esempio 2.1. Creare una voce di mount
Il seguente esempio crea una gerarchia per il sottosistema cpuset
:
mount {
cpuset = /cgroup/red;
}
l'equivalente dei comandi di shell:
~]# mkdir /cgroup/red
~]# mount -t cgroup -o cpuset red /cgroup/red
Le voci di group creano i cgroup ed impostano i parametri di sottosistema. Esse vengono definite usando la seguente sintassi:
group <nome>
{
[<permessi>
]
<controller>
{
<nome param>
= <valore param>
;
…
}
…
}
Da notare che la sezione permessi
è facoltativa. Per definire i permessi per una voce del gruppo, usare la seguente sintassi:
perm {
task {
uid = <task user>
;
gid = <task group>
;
}
admin {
uid = <nome admin>
;
gid = <gruppo admin>
;
}
}
Esempio 2.2. Creare una voce di group
Il seguente esempio crea un cgroup per i demoni SQL, con permessi per gli utenti nel gruppo sqladmin
, per aggiungere task al gruppo cgroup e l'utente root
per modificare i parametri di sottosistema:
group daemons/sql {
perm {
task {
uid = root;
gid = sqladmin;
} admin {
uid = root;
gid = root;
}
} cpu {
cpu.shares = 100;
}
}
~]# mkdir -p /cgroup/cpu/daemons/sql
~]# chown root:root /cgroup/cpu/daemons/sql/*
~]# chown root:sqladmin /cgroup/cpu/daemons/sql/tasks
~]# echo 100 > /cgroup/cpu/daemons/sql/cpu.shares
È necessario riavviare il servizio
cgconfig
per rendere effettive le modifiche implementate in
/etc/cgconfig.conf
:
~]# systemctl restart cgconfig.service
Durante l'installazione del pacchetto libcgroup-tools, un file di configurazione campione viene scritto su /etc/cgconfig.conf
. I caratteri cancelletto (#
), all'inizio di ogni riga commentano la riga stessa e la rendono invisibile al servizio cgconfig
.