#define _GNU_SOURCE #include <sched.h> int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask); int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask); void CPU_CLR(int cpu, cpu_set_t *set);
int CPU_ISSET(int cpu, cpu_set_t *set);
void CPU_SET(int cpu, cpu_set_t *set);
void CPU_ZERO(cpu_set_t *set);
Un masque d'affinité CPU est représenté par la structure cpu_set_t, un « ensemble de CPU », pointée par mask. Quatre macros sont fournies pour manipuler ces ensembles. CPU_ZERO() vide un ensemble. CPU_SET() et CPU_CLR() ajoute et retire, respectivement, la CPU indiquée d'un ensemble. CPU_ISSET() teste l'appartenance de la CPU à un ensemble ; cela est utile après le retour de sched_getaffinity(). La première CPU disponible sur le système correspond à une valeur cpu de 0, la CPU suivante correspond à une valeur cpu de 1, et ainsi de suite. La constante CPU_SETSIZE (1024) indique une valeur de un de plus que le nombre maximum de CPU qui peuvent appartenir à un ensemble de CPU.
sched_setaffinity() fixe le masque d'affinité CPU du processus dont l'identifiant est pid à la valeur indiquée dans mask. Si pid vaut zéro, il s'agit du processus appelant. L'argument cpusetsize est la taille (en octet) de la structure pointée par mask. Normalement, cet argument doit être spécifié comme sizeof(cpu_set_t).
Si le processus indiqué par pid n'est actuellement pas en cours d'exécution sur l'une des CPU spécifiées dans mask, le processus est déplacé sur l'une des CPU spécifiées dans mask.
sched_getaffinity() écrit le masque d'affinité du processus dont l'identifiant est pid dans la structure cpu_set_t pointée par mask. L'argument cpusetsize indique la taille (en octets) de mask. Si pid vaut zéro, le masque du processus appelant est renvoyé.
Le masque d'affinité est en réalité un attribut de thread qui peut être modifié indépendamment pour chacun des threads d'un groupe de threads. La valeur renvoyée par un appel à gettid(2) peut être passée à l'argument pid. Définir pid à 0 positionnera l'attribut pour le thread actuel et passer une valeur égale à celle renvoyée par un appel à getpid(2) positionnera l'attribut pour le thread principal du groupe de threads.
Un processus fils créé avec fork(2) hérite du masque d'affinité CPU de son père. Le masque d'affinité est préservé à travers un execve(2).
Cette page de manuel décrit l'interface de la glibc pour les appels d'affinité CPU. L'interface actuelle des appels système est légèrement différente, mask ayant pour type unsigned long *, reflétant le fait que l'implémentation sous-jacente des ensembles de CPU est en réalité un simple masque de bits. S'il réussit, l'appel système brut sched_getaffinity() renvoie la taille (en octets) du type de donnée cpumask_t utilisé en interne par le noyau pour représenter le masque de bits de l'ensemble CPU.
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 18 juillet 2003 et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 sched_setaffinity ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 17 juillet 2008