[Linux] Restrictions de ressources des groupes C

1. Introduction aux groupes C

Que sont les groupes C ?

Cgroups est l'abréviation de groupes de contrôle. Il s'agit d'un mécanisme fourni par le noyau Linux qui peut limiter, enregistrer et isoler les ressources physiques (telles que le processeur, la mémoire, les E/S, etc.) utilisées par les groupes de processus (groupes de processus). Il a été initialement proposé par les ingénieurs de Google et a ensuite été intégré au noyau Linux. Les groupes de contrôle sont également la méthode de gestion des ressources utilisée par LXC pour implémenter la virtualisation. On peut dire que sans les groupes de contrôle, il n'y aurait pas de LXC.

Que peuvent faire les groupes C ?

L'objectif initial de Cgroups est de fournir un cadre unifié pour la gestion des ressources, qui intègre non seulement les sous-systèmes existants tels que cpuset, mais fournit également des interfaces pour le développement futur de nouveaux sous-systèmes. Les groupes de contrôle d'aujourd'hui conviennent à une variété de scénarios d'application, du contrôle des ressources d'un processus unique à la réalisation de la virtualisation au niveau du système d'exploitation (virtualisation au niveau du système d'exploitation). Docker utilise également les groupes de contrôle pour contrôler les quotas de ressources utilisés par les conteneurs. Les groupes C fournissent les fonctions suivantes :

  • Limiter le nombre de ressources qu'un groupe de processus peut utiliser (Limitation des ressources). Par exemple : le sous-système de mémoire peut définir une limite d'utilisation de la mémoire pour le groupe de processus. Une fois que la mémoire utilisée par le groupe de processus atteint la limite et demande ensuite de la mémoire, un MOO (mémoire insuffisante) se produira.
  • Contrôle de priorité du groupe de processus (Priorisation). Par exemple : vous pouvez utiliser le sous-système CPU pour allouer un partage CPU spécifique à un groupe de processus.
  • Enregistrez le nombre de ressources utilisées par le groupe de processus (Comptabilité). Par exemple : vous pouvez utiliser le sous-système cpuacct pour enregistrer le temps CPU utilisé par un groupe de processus
  • Isolement du groupe de processus (Isolement). Par exemple, l'utilisation du sous-système ns peut permettre à différents groupes de processus d'utiliser différents espaces de noms pour réaliser l'isolation. Différents groupes de processus ont leurs propres espaces de montage de processus, de réseau et de système de fichiers.
  • Contrôle de groupe de processus (Contrôle). Par exemple : vous pouvez utiliser le sous-système congélateur pour suspendre et reprendre des groupes de processus.

Concepts liés aux groupes C et leurs relations

  • Concepts associés
    1. Tâche. Dans les groupes de contrôle, une tâche est un processus du système.
    2. Groupe témoin. Un groupe témoin est un groupe de processus divisés selon certains critères. Le contrôle des ressources dans les groupes C est implémenté dans les unités des groupes de contrôle. Un processus peut rejoindre un groupe de contrôle et migrer d'un groupe de processus vers un autre groupe de contrôle. Les processus d'un groupe de processus peuvent utiliser les ressources allouées par les groupes de contrôle dans les unités des groupes de contrôle et sont soumis aux restrictions définies par les groupes de contrôle dans les unités des groupes de contrôle.
    3. Hiérarchie. Les groupes de contrôle peuvent être organisés sous une forme hiérarchique, qui est une arborescence de groupes de contrôle. Le groupe de contrôle du nœud enfant dans l'arborescence du groupe de contrôle est l'enfant du groupe de contrôle du nœud parent et hérite des attributs spécifiques du groupe de contrôle parent.
    4. Sous-système (sous-système). Un sous-système est un contrôleur de ressources. Par exemple, le sous-système CPU est un contrôleur qui contrôle l'allocation du temps CPU. Un sous-système doit être attaché à un niveau pour fonctionner. Une fois qu'un sous-système est attaché à un certain niveau, tous les groupes de contrôle de ce niveau sont contrôlés par ce sous-système.
  • Interrelation
    1. Chaque fois qu'un nouveau niveau est créé dans le système, toutes les tâches du système constituent le groupe de contrôle par défaut de ce niveau (nous l'appelons le groupe de contrôle racine. Ce groupe de contrôle est automatiquement créé lors de la création du niveau, et est ensuite créé dans le niveau (les cgroups sont tous des descendants de ce cgroup) sont les membres initiaux.
    2. Un sous-système ne peut être rattaché qu'à un seul niveau au maximum.
    3. Plusieurs sous-systèmes peuvent être attachés à un seul niveau.
    4. Une tâche peut être membre de plusieurs groupes de contrôle, mais ces groupes de contrôle doivent être à des niveaux différents.
    5. Lorsqu'un processus (tâche) dans le système crée un processus enfant (tâche), la tâche enfant devient automatiquement membre du groupe de contrôle où se trouve son processus parent. La sous-tâche peut ensuite être déplacée vers un autre groupe de contrôle si nécessaire, mais au départ, elle hérite toujours du groupe de contrôle de sa tâche parent.

2. Introduction au sous-système Cgroups

blkio Ce sous-système définit les restrictions d'entrée/sortie pour les périphériques de bloc, tels que les périphériques physiques (disque, SSD, USB, etc.).
cpu Ce sous-système utilise le planificateur pour fournir un accès aux tâches de groupe de contrôle au processeur.
cpuacct Ce sous-système génère automatiquement des rapports sur le processeur utilisé par les tâches d'un groupe de contrôle.
cpuset Ce sous-système alloue un processeur indépendant (sur les systèmes multicœurs) et des nœuds de mémoire aux tâches d'un groupe de contrôle.
périphériques Ce sous-système autorise ou refuse aux tâches du groupe de contrôle l'accès aux périphériques.
congélateur Ce sous-système suspend ou reprend les tâches dans un groupe de contrôle.
mémoire Ce sous-système définit les limites de mémoire utilisée par les tâches d'un groupe de contrôle et génère automatiquement des rapports sur les ressources mémoire utilisées par ces tâches.
net_cls Ce sous-système marque les paquets réseau avec un identifiant de classe (classid), permettant au programme de contrôle de flux Linux (tc) d'identifier les paquets générés à partir d'un groupe de contrôle spécifique.
Sous-système d’espace de noms ns.

Comprenez trois phrases
1) N'importe quel sous-système peut être attaché à au plus un niveau.
2) Un seul niveau peut être attaché à un ou plusieurs sous-systèmes. Par exemple : la mémoire CPU cpuset est attachée à la couche cpu_and_memory.
3) Chaque fois qu'un nouveau niveau est créé, tous les processus du système sont les membres initiaux du CGroup par défaut. de ce niveau. Pour toute hiérarchie créée, chaque processus du système peut être membre du seul CGroup de cette hiérarchie. Lorsqu'un seul processus peut se trouver dans plusieurs CGroups, assurez-vous simplement que chaque CGroup n'est pas au même niveau. Lorsqu'il y a un conflit au même niveau, le processus, en tant que membre du deuxième CGroup, se retirera du premier CGroup.

3. Installation des groupes de contrôle

1. Installez le groupe de contrôle

[root@localhost ~]# yum -y install libcgroup

2. Vérifiez le montage hiérarchique du groupe de contrôle avant de commencer

[root@localhost ~]# lssubsys           #显示为空

3. Démarrez le groupe de contrôle

[root@localhost ~]# /etc/init.d/cgconfig start
Starting cgconfig service:                                 [确定]

4. Vérifiez l'installation

#启动成功后再次执行
[root@localhost ~]# lssubsys
cpuset
cpu
cpuacct
memory
devices
freezer
net_cls
blkio

#查看挂载情况
[root@localhost ~]# lssubsys -am   显示挂载情况
ns
perf_event
net_prio
cpuset /cgroup/cpuset
cpu /cgroup/cpu
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio

#cgroup 目录不在为空
[root@localhost ~]# ls /cgroup/
blkio  cpu  cpuacct  cpuset  devices  freezer  memory  net_cls

5. Fichier de configuration

/etc/cgconfig.conf   定义挂载子系统

3. Limiter l'utilisation des ressources du processus

1. Gestion du groupe cgroup

Créez un nouveau groupe
mkdir /cgroup/cpu/baism_test
ou
[root@localhost opt]# cgcreate -g memory:/baism_test Utilisez la commande pour créer un groupe baism_test sous le groupe de mémoire

Supprimer le groupe
[root@localhost opt]# cgdelete -r cpu:/baism_test Supprimer le groupe cpu/baism_test

2. Définir le seuil d'application des ressources de groupe

2.1. Limiter l'utilisation du CPU par un processus
[root@localhost opt]# echo 50000 > /cgroup/cpu/baism_test/cpu.cfs_quota_us    设置进程使用CPU的百分比是50%

Vérifier les paramètres du processeur

#方法一
创建一个跑CPU的进程 use_cpu.sh
#!/bin/bash
x=0
echo "current_process_number is : $$"

while [ True ];do
    x=$x+1
done

将该进程的进程号加入资源分组baism_test
[root@localhost cgroup]# echo 5398 > /cgroup/cpu/baism_test/tasks     将运行的程序的进程号输入到task中就行   

#通过TOP查看进程使用CPU在合理范围内 结束程序后 进程从tasks中消失


#方法二 
使用cgexec命令对新启动的程序设置 限制
[root@localhost opt]# cgexec -g cpu:/baism_test /opt/use_cpu.sh
2.2. Limiter la mémoire utilisée par un programme à un maximum de 1M 1048676 octets.
[root@localhost cgroup]# echo 1048576 > memory/baism_test/memory.limit_in_bytes

Vérifier les limites de mémoire

##将进程号加入资源分组
[root@localhost cgroup]# echo 5584 > memory/baism_test/tasks
or
开启任务的时候直接加入资源分组
[root@localhost opt]# cgexec -g memory:/baism_test /opt/use_memory.sh

可以看出 程序使用到最大的时候 就会被Kill掉
测试的时候  先运行程序在运行限制  就不会上来就是杀死状态了
2.3. Limiter la limite d'utilisation des E/S du processus à 1 M

#Définir les limites d'E/S du groupe de ressources

[root@localhost opt]# cgcreate -g blkio:/baism_test
[root@localhost opt]# echo '8:0 1048676' > /cgroup/blkio/baism_test/blkio.throttle.read_bps_device

Vérifier les limites d'E/S

[root@localhost opt]#  dd if=/dev/sda of=/dev/null &
[1] 5615
[root@localhost opt]# echo 5615 > /cgroup/blkio/baism_test/tasks
[root@localhost opt]#

通过iotop可以看出 读取下降到了1M

Je suppose que tu aimes

Origine blog.csdn.net/qq_45277554/article/details/132025862
conseillé
Classement