Rechercher une page de manuel

Chercher une autre page de manuel:

sched_getaffinity

Autres langues

Langue: fr

Autres versions - même langue

Version: 3 février 2006 (ubuntu - 01/11/07)

Section: 2 (Appels système)

NOM

sched_setaffinity, sched_getaffinity, CPU_CLR, CPU_ISSET, CPU_SET, CPU_ZERO - 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 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);

DESCRIPTION

Le masque d'affinité CPU d'un processus détermine l'ensemble de processeurs sur lesquels il est susceptible de s'exécuter. Sur un système multiprocesseur, fixer le masque d'affinité CPU permet d'obtenir une meilleure performance. Par exemple, en dédiant un CPU à un processus particulier (c'est-à-dire fixer le masque d'affinité de ce processus pour indiquer un seul CPU, et fixer le masque d'affinité de tous les autres processus pour exclure ce CPU), il est possible d'assurer une vitesse d'exécution maximale pour ce processus. Restreindre un processus pour qu'il ne s'exécute que sur un seul CPU réduit le coût lié à l'invalidation du cache qui se produit lorsqu'un processus cesse de s'exécuter sur un CPU puis est relancé sur un autre CPU.

Une 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() ajoutent et suppriment respectivement un CPU donné d'un ensemble. CPU_ISSET() teste l'appartenance d'un CPU à l'ensemble ; ceci est utile après l'invocation de sched_getaffinity(). Le premier CPU disponible sur le système correspond à une valeur de cpu de 0, le CPU suivant correspond à une valeur de cpu de 1, et ainsi de suite. La constante CPU_SETSIZE (1024) indique une valeur de 1 de plus que le plus grand numéro de CPU pouvant être stocké dans un ensemble de CPU.

sched_setaffinity() fixe le masque d'affinité CPU du processus dont l'identifiant est pid à la valeur donnée par mask. Si pid est 0, le processus appelant est utilisé. L'argument cpusetsize est la taille (en octets) 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 pas actuellement en cours d'exécution sur l'un des CPU spécifiés dans mask, alors ce processus est migré vers l'un des CPU spécifiés dans mask.

La fonction sched_getaffinity() écrit dans la structure cpu_set_t pointée par mask le masque de préférences du processus pid. L'argument cpusetsize indique la taille (en octets) de mask. Si pid vaut zéro, le masque du processus en cours est renvoyé.

VALEUR RENVOYÉE

sched_setaffinity() et sched_getaffinity() renvoient 0 s'ils réussissent. En cas d'échec, -1 est renvoyé, et errno contient le code d'erreur.

ERREURS

EFAULT
Une adresse mémoire est invalide.
EINVAL
Le masque des préférences ne contient pas de processeurs présents sur le système, ou cpusetsize est plus petit que la taille du masque d'affinité utilisé par le noyau.
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.
ESRCH
Le processus numéro pid n'existe pas.

CONFORMITÉ

Ces appels système sont spécifiques à Linux.

NOTES

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 gettid(2) peut être passée dans l'argument pid.

Un processus fils créé par fork(2) hérite du masque d'affinité CPU de son père. Le masque d'affinité est conservé après un execve(2).

Cette page de manuel décrit l'interface de la glibc pour les appels liés à l'affinité CPU. L'interface des appels système est légèrement différente, mask ayant le type unsigned long *, montrant le fait que l'implémentation des ensembles de CPU est en réalité un simple masque de bits. En cas de succès, l'appel système sched_getaffinity() brut renvoie la taille (en bits) du type cpumask_t utilisé en interne par le noyau pour représenter le masque d'ensemble de CPU.

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. Au départ, les interfaces de la glibc avaient un argument cpusetsize. Dans glibc 2.3.3, cet argument a été supprimé, mais il a été réintroduit dans glibc 2.3.4.

VOIR AUSSI

clone(2), getpriority(2), gettid(2), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getscheduler(2), sched_setscheduler(2), setpriority(2), capabilities(7)

sched_setscheduler(2) décrit les politiques d'ordonnancement sous Linux.

TRADUCTION

Cette page de manuel a été traduite et mise à jour par Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise à disposition sur http://manpagesfr.free.fr/.

Les mises à jour et corrections de la version présente dans Debian sont directement gérées par Julien Cristau <jcristau@debian.org> et l'équipe francophone de traduction de Debian.

Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».

> Je vais finaliser au mieux Antibug et LookOut + MDOS
> pour le 15 juillet, je vais alors me dépêcher de mettre
> tout cela en téléchargement depuis des sites Internet
> tels que download.com et tucows.com afin de voir si
> mes logiciels respectent bien tout leurs principes et
> ceci me permettra donc de faire la publicité de MDOS. (jayce)

Ils sont assez tolérant dans leurs principe, cependant je crains qu'ils
n'acceptent plus les programmes MS-DOS. Vu qu'ils doivent recevoir des
dizaines de programmes par jour, il faudra bien leur expliquer que celui
ci tourne sous DOS tout simplement parce que c'est en fait un OS.
-- Bloozed2000 - ... --