Cgroup

De SeRoM - Wiki
Aller à : navigation, rechercher
Draft Draft / Brouillon
Cette page/chapitre est un brouillon, pas un article ou une règle, et peut être incomplète ou non-fiable! Vous êtes invités à faire des suggestions en page de discussion.

Mettre en place des cgroup

On commence par démarrer le démon cgconfig. C'est lui qui définir les groupes et leurs resources.

 chkconfig cgconfig on
 /etc/init.d/cgconfig start

Définir des limites aux cgroups

Dans le fichier /etc/cgconfig.conf après la section mount, vous pouvez créer vos groupes.

 group limitDB {
 	memory {
 		memory.limit_in_bytes = "256m";
 		memory.memsw.usage_in_bytes = "256m";
 	}
 	cpu {
 		cpu.shares = "900";
 	}
 	cpuset {
 		cpuset.cpus = 1,3,6-10;
 #for non NUMA
 		cpuset.mems = 0;
 #Or for NUMA it will be: 
 #  		cpuset.mems = 1,3,6-10;
 	}
 }

Pour avoir la liste des resources controllers ainsi que leurs paramètres en parcourant l'arborèscence de /cgroup.

 [root@server5 ~]# ls -l /cgroup/
 total 0
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 blkio
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 cpu
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 cpuacct
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 cpuset
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 devices
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 freezer
 drwxr-xr-x. 3 root root 0 Oct  1 18:28 memory
 drwxr-xr-x. 2 root root 0 Oct  1 18:28 net_cls
 [root@server5 ~]# ls -l /cgroup/cpu/
 total 0
 -r--r--r--. 1 root root 0 Oct  1 18:28 cgroup.procs
 -rw-r--r--. 1 root root 0 Oct  1 18:28 cpu.cfs_period_us
 -rw-r--r--. 1 root root 0 Oct  1 18:28 cpu.cfs_quota_us
 -rw-r--r--. 1 root root 0 Oct  1 18:28 cpu.rt_period_us
 -rw-r--r--. 1 root root 0 Oct  1 18:28 cpu.rt_runtime_us
 -rw-r--r--. 1 root root 0 Oct  1 18:28 cpu.shares
 -r--r--r--. 1 root root 0 Oct  1 18:28 cpu.stat
 -rw-r--r--. 1 root root 0 Oct  1 18:28 notify_on_release
 -rw-r--r--. 1 root root 0 Oct  1 18:28 release_agent
 -rw-r--r--. 1 root root 0 Oct  1 18:28 tasks

Tip

Tips

Malheureusement, la description des paramètres n'est pas documentée sur le système. Il faut aller sur internet (cfr le paragraphe doc ci-dessous).

Les contrôleurs principaux:

  • blkio: Limites de bande passante des périphériques blocs.
  • cpu: Limites sur les attributions de temps CPU
  • cpuset: Limites sur les allocations de CPU (ainsi que des régions mémoire pour les nodes NUMA).
  • memory: Limites sur les disponibilités mémoire RAM

Classification dans les cgroup

cgexec

Pour executer une commande dans un groupe:

 cgexec -g cpu:nomCGroup monProgramme

cgred

Le démon cfred va permettre de classer les process dans les bons cgroups.

 chkconfig cgred on
 /etc/init.d/cgred start

Attention

Attention

Limitation de cgred certains processus fils (ou thread) peuvent ne pas être classifié dans le bon cgroup.

Pour plus de fiabilité:

  • Lancer ses processus avec cgexec
  • Définir la variable CGROUP_DAEMON dans /etc/sysconfig/MyServiceName

Définir des règle de classification

Dans le fichier /etc/cgrules.conf vous pouvez créer vos règles de classification.

 john          cpu              usergroup/faculty/john/
 john:cp       cpu              usergroup/faculty/john/cp
 @student      cpu,memory       usergroup/student/
 peter         cpu              test1/
 %             memory           test2/
 @root          *               admingroup/
 *              *               default/

Attention

Attention

La * ne peut être utilisée que pour décrire tous les controllers uniquement si ils ont tous été défini pour le groupe dans cgconfig.conf.

Visualiser les cgroup des process

Pour lister tous les processus tournant sous un cgroup "monGroupe" du controller cpu:

 cat /cgroup/cpu/monGroupe/task

Et pour connaitre le cgroup d'un processus:

 cat /proc/<PID-duProcess>/cgroup

Doc