Maison >Opération et maintenance >Nginx >Cinq minutes de plaisir technique | Une brève analyse des règles hiérarchiques du groupe Linux
cgroup est l'abréviation de Control Groups. Il s'agit d'une sorte de ressources physiques (telles que : CPU, mémoire, périphérique IO) fournies par le noyau Linux. (peut contrôler des processus ou des groupes de processus, etc.) des mécanismes de restriction, d'isolement et de statistiques. La gestion de l'espace utilisateur de cgroup est réalisée via le système de fichiers cgroup. Grâce au système de fichiers virtuel de Linux, les détails du système de fichiers sont masqués et l'utilisateur réalise l'utilisation de cette fonction via les fichiers de contrôle correspondants.
cgroup a été introduit par Google pendant la période du noyau 2.6. Il constitue la base technique de la virtualisation des ressources dans le noyau Linux et la pierre angulaire technique des conteneurs LXC (Linux Containers) et Docker. Il existe les concepts associés suivants dans cgroup :
Partie 02 cgroup sous-système
Le sous-système est liées à la version du noyau Au fur et à mesure que le noyau itère, les ressources qui peuvent être limité Il y en a aussi de plus en plus, incluant généralement les sous-systèmes suivants.
➤ blkio : Définissez des restrictions sur l'accès aux entrées/sorties pour bloquer les périphériques, tels que les périphériques physiques (disque, SSD, USB, etc.).
➤ cpu : Limiter l'utilisation du processeur du processus, impliquant l'allocation de tranches de temps de planification du processeur.
➤ cpuacct : Génère automatiquement un rapport CPU utilisé par les tâches du groupe de contrôle.
➤ cpuset : Allouez un processeur indépendant (système multicœur) et des nœuds de mémoire aux tâches du groupe de contrôle.
➤ appareils : Autoriser ou refuser aux tâches du groupe de contrôle l'accès à l'appareil.
➤ freezer : Suspendre ou reprendre des tâches dans un groupe de contrôle.
➤ mémoire : Définissez la limite de mémoire utilisée par les tâches dans un groupe de contrôle et générez automatiquement un rapport sur les ressources mémoire utilisées par ces tâches.
➤ net_cls : Le marquage des paquets réseau avec des identifiants de classe permet au programme de contrôle d'errance Linux d'identifier les paquets générés à partir de groupes de contrôle spécifiques.
➤ ns : sous-système d'espace de noms.
Combiné avec la hiérarchie cgroup (hiérarchie), il peut être compris comme un arbre. Chaque nœud de l'arborescence est un groupe de processus, et chacun. L'arbre sera associé à un associé à plusieurs sous-systèmes. Dans une arborescence, tous les processus du système Linux seront inclus, mais chaque processus ne peut appartenir qu'à un seul nœud (groupe de processus). Il peut y avoir de nombreuses arborescences de groupes de contrôle dans le système, et chaque arborescence est associée à un sous-système différent. Un processus peut appartenir à plusieurs arborescences, c'est-à-dire qu'un processus peut appartenir à plusieurs groupes de processus, mais ces groupes de processus sont associés à différents sous-systèmes. Actuellement, Linux peut créer jusqu'à douze arborescences de groupes de contrôle, et chaque arborescence est associée à un sous-système. Bien entendu, vous pouvez également créer une seule arborescence, puis associer cette arborescence à tous les sous-systèmes. Lorsqu'une arborescence de groupe de contrôle n'est associée à aucun sous-système, cela signifie que l'arborescence regroupe uniquement les processus. Quant à ce qu'il faut faire en fonction du regroupement, cela sera décidé par l'application elle-même. Systemd en est un exemple.
Il existe quatre règles de composition pour la hiérarchie, qui sont décrites comme suit :
Règle 1 : Une seule hiérarchie peut avoir un ou plusieurs sous-systèmes. Comme le montre la figure 1, le niveau /cpu_memory_cg configure deux sous-systèmes, processeur et mémoire, pour cgroup1 et cgroup2.
Figure 1 Règle de hiérarchie 1
Règle 2 : Si un sous-système est déjà attaché à un niveau, il ne peut pas être attaché à la structure d'un autre niveau. Comme le montre la figure 2, cpu_cg au niveau A gère d'abord le sous-système CPU, puis cpu_mem_cg au niveau B ne peut pas gérer le sous-système CPU.
Figure 2, règle de hiérarchie de groupe de contrôle 2
Règle 3 : Chaque fois qu'une nouvelle hiérarchie est créée sur un système, toutes les tâches du système sont initialement membres du groupe de contrôle par défaut (appelé groupe de contrôle racine) de cette hiérarchie. Pour toute hiérarchie unique créée, chaque tâche du système peut être un membre du groupe de contrôle dans cette hiérarchie. Une tâche peut appartenir à plusieurs groupes de contrôle, à condition que chacun de ces groupes de contrôle se trouve dans une hiérarchie de sous-système différente. Une fois qu'une tâche devient membre du deuxième groupe de contrôle dans la même hiérarchie, elle sera supprimée du premier groupe de contrôle de la hiérarchie, c'est-à-dire que deux groupes de contrôle non liés dans la même hiérarchie n'auront jamais la même tâche. ne peut être qu'un moyen de restreindre un certain type de sous-système de groupe de contrôle pour un certain processus. Lorsque vous créez la première hiérarchie, chaque tâche du système est membre d'au moins un groupe de contrôle (le groupe de contrôle racine). Ainsi, lorsque vous utilisez des groupes de contrôle, chaque tâche système se trouve toujours dans au moins un groupe de contrôle, comme le montre la figure 3.
Figure 3, règle 3 de la hiérarchie cgroup
Règle 4 : Tout processus dérivé sur le système créera un processus enfant (ou thread). Le processus enfant hérite automatiquement de l'appartenance au groupe de contrôle de son parent, mais peut être déplacé vers d'autres groupes de contrôle si nécessaire. Après le déplacement, les processus parent et enfant sont complètement indépendants, comme le montre la figure 4.
Figure 4 règle de hiérarchie de cgroup 4
où cgroup pointe vers une structure css_set , qui stocke les informations sur les groupes de contrôle liés au processus. cg_list est une liste chaînée de processus utilisant le même css_set. La structure css_set est la suivante :
Les informations sur les éléments de la structure sont expliquées comme suit :
Le pointeur cgroup dans la structure pointe vers une structure cgroup. Le processus est contrôlé par les ressources du sous-système. Ceci est en fait réalisé en rejoignant un sous-système cgroup spécifique, car cgroup est à. un niveau spécifique. Les sous-systèmes sont rattachés à la hiérarchie. Jetons un coup d'œil à la structure du groupe de contrôle,
Afin de clarifier la relation entre css_set et cgroup, nous devons également analyser la structure cg_cgroup_link de la couche intermédiaire. Les données de structure sont les suivantes : Les données dans la structure sont décrites comme suit : cgrp_link_list est liée à la liste chaînée pointée par cgroup->css_sets. cgrp pointe vers le groupe lié à ce cg_cgroup_link. cg_link_list est lié à la liste chaînée pointée par css_set->cg_links. cg pointe vers le css_set lié à cg_cgroup_link. On peut voir que cgroup et css_set sont en fait une relation plusieurs-à-plusieurs. Une structure intermédiaire doit être ajoutée pour combiner les deux. Les éléments cgrp et cg dans cg_group_link sont les parties combinées. Les listes chaînées de cgrp_link_list et cg_link_list sont C'est l'entité cgroup et css_set attachée pour faciliter l'interrogation. Il ressort des règles hiérarchiques des groupes de contrôle qu'un groupe de processus peut appartenir à des groupes de contrôle qui ne sont pas au même niveau. Compréhension combinée, un css_set stocke les informations relatives à chaque sous-système d'un groupe de racines de processus. . Les sous-systèmes proviennent de différents niveaux de groupe de contrôle, donc le cgroup_subsys_state stocké dans un css_set peut correspondre à plusieurs groupes de contrôle. D'un autre côté, le niveau cgroup stocke également un ensemble de cgroup_subsys_state, qui est obtenu à partir du sous-système attaché au niveau où se trouve le cgroup. Un cgroup peut avoir plusieurs processus, et le css_set du processus n'est pas nécessairement le même. car le processus peut utiliser plusieurs niveaux. Par conséquent, un groupe de contrôle doit également correspondre à plusieurs css_sets. La figure 5 décrit en détail la relation d'accrochage plusieurs-à-plusieurs.
Figure 5 Processus et diagramme de relation plusieurs-à-plusieurs de groupe de contrôle
Basé sur le concept de groupe de contrôle, cet article démonte la relation plusieurs-à-plusieurs entre celui-ci et le processus, et l'analyse à partir de l'accrochage de variables dans le processus pertinent. La structure spécifique du code devrait aider les lecteurs à mieux comprendre la relation hiérarchique et l'utilisation des groupes de contrôle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!