Red Hat Training

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

Chapitre 3. Sous-systèmes et paramètres réglables

Les sous-systèmes sont des modules du noyau prenant en charge les groupes de contrôle (cgroups). Il s'agit typiquement de contrôleurs de ressources qui allouent différents niveaux de ressources système à différents groupes de contrôle. Cependant, les sous-systèmes pourraient être programmés pour toute autre interaction avec le noyau si le besoin de traiter les divers groupes de processus différemment existe. L'interface de programmation (API) servant à développer de nouveaux sous-systèmes est documentée dans cgroups.txt dans la documentation du noyau qui est installée sur /usr/share/doc/kernel-doc-kernel-version/Documentation/cgroups/ (fourni par le paquetage kernel-doc). La version la plus récente de la documentation des groupes de contrôle est disponible en ligne à l'adresse suivante : http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt. Remarquez cependant que les fonctionnalités décrites dans les documents les plus récents pourraient ne pas correspondre à celles qui sont disponibles dans le noyau installé sur votre système.
Les objets d'état qui contiennent les paramètres de sous-système pour un groupe de contrôle (cgroup) sont représentés en tant que pseudofichiers dans le système de fichiers virtuel du groupe de contrôle. Ces pseudofichiers peuvent être manipulés à l'aide de commandes shell ou des appels système équivalents. Par exemple, cpuset.cpus est un pseudofichier qui spécifie à quels CPUs un groupe de contrôle à l'autorisation d'accès. Si /cgroup/cpuset/webserver est un groupe de contrôle pour le serveur web exécuté sur un système et que nous exécutons la commande suivante :
~]# echo 0,2 > /cgroup/cpuset/webserver/cpuset.cpus
La valeur 0,2 est écrite sur le pseudofichier cpuset.cpus et limite ainsi toutes les tâches dont les PID sont répertoriés sur /cgroup/cpuset/webserver/tasks afin d'uniquement utiliser CPU 0 et CPU 2 sur le système.

3.1. blkio

Le sous-système Block I/O (blkio) surveille et contrôle l'accès des tâches de groupes de contrôle aux E/S sur des périphériques blocs. L'écriture de valeurs sur certains de ces pseudo-fichiers limite l'accès ou la bande passante, la lecture des valeurs de certains de ces pseudos-fichiers fournit des informations sur les opérations d'E/S.
blkio.weight
spécifie la proportion relative (poids) de l'accès de Block I/O disponible par défaut à un groupe de contrôle dans une gamme de 100 à 1000. Cette valeur est remplacée par le paramètre blkio.weight_device pour des périphériques spécifiques. Par exemple, pour assigner un poids par défaut de 500 à un groupe de contrôle pour accéder aux périphériques blocs, exécutez :
echo 500 > blkio.weight
blkio.weight_device
spécifie la proportion relative (poids) de l'accès des E/S à un groupe de contrôle sur des périphériques spécifiques dans la gamme de 100 à 1000. La valeur de ce paramètre remplace la valeur du paramètre blkio.weight pour des périphériques spécifiés. Les valeurs prennent le format majeur:mineur poids, où majeur et mineur sont des types de périphériques et des numéros de noeuds spécifiés dans les Périphériques alloués Linux, aussi connus sous le nom de Liste des périphériques Linux et disponible sur http://www.kernel.org/doc/Documentation/devices.txt. Par exemple, pour assigner un poids de 500 à un groupe de contrôle pour accéder à /dev/sda, exécutez :
echo 8:0 500 > blkio.weight_device
Dans la notation des Périphériques alloués Linux, 8:0 représente /dev/sda.
blkio.time
rapporte le moment auquel un groupe de contrôle possédait un accès d'E/S à des périphériques spécifiques. Les entrées possèdent trois champs : majeur, mineur et durée. Majeur et mineur sont des types de périphériques et des numéros de noeuds spécifiés dans les Périphériques alloués Linux et durée est la durée en millisecondes (ms).
blkio.sectors
rapporte le nombre de secteurs transférés depuis ou vers des périphériques spécifiques d'un groupe de contrôle. Les entrées possèdent trois champs : majeur, mineur et secteurs. Majeur et mineur sont des types de périphériques et des numéros de noeuds spécifiés dans les Périphériques alloués Linux et secteurs est le nombre de secteurs du disque.
blkio.io_service_bytes
rapporte le nombre d'octets transférés depuis ou vers des périphériques spécifiques par un groupe de contrôle. Les entrées possèdent quatre champs : majeur, mineur, opération et octets. Majeur et mineur sont les types de périphériques et des numéros de noeuds spécifiés dans les Périphériques alloués Linux, opération représente le type d'opération (lecture, écriture, sync ou async) et octets est le nombre d'octets transférés.
blkio.io_serviced
rapporte le nombre d'opérations d'E/S effectuées sur des périphériques spécifiques par un groupe de contrôle. Les entrées possèdent quatre champs : majeur, mineur, opération et octets. Majeur et mineur sont les types de périphériques et numéros de noeuds spécifiés dans les Périphériques alloués Linux, opération représente le type d'opération (lecture, écriture, sync ou async) et nombre représente le nombre d'opérations.
blkio.io_service_time
rapporte la totalité du temps pris entre l'envoi de la demande et l'achèvement de celle-ci pour des opérations d'E/S sur des périphériques spécifiques par un groupe de contrôle. Les entrées possèdent quatre champs : majeur, mineur, opération et octets. Majeur et mineur sont les types de périphériques et numéros de noeuds spécifiés dans les Périphériques alloués Linux, opération représente le type d'opération (lecture, écriture, sync, ou async) et durée représente la durée en nanosecondes (ns). La durée rapportée utilise des nanosecondes plutôt qu'une unité plus importante afin que ce rapport puisse être utile même lors de l'utilisation de périphériques SSD.
blkio.io_wait_time
rapporte le temps total attendu pour un service dans les files d'attente des opérations d'E/S sur des périphériques spécifiques d'un groupe de contrôle. Lorsque vous interprétez ce rapport, remarquez que :
  • le temps rapporté peut être plus important que la totalité du temps écoulé car le temps rapporté est le total cumulé des toutes les opérations d'E/S pour le groupe de contrôle plutôt que le temps que le groupe de contrôle a lui-même attendu pour les opérations d'E/S. Pour découvrir combien de temps le groupe en tant que tel a dû attendre, utilisez blkio.group_wait_time.
  • si queue_depth > 1 (sur le périphérique), alors la durée rapportée inclut uniquement le temps attendu jusqu'à ce que la requête soit envoyée au périphérique, et pas le temps attendu pour le service pendant que le périphériques effectuait de nouvelles commandes de requêtes.
Les entrées possèdent quatre champs : majeur, mineur, opération et octets. Majeur et mineur sont les types de périphériques et numéros de noeuds spécifiés dans les Périphériques alloués Linux, opération (lecture, écriture, sync ou async) et durée est la durée en nanosecondes (ns). La durée rapportée utilise des nanosecondes plutôt qu'une unité plus importante afin que ce rapport puisse être utile même pour des périphériques SSD.
blkio.io_merged
rapporte le nombre de requêtes BIOS fusionnées en requêtes pour des opérations d'E/S d'un groupe de contrôle. Les entrées possèdent deux champs : nombre et opération. Nombre est le nombre de requêtes et opération représente le type d'opération (lecture, écriture, sync, ou async).
blkio.io_queued
rapporte le nombre de requêtes en file d'attente pour des opérations d'E/S d'un groupe de contrôle. Les entrées possèdent deux champs : nombre et opération. Nombre est le nombre de requêtes et opération représente le type d'opération (lecture, écriture, sync ou async).
blkio.avg_queue_size
rapporte la taille moyenne des files d'attente pour des opérations d'E/S d'un groupe de contrôle sur la durée totale de l'existance du groupe. La taille de la file d'attente est échantillonnée chaque fois qu'une file d'attente de ce groupe de contrôle obtient une tranche de temps. Remarquez que ce rapport est uniquement disponible si CONFIG_DEBUG_BLK_CGROUP=y est installé sur le système.
blkio.group_wait_time
rapporte la durée totale (en nanosecondes — ns) qu'un groupe de contrôle a attendu une tranche de temps pour l'une de ses files d'attente. Le rapport est mis à jour à chaque fois qu'une file d'attente de ce groupe de contrôle obtient une tranche de temps. Ainsi, si vous lisez ce pseudo-fichier alors que le groupe de contrôle attend sa tranche de temps, le rapport ne contiendra pas le temps attendu pour l'opération se trouvant actuellement en file d'attente. Remarquez que ce rapport est uniquement disponible si CONFIG_DEBUG_BLK_CGROUP=y est installé sur le système.
blkio.empty_time
rapporte la durée totale (en nanosecondes — ns) qu'un groupe de contrôle a attendu sans requête en attente. Le rapport est mis à jour à chaque fois qu'une file d'attente de ce groupe de contrôle possède une requête en attente. Ainsi, si vous lisez ce pseudo-fichier alors que le groupe de contrôle ne possède pas de requêtes en attente, le rapport ne contiendra pas le temps attendu dans l'état actuel. Remarquez que ce rapport est uniquement disponible si CONFIG_DEBUG_BLK_CGROUP=y est installé sur le système.
blkio.idle_time
rapporte le temps total (en nanosecondes — ns) que le planificateur a passé à attendre un groupe de contrôle dans l'attente d'une meilleure requête que les requêtes se trouvant déjà dans des files d'attente ou provenant d'autres groupes. Le rapport est mis à jour à chaque fois qu'un groupe redevient actif. Ainsi, si vous lisez ce pseudo-fichier alors que le groupe de contrôle est inactif (idling), le rapport ne contiendra pas le temps passé à attendre dans l'état inactif (idling) actuel. Remarquez que ce rapport est uniquement disponible si CONFIG_DEBUG_BLK_CGROUP=y est installé sur le système.
blkio.dequeue
rapporte le nombre de fois que des requêtes d'opérations d'E/S d'un groupe de contrôle ont été retirées des files d'attente par des périphériques spécifiques. Les entrées possèdent trois champs : majeur, mineur et nombre. Majeur et mineur sont les types de périphérique et numéros de noeud spécifiés dans les Périphériques alloués Linux et nombre est le nombre de requêtes que le groupe a retiré de la file d'attente. Remarquez que ce rapport est uniquement disponible si CONFIG_DEBUG_BLK_CGROUP=y est installé sur le système.
blkio.reset_stats
réinitialise les statistiques enregistrées dans les autres pseudo-fichiers. Saisissez un entier sur ce fichier pour réinitialiser les statistiques de ce groupe de contrôle.