Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

Chapitre 2. Utiliser les groupes de contrôle

La plus facile manière de travailler avec les groupes de contrôle est d'installer le paquetage libcgroup, qui contient un certain nombre d'utilitaires en ligne de commande qui sont liés aux groupes de contrôle et à leurs pages man associées. Il est possible de monter des hiérarchies et de définir des paramètres de groupes de contrôle (de manière non-persistante) à l'aide de commandes shell et d'utilitaires disponibles sur tout système. Cependant, utiliser les utilitaires fournis par libcgroup simplifie le processus et étend vos possibilités. Ainsi, ce guide se concentre principalement sur les commandes de libcgroup. Dans la plupart des cas, nous avons inclut les commandes shell équivalentes pour aider à décrire le mécanisme sous-jacent. Nous recommandons cependant d'utiliser les commandes libcgroup quand possible.

Note

Pour utiliser les groupes de contrôle, commencez par vous assurer que le paquetage libcgroup est installé sur votre système en exécutant la commande suivante en tant que super-utilisateur :
~]# yum install libcgroup

2.1. Le service cgconfig

Le service cgconfig, installé avec le paquetage libcgroup, fourni un moyen commode de créer des hiérarchies, d'attacher des sous-systèmes aux hiérarchies et de gérer les groupes de contrôle dans celles-ci. Nous recommandons d'utiliser cgconfig pour gérer les hiérarchies et les groupes de contrôle sur votre système.
Le service cgconfig n'est pas démarré par défaut sur Red Hat Enterprise Linux 6. Lorsque vous lancez le service avec chkconfig, il lit le fichier de configuration du groupe de contrôle — /etc/cgconfig.conf. Les groupes de contrôle sont ainsi recréés d'une session à l'autre et deviennent persistants. Selon le contenu du fichier de configuration, cgconfig peut créer des hiérarchies, monter les systèmes de fichiers nécessaires, créer des groupes de contrôle, et définir les paramètres de sous-système pour chaque groupe.
Le fichier par défaut /etc/cgconfig.conf, qui est installé avec le paquetage libcgroup crée et monte une hiérarchie individuelle pour chaque sous-système et attache les sous-systèmes à ces hiérarchies.
Si vous arrêtez le service cgconfig (avec la commande service cgconfig stop), celui-ci démontera toutes les hiérarchies qu'il avait monté.

2.1.1. Le fichier cgconfig.conf

Le fichier /etc/cgconfig.conf contient deux principaux types d'entrées — mount et group. Les entrées « mount » créent et montent les hiérarchies en tant que systèmes de fichiers virtuels et attachent les sous-systèmes à ces hiérarchies. Les entrées « mount » sont définies à l'aide de la syntaxe suivante :
mount {
    <controller> = <path>;
    …
}
Voir l'Exemple 2.1, « Création d'une entrée « mount » » pour un exemple d'utilisation.

Exemple 2.1. Création d'une entrée « mount »

L'exemple suivant crée une hiérarchies pour le sous-système cpuset :
mount {
    cpuset = /cgroup/cpu;
}
équivaut aux commandes shell :
~]# mkdir /cgroup/cpu
~]# mount -t cgroup -o cpu cpu /cgroup/cpu
Les entrées « group » créent des groupes de contrôle et définissent les paramètres des sous-systèmes. Les entrées « group » sont définies à l'aide de la syntaxe suivante :
group <name> {
    [<permissions>]
    <controller> {
        <param name> = <param value>;
        …
    }
    …
}
Remarquez que la section permissions est optionnelle. Pour définir les permissions pour une entrée « group », veuillez utiliser la syntaxe suivante :
perm {
    task {
        uid = <task user>;
        gid = <task group>;
    }
    admin {
       uid = <admin name>;
       gid = <admin group>;
    }
}
Voir l'Exemple 2.2, « Création d'une entrée « group » » pour un exemple d'utilisation :

Exemple 2.2. Création d'une entrée « group »

L'exemple suivant crée un groupe de contrôle pour les démons sql, avec des permissions pour les utilisateurs faisant partie du groupe sqladmin afin d'ajouter des tâches au groupe de contrôle et pour l'utilisateur root afin de modifier les paramètres de sous-système :
group daemons/sql {
    perm {
        task {
            uid = root;
            gid = sqladmin;
        } admin {
            uid = root;
            gid = root;
        }
    } cpu {
        cpu.shares = 100;
    }
}
Lorsqu'elles sont combinées avec l'exemple de l'entrée « mount » dans l'Exemple 2.1, « Création d'une entrée « mount » », les commandes shelle équivalentes sont :
~]# 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

Note

Vous devez redémarrer le service cgconfig pour que les changements dans /etc/cgconfig.conf prennent effet :
~]# service cgconfig restart
Lorsque vous installez le paquetage libcgroup, un exemple de fichier de configuration est écrit sur /etc/cgconfig.conf. Les symboles dièse ('#'), se trouvant au début de chaque ligne en font des commentaires et les rendent invisibles au service cgconfig.