Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:debian:10:junior:l120 [2023/08/24 11:17] adminelearning:workbooks:debian:10:junior:l120 [2024/10/16 12:02] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2023.02**+Version : **2024.02**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======LDF601 - Gestion des Paramètres du matériel et les Ressources======+======LDF511 - Gestion des Paramètres du matériel et les Ressources======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **LDF601 - Gestion des Paramètres et les Ressources du Matériel**+  * **LDF511 - Gestion des Paramètres et les Ressources du Matériel**
     * Contenu du Module     * Contenu du Module
     * Présentation des Fichiers Spéciaux      * Présentation des Fichiers Spéciaux 
Ligne 61: Ligne 61:
     * Limiter les Ressources     * Limiter les Ressources
       * LAB #4 - ulimit       * LAB #4 - ulimit
-      * LAB #5 - cgroups v1 +      * LAB #5 - cgroups v2 
-        * 5.1 - Préparation +        * 5.1 - Présentation 
-        * 5.2 - Présentation +        * 5.2 - Limitation de la CPU 
-        * 5.3 - Limitation de la Mémoire +        * 5.3 - La Commande systemctl set-property 
-        * 5.4 - La Commande cgcreate +
-        * 5.5 - La Commande cgdelete +
-        * 5.6 - Le Fichier /etc/cgconfig.conf +
-        * 5.7 - La Commande cgconfigparser +
-      * LAB #6 - cgroups v2 +
-        * 6.1 - Préparation +
-        * 6.2 - Présentation +
-        * 6.3 - Limitation de la CPU +
-        * 6.4 - La Commande systemctl set-property +
  
 =====Présentation des Fichiers Spéciaux===== =====Présentation des Fichiers Spéciaux=====
Ligne 3350: Ligne 3341:
 </code> </code>
  
-====LAB #5 - cgroups v1====+====LAB #5 - cgroups v2====
  
-=== 5.1 - Préparation=== +===5.1 - Présentation===
- +
-Debian 11 utilise cgroups v2 par défault. Pour revenir à l'utilisation de cgroups v1, éditez le fichier **/etc/boot/grub** et ajoutez la directive **systemd.unified_cgroup_hierarchy=0** à la ligne **GRUB_CMDLINE_LINUX_DEFAULT** : +
- +
-<code> +
-root@debian11:~# vi /etc/default/grub +
-root@debian11:~# cat /etc/default/grub +
-# If you change this file, run 'update-grub' afterwards to update +
-# /boot/grub/grub.cfg. +
-# For full documentation of the options in this file, see: +
-#   info -f grub -n 'Simple configuration' +
- +
-GRUB_DEFAULT=0 +
-GRUB_TIMEOUT=5 +
-GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +
-GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=0" +
-GRUB_CMDLINE_LINUX="" +
- +
-# Uncomment to enable BadRAM filtering, modify to suit your needs +
-# This works with Linux (no patch required) and with any kernel that obtains +
-# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) +
-#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" +
- +
-# Uncomment to disable graphical terminal (grub-pc only) +
-#GRUB_TERMINAL=console +
- +
-# The resolution used on graphical terminal +
-# note that you can use only modes which your graphic card supports via VBE +
-# you can see them in real GRUB with the command `vbeinfo' +
-#GRUB_GFXMODE=640x480 +
- +
-# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux +
-#GRUB_DISABLE_LINUX_UUID=true +
- +
-# Uncomment to disable generation of recovery mode menu entries +
-#GRUB_DISABLE_RECOVERY="true" +
- +
-# Uncomment to get a beep at grub start +
-#GRUB_INIT_TUNE="480 440 1" +
- +
-root@debian11:~# grub-mkconfig -o /boot/grub/grub.cfg  +
-Generating grub configuration file ... +
-Found background image: /usr/share/images/desktop-base/desktop-grub.png +
-Found linux image: /boot/vmlinuz-5.10.0-13-amd64 +
-Found initrd image: /boot/initrd.img-5.10.0-13-amd64 +
-done +
-</code> +
- +
-Redémarrez ensuite votre VM : +
- +
-<code> +
-root@debian11:~# reboot +
-</code> +
- +
-=== 5.2 - Présentation=== +
- +
-Les **Groupes de Contrôles** (//Control Groups//) aussi appelés **CGroups**, sont une façon de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles 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. +
- +
-Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descandant tous du processus init et héritant de l'environnement de leurs parents, les contrôles groupes peuvent être multiples donnant lieu à des arborescences ou **hiérarchies** multiples qui héritent de certains attributs de leurs groupes de contrôle parents. +
- +
-Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs **sous-système(s)** aussi appelés des **Contrôleurs de Ressources** ou simplement des **Contrôleurs**. Les contrôleurs disponibles sous Debian 11 sont : +
- +
-  * **blkio** - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs, +
-  * **cpu** - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur, +
-  * **cpuacct** - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle, +
-  * **cpuset** - utilisé pour assigner des CPU individuels sur un système multicoeur et des noeuds de mémoire à des tâches dans un groupe de contrôle, +
-  * **devices** - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle, +
-  * **freezer** - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle, +
-  * **memory** - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources rmémoire utilisées par ces tâches, +
-  * **net_cls** - utilisé pour repèrer les paquets réseau avec un identifiant de classe (//classid//) afin de permettre au contrôleur de trafic Linux, **tc**,  d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle. +
-  * **perf_event**  - utilisé pour permettre le monitoring des CGroups avec l'outil perf, +
-  * **hugetlb** - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille. +
- +
-Il est à noter que : +
- +
-  * chaque processus du système appartient à un cgroup et seulement à un cgroup à la fois, +
-  * tous les threads d'un processus appartiennent au même cgroup, +
-  * à la création d'un processus, celui-ci est mis dans le même cgroup que son processus parent, +
-  * un processus peut être migré d'un cgroup à un autre cgroup. Par contre, la migration d'un processus n'a pas d'impact sur l'appartenance au cgroup de ses processus fils.  +
- +
-Commencez par installer le paquet **cgroup-tools** : +
- +
-<code> +
-root@debian11:~# apt -y install cgroup-tools +
-</code> +
- +
-Pour visualiser les hiérarchies, il convient d'utiliser la commande **lssubsys** : +
- +
-<code> +
-root@debian11:~# lssubsys -am +
-cpuset /sys/fs/cgroup/cpuset +
-cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct +
-blkio /sys/fs/cgroup/blkio +
-memory /sys/fs/cgroup/memory +
-devices /sys/fs/cgroup/devices +
-freezer /sys/fs/cgroup/freezer +
-net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio +
-perf_event /sys/fs/cgroup/perf_event +
-hugetlb /sys/fs/cgroup/hugetlb +
-pids /sys/fs/cgroup/pids +
-rdma /sys/fs/cgroup/rdma +
-</code>  +
- +
-Sous Debian 11, **Systemd** organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd. +
- +
-En haut de l'arborescence des unités de Systemd se trouve la tranche root - **-.slice**, dont dépend : +
- +
-  * le **system.slice** - l'emplacement des services système, +
-  * le **user.slice** - l'emplacement des sessions des utilisateurs, +
-  * le **machine.slice** - l'emplacement des machines virtuelles et conteneurs. +
- +
-En dessous des tranches peuvent se trouver : +
- +
-  * des **scopes** - des processus crées par **fork**, +
-  * des **services** - des processus créés par une **Unité**. +
- +
-Les slices peuvent être visualisés avec la commande suivante : +
- +
-<code> +
-root@debian11:~# systemctl list-units --type=slice +
-  UNIT                               LOAD   ACTIVE SUB    DESCRIPTION +
-  -.slice                            loaded active active Root Slice +
-  system-getty.slice                 loaded active active system-getty.slice +
-  system-lvm2\x2dpvscan.slice        loaded active active system-lvm2\x2dpvscan.slice +
-  system-modprobe.slice              loaded active active system-modprobe.slice +
-  system-systemd\x2dcryptsetup.slice loaded active active Cryptsetup Units Slice +
-  system.slice                       loaded active active System Slice +
-  user-1000.slice                    loaded active active User Slice of UID 1000 +
-  user.slice                         loaded active active User and Session Slice +
- +
-LOAD   = Reflects whether the unit definition was properly loaded. +
-ACTIVE = The high-level unit activation state, i.e. generalization of SUB. +
-SUB    = The low-level unit activation state, values depend on unit type. +
-8 loaded units listed. Pass --all to see loaded but inactive units, too. +
-To show all installed unit files use 'systemctl list-unit-files'+
-</code> +
- +
-L'arborescence des unités de Systemd est la suivante : +
- +
-<code> +
-root@debian11:~# systemd-cgls +
-Control group /: +
--.slice +
-├─user.slice  +
-│ └─user-1000.slice  +
-│   ├─user@1000.service … +
-│   │ ├─app.slice  +
-│   │ │ ├─pulseaudio.service  +
-│   │ │ │ └─974 /usr/bin/pulseaudio --daemonize=no --log-target=journal +
-│   │ │ ├─pipewire.service  +
-│   │ │ │ ├─973 /usr/bin/pipewire +
-│   │ │ │ └─984 /usr/bin/pipewire-media-session +
-│   │ │ └─dbus.service  +
-│   │ │   └─982 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only +
-│   │ └─init.scope  +
-│   │   ├─958 /lib/systemd/systemd --user +
-│   │   └─959 (sd-pam) +
-│   ├─session-3.scope  +
-│   │ ├─ 993 sshd: trainee [priv] +
-│   │ ├─ 999 sshd: trainee@pts/+
-│   │ ├─1000 -bash +
-│   │ ├─1003 su - +
-│   │ ├─1004 -bash +
-│   │ ├─1010 systemd-cgls +
-│   │ └─1011 less +
-│   └─session-1.scope  +
-│     ├─578 /bin/login -p -- +
-│     ├─975 -bash +
-│     ├─986 su - +
-│     └─987 -bash +
-├─init.scope  +
-│ └─1 /sbin/init +
-└─system.slice  +
-  ├─apache2.service  +
-  │ ├─595 /usr/sbin/apache2 -k start +
-  │ ├─597 /usr/sbin/apache2 -k start +
-  │ └─598 /usr/sbin/apache2 -k start +
-  ├─systemd-udevd.service  +
-  │ └─317 /lib/systemd/systemd-udevd +
-  ├─cron.service  +
-  │ └─491 /usr/sbin/cron -f +
-  ├─polkit.service  +
-  │ └─495 /usr/libexec/polkitd --no-debug +
-  ├─rtkit-daemon.service  +
-  │ └─979 /usr/libexec/rtkit-daemon +
-  ├─auditd.service  +
-  │ └─460 /sbin/auditd +
-  ├─wpa_supplicant.service  +
-  │ └─498 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant +
-  ├─ModemManager.service  +
-  │ └─515 /usr/sbin/ModemManager +
-  ├─inetd.service  +
-  │ └─694 /usr/sbin/inetd +
-  ├─systemd-journald.service  +
-  │ └─296 /lib/systemd/systemd-journald +
-  ├─mdmonitor.service  +
-  │ └─432 /sbin/mdadm --monitor --scan +
-  ├─ssh.service  +
-  │ └─580 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups +
-lines 1-58 +
-[q] +
-</code> +
- +
-En utilisant Systemd, plusieurs ressources peuvent être limitées : +
- +
-  * **CPUShares** - par défault 1024, +
-  * **MemoryLimit** - limite exprimée en Mo ou en Go. Pas de valeur par défaut, +
-  * **BlockIOWeight** - valeur entre 10 et 1000. Pas de valeur par défaut, +
-  * **StartupCPUShares** - comme CPUShares mais uniquement appliqué pendant le démarrage, +
-  * **StartupBlockIOWeight** - comme BlockIOWeight mais uniquement appliqué pendant le démarrage, +
-  * **CPUQuota** - utilisé pour limiter le temps CPU, même quand le système ne fait rien. +
- +
-=== 5.3 - Limitation de la Mémoire=== +
- +
-Commencez par créer le script **hello-world.sh** qui servira à générer un processus pour travailler avec les CGroups : +
- +
-<code> +
-root@debian11:~# vi hello-world.sh +
-root@debian11:~# cat hello-world.sh +
-#!/bin/bash +
-while [ 1 ]; do +
-        echo "hello world" +
-        sleep 360 +
-done +
-</code> +
- +
-Rendez le script exécutable et testez-le : +
- +
-<code> +
-root@debian11:~# chmod u+x hello-world.sh +
-root@debian11:~# ./hello-world.sh  +
-hello world +
-^C +
-</code> +
- +
-Créez maintenant un CGroup dans le sous-système **memory** appelé **helloworld** : +
- +
-<code> +
-root@debian11:~# mkdir /sys/fs/cgroup/memory/helloworld +
-</code> +
- +
-Par défaut, ce CGroup héritera de l'ensemble de la mémoire disponible. Pour éviter cela, créez maintenant une limite de **40000000** octets pour ce CGroup : +
- +
-<code> +
-root@debian11:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes +
-root@debian11:~# cat /sys/fs/cgroup/memory/helloworld/memory.limit_in_bytes +
-39997440 +
-</code> +
- +
-<WRAP center round important > +
-**Important** - Notez que les 40 000 000 demandés sont devenus 39 997 440 ce qui correspond à un nombre entier de pages mémoire du noyau de 4Ko. ( 39 997 440 / 4096 = 9 765 ). +
-</WRAP> +
- +
-Lancez maintenant le script **helloworld.sh** :  +
- +
-<code> +
-root@debian11:~# ./hello-world.sh & +
-[1] 1073 +
-root@debian11:~# hello world +
-[Entrée] +
- +
-root@debian11:~# ps aux | grep hello-world +
-root        1073  0.0  0.0   6756  3100 pts/0    S    06:33   0:00 /bin/bash ./hello-world.sh +
-root        1077  0.0  0.0   6180   712 pts/0    R+   06:34   0:00 grep hello-world +
-</code> +
- +
-Notez qu'il n'y a pas de limite de la mémoire, ce qui implique l'héritage par défaut : +
- +
-<code> +
-root@debian11:~# ps -ww -o cgroup 1073 +
-CGROUP +
-8:devices:/user.slice,7:pids:/user.slice/user-1000.slice/session-3.scope,5:memory:/user.slice/user-1000.slice/session-3.scope,1:name=systemd:/user.slice/user-1000.slice/session-3.scope,0::/user.slice/user-1000.slice/session-3.scope +
-</code> +
- +
-Insérer le PID de notre script dans le CGroup **helloworld** : +
- +
-<code> +
-root@debian11:~# echo 1073 > /sys/fs/cgroup/memory/helloworld/cgroup.procs +
-</code> +
- +
-Notez maintenant l'héritage de la limitation de la mémoire - **5:memory:/helloworld** : +
- +
-<code> +
-root@debian11:~# ps -ww -o cgroup 1073 +
-CGROUP +
-8:devices:/user.slice,7:pids:/user.slice/user-1000.slice/session-3.scope,5:memory:/helloworld,1:name=systemd:/user.slice/user-1000.slice/session-3.scope,0::/user.slice/user-1000.slice/session-3.scope +
-</code> +
- +
-Constatez ensuite l'occupation mémoire réelle : +
- +
-<code> +
-root@debian11:~# cat /sys/fs/cgroup/memory/helloworld/memory.usage_in_bytes +
-274432 +
-</code> +
- +
-Tuez le script **hello-world.sh** :  +
- +
-<code> +
-root@debian11:~# kill 1073 +
-root@debian11:~# ps aux | grep hello-world +
-root        1086  0.0  0.0   6180   716 pts/0    S+   06:37   0:00 grep hello-world +
-[1]+  Terminated              ./hello-world.sh +
-</code> +
- +
-Créez un second CGroup beaucoup plus restrictif : +
- +
-<code> +
-root@debian11:~# mkdir /sys/fs/cgroup/memory/helloworld1 +
-root@debian11:~# echo 6000 > /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes +
-root@debian11:~# cat /sys/fs/cgroup/memory/helloworld1/memory.limit_in_bytes +
-4096 +
-</code> +
- +
-Relancez le script **hello-world.sh** et insérez-le dans le nouveau CGroup : +
- +
-<code> +
-root@debian11:~# ./hello-world.sh & +
-[1] 1089 +
- +
-root@debian11:~# hello world +
-[Entrée] +
- +
-root@debian11:~# echo 1089 > /sys/fs/cgroup/memory/helloworld1/cgroup.procs +
-</code> +
- +
-Attendez la prochaine sortie de **hello world** sur le canal standard puis constatez que le script s'arrête : +
- +
-<code> +
-root@debian11:~# ps aux | grep hello-world +
-root        1100  0.0  0.0   6180   720 pts/0    S+   06:45   0:00 grep hello-world +
-[1]+  Killed                  ./hello-world.sh +
-</code> +
- +
-Notez la trace dans le fichier **/var/log/messages** : +
- +
-<code> +
-root@debian11:~# tail /var/log/messages +
-May  4 06:44:43 debian11 kernel: [  994.012423] workingset_nodereclaim 0 +
-May  4 06:44:43 debian11 kernel: [  994.012423] pgfault 0 +
-May  4 06:44:43 debian11 kernel: [  994.012423] pgmajfault 0 +
-May  4 06:44:43 debian11 kernel: [  994.012423] pgrefill 0 +
-May  4 06:44:43 debian11 kernel: [  994.012423] pgscan 0 +
-May  4 06:44:43 debian11 kernel: [  994.012423] pgsteal 0 +
-May  4 06:44:43 debian11 kernel: [  994.012425] Tasks state (memory values in pages): +
-May  4 06:44:43 debian11 kernel: [  994.012426] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name +
-May  4 06:44:43 debian11 kernel: [  994.012428] [   1089]      1089     1689      780    53248        0             0 hello-world.sh +
-May  4 06:44:43 debian11 kernel: [  994.012430] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=/,mems_allowed=0,oom_memcg=/helloworld1,task_memcg=/helloworld1,task=hello-world.sh,pid=1089,uid=0 +
-</code> +
- +
-===5.4 - La Commande cgcreate=== +
- +
-Cette commande permet la création d'un CGroup : +
- +
-<code> +
-root@debian11:~# cgcreate -g memory:helloworld2 +
- +
-root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/ +
-total 0 +
--rw-r--r-- 1 root root 0 May  4 06:47 cgroup.clone_children +
---w--w--w- 1 root root 0 May  4 06:47 cgroup.event_control +
--rw-r--r-- 1 root root 0 May  4 06:47 cgroup.procs +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.failcnt +
---w------- 1 root root 0 May  4 06:47 memory.force_empty +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.slabinfo +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.tcp.usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:47 memory.kmem.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.max_usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.memsw.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:47 memory.memsw.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.move_charge_at_immigrate +
--r--r--r-- 1 root root 0 May  4 06:47 memory.numa_stat +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.oom_control +
----------- 1 root root 0 May  4 06:47 memory.pressure_level +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.soft_limit_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:47 memory.stat +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.swappiness +
--r--r--r-- 1 root root 0 May  4 06:47 memory.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:47 memory.use_hierarchy +
--rw-r--r-- 1 root root 0 May  4 06:47 notify_on_release +
--rw-r--r-- 1 root root 0 May  4 06:47 tasks +
-</code> +
- +
-Il n'existe cependant pas de commande pour affecter une limitation de la mémoire : +
- +
-<code> +
-root@debian11:~# echo 40000000 > /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes +
-</code> +
- +
-===5.5 - La Commande cgexec=== +
- +
-Cette commande permet d'insérer la limitation dans le CGroup **et** de lancer le script en une seule ligne : +
- +
-<code> +
-root@debian11:~# cgexec -g memory:helloworld2 ./hello-world.sh & +
-[1] 1106 +
- +
-root@debian11:~# hello world +
-[Entrée] +
- +
-root@debian11:~# cat /sys/fs/cgroup/memory/helloworld2/cgroup.procs  +
-1106 +
-1107 +
-root@debian11:~# ps aux | grep 110 +
-root        1106  0.0  0.0   6756  3060 pts/0    S    06:48   0:00 /bin/bash ./hello-world.sh +
-root        1107  0.0  0.0   5304   508 pts/0    S    06:48   0:00 sleep 360 +
-root        1108  0.0  0.0      0     0 ?        I    06:49   0:00 [kworker/1:0-events_freezable] +
-root        1113  0.0  0.0   6180   652 pts/0    S+   06:50   0:00 grep 110 +
-</code> +
- +
-===5.6 - La Commande cgdelete== +
- +
-Une fois le script terminé, cette commande permet de supprimer le cgroup : +
- +
-<code> +
-root@debian11:~# kill 1106 +
-root@debian11:~# ps aux | grep 110 +
-root        1107  0.0  0.0   5304   508 pts/0    S    06:48   0:00 sleep 360 +
-root        1108  0.0  0.0      0     0 ?        I    06:49   0:00 [kworker/1:0-mm_percpu_wq] +
-root        1115  0.0  0.0   6180   716 pts/0    R+   06:51   0:00 grep 110 +
-[1]+  Terminated              cgexec -g memory:helloworld2 ./hello-world.sh +
- +
-root@debian11:~# cgdelete memory:helloworld2 +
- +
-root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/ +
-ls: cannot access '/sys/fs/cgroup/memory/helloworld2/': No such file or directory +
-</code> +
- +
-===5.7 - Le Fichier /etc/cgconfig.conf=== +
- +
-Afin de les rendre persistants, il convient d'éditer le fichier **/etc/cgconfig.conf** : +
- +
-<code> +
-root@debian11:~# vi /etc/cgconfig.conf +
-root@debian11:~# cat /etc/cgconfig.conf +
-group helloworld2 { +
-        cpu { +
-                cpu.shares = 100; +
-        } +
-        memory { +
-                memory.limit_in_bytes = 40000; +
-        } +
-+
-</code> +
- +
-<WRAP center round important > +
-**Important** - Notez la création de **deux** limitations, une de 40 000 octets de mémoire et l'autre de **100** **cpu.shares**. Cette dernière est une valeur exprimée sur 1 024, où 1 024 représente 100% du temps CPU. La limite fixée est donc équivalente à 9,77% du temps CPU. +
-</WRAP> +
- +
-Créez donc les deux CGroups concernés : +
- +
-<code> +
-root@debian11:~# cgcreate -g memory:helloworld2 +
- +
-root@debian11:~# ls -l /sys/fs/cgroup/memory/helloworld2/ +
-total 0 +
--rw-r--r-- 1 root root 0 May  4 06:53 cgroup.clone_children +
---w--w--w- 1 root root 0 May  4 06:53 cgroup.event_control +
--rw-r--r-- 1 root root 0 May  4 06:53 cgroup.procs +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.failcnt +
---w------- 1 root root 0 May  4 06:53 memory.force_empty +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.slabinfo +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.tcp.usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:53 memory.kmem.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.max_usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.failcnt +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.limit_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.memsw.max_usage_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:53 memory.memsw.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.move_charge_at_immigrate +
--r--r--r-- 1 root root 0 May  4 06:53 memory.numa_stat +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.oom_control +
----------- 1 root root 0 May  4 06:53 memory.pressure_level +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.soft_limit_in_bytes +
--r--r--r-- 1 root root 0 May  4 06:53 memory.stat +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.swappiness +
--r--r--r-- 1 root root 0 May  4 06:53 memory.usage_in_bytes +
--rw-r--r-- 1 root root 0 May  4 06:53 memory.use_hierarchy +
--rw-r--r-- 1 root root 0 May  4 06:53 notify_on_release +
--rw-r--r-- 1 root root 0 May  4 06:53 tasks +
-</code> +
- +
-<code> +
-root@debian11:~# cgcreate -g cpu:helloworld2 +
- +
-root@debian11:~# ls -l /sys/fs/cgroup/cpu/helloworld2/ +
-total 0 +
--rw-r--r-- 1 root root 0 May  4 06:54 cgroup.clone_children +
--rw-r--r-- 1 root root 0 May  4 06:54 cgroup.procs +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.stat +
--rw-r--r-- 1 root root 0 May  4 06:54 cpuacct.usage +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_all +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu_sys +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_percpu_user +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_sys +
--r--r--r-- 1 root root 0 May  4 06:54 cpuacct.usage_user +
--rw-r--r-- 1 root root 0 May  4 06:54 cpu.cfs_period_us +
--rw-r--r-- 1 root root 0 May  4 06:54 cpu.cfs_quota_us +
--rw-r--r-- 1 root root 0 May  4 06:54 cpu.shares +
--r--r--r-- 1 root root 0 May  4 06:54 cpu.stat +
--rw-r--r-- 1 root root 0 May  4 06:54 notify_on_release +
--rw-r--r-- 1 root root 0 May  4 06:54 tasks +
-</code> +
- +
-===5.8 - La Commande cgconfigparser=== +
- +
-Appliquez le contenu du fichier **/etc/cgconfig.conf** grâce à l'utilisation de la commande **cgconfigparser** : +
- +
-<code> +
-root@debian11:~# cgconfigparser -l /etc/cgconfig.conf +
- +
-root@debian11:~# cat /sys/fs/cgroup/memory/helloworld2/memory.limit_in_bytes +
-36864 +
- +
-root@debian11:~# cat /sys/fs/cgroup/cpu/helloworld2/cpu.shares +
-100 +
-</code> +
- +
-====LAB #6 - cgroups v2==== +
- +
-===6.1 - Préparation=== +
- +
-Pour revenir à l'utilisation de cgroups v2, éditez le fichier **/etc/boot/grub** et modifiez la directive **systemd.unified_cgroup_hierarchy=0** à **systemd.unified_cgroup_hierarchy=1** dans la ligne **GRUB_CMDLINE_LINUX_DEFAULT** : +
- +
-<code> +
-root@debian11:~# vi /etc/default/grub +
-root@debian11:~# cat /etc/default/grub +
-# If you change this file, run 'update-grub' afterwards to update +
-# /boot/grub/grub.cfg. +
-# For full documentation of the options in this file, see: +
-#   info -f grub -n 'Simple configuration' +
- +
-GRUB_DEFAULT=0 +
-GRUB_TIMEOUT=5 +
-GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +
-GRUB_CMDLINE_LINUX_DEFAULT="quiet systemd.unified_cgroup_hierarchy=1" +
-GRUB_CMDLINE_LINUX="" +
- +
-# Uncomment to enable BadRAM filtering, modify to suit your needs +
-# This works with Linux (no patch required) and with any kernel that obtains +
-# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) +
-#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" +
- +
-# Uncomment to disable graphical terminal (grub-pc only) +
-#GRUB_TERMINAL=console +
- +
-# The resolution used on graphical terminal +
-# note that you can use only modes which your graphic card supports via VBE +
-# you can see them in real GRUB with the command `vbeinfo' +
-#GRUB_GFXMODE=640x480 +
- +
-# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux +
-#GRUB_DISABLE_LINUX_UUID=true +
- +
-# Uncomment to disable generation of recovery mode menu entries +
-#GRUB_DISABLE_RECOVERY="true" +
- +
-# Uncomment to get a beep at grub start +
-#GRUB_INIT_TUNE="480 440 1" +
- +
-root@debian11:~# grub-mkconfig -o /boot/grub/grub.cfg  +
-Generating grub configuration file ... +
-Found background image: /usr/share/images/desktop-base/desktop-grub.png +
-Found linux image: /boot/vmlinuz-5.10.0-13-amd64 +
-Found initrd image: /boot/initrd.img-5.10.0-13-amd64 +
-done +
-</code> +
- +
-Redémarrez ensuite votre VM : +
- +
-<code> +
-root@debian11:~# reboot +
-</code> +
- +
-===6.2 - Présentation===+
  
 A l'opposé des cgroups v1, cgroup v2 n'a qu'une seule arborescence ou hiérarchie et donc un seul point de montage. Tous les contrôleurs compatibles v2 qui ne sont pas liés à une hiérarchie v1 sont automatiquement liés à la hiérarchie v2. Un contrôleur inactif dans la hiérarchie v2 peut être lié à un autre hiérarchie. La migration d'un contrôleur d'une hiérarchie à une autre hiérarchie n'est possible que dans le cas où le contrôleur est désactivé et n'est plus référencé dans la hiérarchie d'origine. A l'opposé des cgroups v1, cgroup v2 n'a qu'une seule arborescence ou hiérarchie et donc un seul point de montage. Tous les contrôleurs compatibles v2 qui ne sont pas liés à une hiérarchie v1 sont automatiquement liés à la hiérarchie v2. Un contrôleur inactif dans la hiérarchie v2 peut être lié à un autre hiérarchie. La migration d'un contrôleur d'une hiérarchie à une autre hiérarchie n'est possible que dans le cas où le contrôleur est désactivé et n'est plus référencé dans la hiérarchie d'origine.
Ligne 4072: Ligne 3473:
 </code> </code>
  
-===6.- Limitation de la CPU===+===5.- Limitation de la CPU===
  
 Il existe deux façons de limiter les ressources de la CPU : Il existe deux façons de limiter les ressources de la CPU :
Ligne 4348: Ligne 3749:
 </code> </code>
  
-===6.- La Commande systemctl set-property===+===5.- La Commande systemctl set-property===
  
 Comme déjà vu, systemd organise les processus dans des **slices**, par exemple les utilisateurs sont regroupés dans **/sys/fs/cgroup/user.slice** : Comme déjà vu, systemd organise les processus dans des **slices**, par exemple les utilisateurs sont regroupés dans **/sys/fs/cgroup/user.slice** :
Ligne 4465: Ligne 3866:
  
 ----- -----
-Copyright © 2023 Hugh Norris.+Copyright © 2024 Hugh Norris.
Menu