man sched_setaffinity (Appels systèmes) - Définir et récupérer le masque d'affinité CPU d'un processus
NOM
sched_setaffinity, sched_getaffinity - Définir et récupérer le masque d'affinité CPU d'un processus
SYNOPSIS
#include <sched.h> int sched_setaffinity(pid_t pid, unsigned int lg, unsigned long *masque); int sched_getaffinity(pid_t pid, unsigned int lg, unsigned long *masque);
DESCRIPTION
sched_setaffinity fixe le masque des préférences du processus pid vis-à-vis du CPU. Si pid vaut zéro, il s'agit du processus appelant. Les préférences sont représentées par les bits stockés dans le masque. Le bit de moindre poids représente le numéro logique du premier processeur, tandis que le bit de poids le plus fort représente le numéro de dernier processeur. Un bit activé correspond à un processeur utilisable pour l'ordonnancement alors qu'un bit inhibé représente un processeur refusé. En d'autres termes, le processus est attaché et ne s'exécutera que sur les processeurs dont les bits sont activés. D'habitude, tous les bits du masque sont validés. L'argument lg représente la longueur des données pointées par le masque. Normalement, il s'agit de la taille d'un mot du système. Pour assurer la compatibilité avec les futurs noyaux Linux, comme cette taille peut varier, le masque fourni doit être au moins aussi grand que le masque d'affinité stocké dans le noyau. La fonction sched_getaffinity écrit dans la zone pointée par masque (dont la taille est lg) le masque de préférences du processus pid. Si pid vaut zéro, le masque du processus en cours est renvoyé.
VALEUR RENVOYÉE
S'ils réussissent sched_setaffinity et sched_getaffinity renvoient tous deux zéro. S'ils échouent, ils renvoient -1 et errno sera rempli avec le code d'erreur.
ERREURS
- EFAULT
- Une adresse mémoire est invalide.
- ESRCH
- Impossible de trouver le processus du pid indiqué.
- EPERM
- Le processus appelant n'a pas les privilèges appropriés. Le processus qui invoque sched_setaffinity doit avoir un UID effectif égal à l'UID effectif ou réel du processus identifié par pid, ou avoir la capacité CAP_SYS_NICE.
- EINVAL
- Le masque des préférences ne contient pas de processeurs présents sur le système, ou lg est plus petit que la taille du masque d'affinité utilisé par le noyau.
HISTORIQUE
Les appels-système d'affinité ont été introduit dans Linux 2.5.8. Les appels-bibliothèque ont été introduit dans glibc 2.3 et sont encore présents dans glibc 2.3.2. Les versions de développement postérieures à glibc 2.3.2 ont modifié cette interface en une sans le champ len, et les versions suivantes sont revenues en arrière. Le prototype glibc est à présent
/* Définir l'affinité CPU d'une tâche */ extern int sched_setaffinity (pid_t pid, size_t cpusetsize, const cpu_set_t *cpuset); /* Récupérer l'affinité CPU d'une tâche */ extern int sched_getaffinity (pid_t pid, size_t cpusetsize, cpu_set_t *cpuset);
VOIR AUSSI
sched_setscheduler(2), sched_getscheduler(2), sched_get_priority_max(2), sched_get_priority_min(2), nice(2), setpriority(2), getpriority(2),
sched_setscheduler(2) décrit le fonctionnement de l'ordonnancement sous Linux.
TRADUCTION
Christophe Blaess, 1996-2003.