Chapitre 1. Introduction aux groupes de contrôle
Red Hat Enterprise Linux 6 offre une nouvelle fonctionnalité du noyau : les groupes de contrôle (de l'anglais, « Control Groups »), aussi appelés cgroups dans ce guide. Les groupes de contrôle permettent d'allouer des ressources — telles que le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources — parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système. Vous pouvez surveiller les groupes de contrôle que vous avez configuré, leur refuser d'accéder à certaines ressources et même les reconfigurer dynamiquement sur un système en cours d'exécution. Le service
cgconfig
(« control group config ») peut être configuré pour être lancé lors du démarrage et rétablir vos groupes de contrôle prédéfinis, les rendant ainsi persistants lors de multiples démarrages.
En utilisant les groupes de contrôle, les administrateurs système obtiennent un contrôle précis sur l'allocation, la priorisation, l'interdication, la gestion et la surveillance des ressources système. Les ressources matérielles peuvent être intelligemment divisées entre les tâches et les utilisateurs, améliorant ainsi l'efficacité générale.
1.1. Organisation des groupes de contrôle
Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus, et les groupes de contrôle enfants héritent de certains des attributs de leurs parents. Il existe cependant des différences entre les deux modèles.
Modèle du processus Linux
Tous les processus sur un système Linux sont des processus enfants d'un parent commun : le processus
init
, qui est exécutépar le noyau lors du démarrage et démarre d'autres processus (qui pourraient démarrer des processus enfants à leur tour). Comme tous les processus proviennent d'un seul parent, le modèle du processus Linux est consiste d'une hiérarchie ou arborescence unique.
En outre, tous les processus Linux, à l'exception de
init
, héritent de l'environnement (comme la variable PATH)[1] et de certains autres attributs (comme les descripteurs d'ouverture de fichiers) de leur processus parent.
Modèle des groupes de contrôle
Les groupes de contrôle sont similaires aux processus car :
- ils sont organisés hiérarchiquement
- les groupes de contrôle enfants héritent de certains attributs de leur groupe de contrôle parent.
La différence fondamentale est que de nombreuses et diverses hiérarchies de groupes de contrôle peuvent exister simultanément sur un système. Le modèle du processus Linux est une unique arborescence de processus, et le modèle des groupes de contrôle est une ou plusieurs arborescences de tâches (ou de processus) séparées et déconnectées.
De multiples hiérarchies séparées de groupes de contrôle sont nécessaires car chaque hiérarchie est attachée à un ou plusieurs sous-système. Un sous-système[2] représente une seule ressource, comme le temps processeur ou la mémoire. Red Hat Enterprise Linux 6 fournit neuf sous-systèmes de groupes de contrôle, répertoriés ci-dessous par nom et par fonction.
Sous-systèmes disponibles dans Red Hat Enterprise Linux
blkio
— ce sous-système établit des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs tels que des lecteurs physiques (disques dur, disques SSD, lecteurs USB, etc.).cpu
— ce sous-système utilise le planificateur pour fournir aux tâches des groupes de contrôle accès au CPU.cpuacct
— ce sous-système génère des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle.cpuset
— ce sous-système assigne des CPU individuels (sur un système multicoeur) et des noeuds de mémoire à des tâches dans un groupe de contrôle.devices
— ce sous-système autorise ou refuse l'accès des tâches aux périphériques dans un groupe de contrôle.freezer
— ce sous-système suspend ou réactive les tâches dans un groupe de contrôle.memory
— ce sous-système établit les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et génère des rapports automatiques sur les ressources mémoire utilisées par ces tâches.net_cls
— ce sous-système repère les paquets réseau avec un identifiant de classe (classid) qui permet au contrôleur de trafic Linux (tc
) d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle.ns
— le sous-système namespace.
Note
Vous pouvez rencontrer le terme contrôleur de ressources ou plus simplement contrôleur dans la littérature concernant les groupes de contrôle, comme dans les pages man ou dans la documentation du noyau. Ces deux termes sont des synonymes de « sous-système » et proviennent du fait que typiquement, un sous-système planifie une ressource ou applique une limite aux groupes de contrôle dans la hiérarchie à laquelle il est attaché.
La définition d'un sous-système (ou contrôleur de ressources) est assez générale : il s'agit de quelquechose agissant sur un groupe de tâches, c'est-à-dire des processus.