3.4. cpuset
Le sous-système
cpuset
assigne les CPU individuels et les noeuds de mémoire à des groupes de contrôle. Chaque cpuset peut être spécifié en fonction des paramètres suivants, chacun dans un pseudo-fichier différent du système de fichiers virtuel du groupe de contrôle :
Important
Certains sous-systèmes ont des paramètres obligatoires à définir avant de pouvoir déplacer une tâche dans un groupe de contrôle qui utilise l'un de ces sous-systèmes. Par exemple, avant de déplacer une tâche dans un cgroup qui utilise le sous-système
cpuset
. les paramètres cpuset.cpus
et cpuset.mems
doivent être définis pour ce cgroup.
- cpuset.cpus (obligatoire)
- spécifie à quels CPU les tâches dans ce groupe de contrôle ont la permission d'accéder. Ceci est une liste séparée par des virgules sous le format ASCII, avec des tirets ("
-
") pour représenter l'étendue. Par exemple :0-2,16
représente les CPUs 0, 1, 2, et 16. - cpuset.mems (obligatoire)
- spécifie les noeuds de mémoire auxquels les tâches de ce groupe de contrôle auront la permission d'accéder. Ceci est une liste séparée par des virgules sous le format ASCII, avec des tirets ("
-
") pour repésenter l'étendue. Par exemple,0-2,16
représente les noeuds de mémoire 0, 1, 2, et 16. - cpuset.memory_migrate
- contient un indicateur (
0
ou1
) spécifiant si une page en mémoire devrait migrer vers un nouveau noeud si les valeurs danscpuset.mems
changent. Par défaut, la migration de mémoire est désactivée (0
) et les pages restent sur le noeud auquel elles ont été assignées à l'origine, même si celui-ci ne fait maintenant plus partie des noeuds spécifiés danscpuset.mems
. Si la migration est activée (1
), le système migrera les pages vers les noeuds de mémoire faisant partie des nouveaux paramètres spécifiés parcpuset.mems
, tout en maintenant leur position respective dans la mesure du possible — par exemple, les pages sur le second noeud sur la liste spécifiée à l'origine parcpuset.mems
seront allouées au second noeud sur la liste maintenant spécifiée parcpuset.mems
, si cette position est disponible. - cpuset.cpu_exclusive
- contient un indicateur (
0
ou1
) spécifiant si des cpusets autres que celui-ci, que ses parents ou que ses enfants peuvent partager les CPUs spécifiés pour ce cpuset. Par défaut (0
), les CPUs ne sont pas exclusivement alloués à un seul cpuset. - cpuset.mem_exclusive
- contient un indicateur (
0
ou1
) spécifiant si d'autres cpusets peuvent partager les noeuds de mémoire spécifiés pour ce cpuset. Par défaut (0
), les noeuds de mémoire ne sont pas exclusivement alloués à un seul cpuset. Réserver des noeuds de mémoire pour une utilisation exclusive d'un seul cpuset ((1
) est fonctionnellement la même chose qu'activer un hardwall de mémoire aveccpuset.mem_hardwall
. - cpuset.mem_hardwall
- contient un indicateur (
0
ou1
) spécifiant si les allocations au noyau de pages mémoire et de données de tampon devraient être restreintes aux noeuds de mémoire spécifiés pour ce cpuset. Par défaut (0
), les pages et les données de tampon sont partagées par les processus appartenant à de multiples utilisateurs. Avec un hardwall activé (1
), la mémoire allouée aux tâches de chaque utilisateur peut être séparée de la mémoire allouée aux tâches de tous les autres utilisateurs. - cpuset.memory_pressure
- un fichier en lecture seule qui contient une moyenne en cours d'exécution de la solicitation de mémoire (memory pressure), créée par les processus dans ce cpuset. La valeur dans ce pseudofichier est automatiquement mise à jour lorsque
cpuset.memory_pressure_enabled
est activé, sinon le pseudofichier contient la valeur0
. - cpuset.memory_pressure_enabled
- contient un indicateur (
0
ou1
) spécifiant si le système doit calculer la solicitation de mémoire (memory pressure) créée par les processus dans ce groupe de contrôle. Les valeurs calculées sortent danscpuset.memory_pressure
et représentent le taux auquel les processus tentent de libérer la mémoire utilisée, ces valeurs sont rapportées en chiffres entiers et s'expliquent par le nombre de tentatives de récupération de mémoire par seconde, multiplié par 1000. - cpuset.memory_spread_page
- contient un indicateur (
0
ou1
) spécifiant si les tampons de systèmes de fichiers doivent être placés de manière régulièresur les noeuds de mémoire alloués à ce cpuset. Par défaut (0
), aucune tentative de placer les pages de mémoire sur ces tampons de manière régulière n'est faite, et ceux-ci sont placés sur le noeud où le processus qui les a créés est en cours d'exécution. - cpuset.memory_spread_slab
- contient un indicateur (
0
ou1
) spécifiant si les caches slab du noyau pour opérations d'entrée/sortie doivet être placés de manière régulière sur le cpuset. Par défaut (0
), aucune tentative de placer les caches slab du noyau de manière régulière n'est faite, et ceux-ci sont placés sur le noeud où le processus qui les a créés est en cours d'exécution. - cpuset.sched_load_balance
- contient un indicateur (
0
ou1
) spécifiant si le noyau va équilibrer les charges sur les CPU dans ce cpuset. Par défaut (1
), le noyau équilibre les charges en déplaçant les processus des CPUs surchargés sur des CPUs moins solicités.Remarquez cependant que définir cet indicateur dans un cgroup n'a aucun effet si l'équilibrage des charges est activé dans tout cgroup parent, car l'équilibrage des charges est déjà en cours à un niveau plus élevé. Ainsi, pour désactiver l'équilibrage des charges dans un cgroup, désactivez aussi l'équilibrage des charges dans chacun de ses parents dans la hiérarchie. Dans ce cas, vous devriez aussi vous demander si l'équilibrage des charges devrait être activé sur les autres relations de même parenté du groupe de contrôle en question. - cpuset.sched_relax_domain_level
- contient un entier entre
-1
et une petite valeur positive, qui représente la largeur de l'étendue des CPUs sur laquelle le noyau va essayer d'équilibrer les charges. Cette valeur n'a aucun sens sicpuset.sched_load_balance
est désactivé.L'effet précis de cette valeur varie en fonction de l'architecture du système, mais les valeurs suivantes sont typiques :Valeurs de cpuset.sched_relax_domain_levelValeur Effet -1
Utilise la valeur par défaut du système pour l'équilibrage des charges 0
N'effectue pas d'équilibrage des charges immédiat ; équilibre les charges de manière périodique uniquement 1
Équilibre immédiatement les charges sur les threads du même coeur 2
Équilibre immédiatement les charges sur les coeurs dans le même paquetage 3
Équilibre immédiatement les charges sur les CPUs du même noeud ou de la même lame 4
Équilibre immédiatement les charges sur plusieurs CPUs sur des architectures à accès non uniforme à la mémoire (NUMA) 5
Équilibre immédiatement les charges sur tous les CPUs sur architectures avec NUMA