pthread_setaffinity_np
Table des matières
Retour à l'index
NOM
pthread_setaffinity_np, pthread_getaffinity_np - Définir et obtenir
l'affinité CPU d'un thread
BIBLIOTHÈQUE
Bibliothèque de threads POSIX (libpthread, -lpthread)
SYNOPSIS
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <pthread.h>
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
const cpu_set_t *cpuset);
int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,
cpu_set_t *cpuset);
DESCRIPTION
La fonction pthread_setaffinity_np() définit le masque d'affinité CPU du
thread thread comme étant l'ensemble de CPU pointé par cpuset. Si
l'appel réussit et que le thread n'est pas en cours d'exécution sur un des
CPU de cpuset, alors il est déplacé sur un de ces CPU.
La fonction pthread_getaffinity_np() renvoie, dans le tampon pointé par
cpuset, le masque d'affinité CPU du thread thread.
Pour plus de détails sur les masques d'affinité CPU, consultez
sched_setaffinity(2). Pour une description d'un jeu de macros qui peuvent
être utilisées pour manipuler et inspecter des ensembles de CPU, consultez
CPU_SET(3).
Le paramètre cpusetsize est la longueur (en octets) du tampon pointé par
cpuset. Typiquement, ce paramètre sera sizeof (cpu_set_t) (il peut
prendre d'autres valeurs, si on utilise les macros décrites dans
CPU_SET(3) pour allouer dynamiquement un ensemble de CPU).
VALEUR RENVOYÉE
En cas de succès, ces fonctions renvoient 0 ; en cas d'erreur, elles
renvoient un code d'erreur non nul.
ERREURS
- EFAULT
-
Une adresse mémoire fournie n'est pas correcte.
- EINVAL
-
(pthread_setaffinity_np()) Le masque de bits d'affinité mask ne
contient pas de processeurs qui soit actuellement physiquement sur le
système et autorisé pour le thread d'après les restrictions imposées par le
mécanisme d'ensembles de CPU décrit dans cpuset(7).
- EINVAL
-
(pthread_setaffinity_np()) Le cpuset indique un CPU en dehors de
l'ensemble pris en charge par le noyau (l'option de configuration du noyau
CONFIG_NR_CPUS définie l'intervalle de l'ensemble pris en charge par le
type de données du noyau utilisé pour représenter les ensembles de CPU).
- EINVAL
-
(pthread_getaffinity_np()) cpusetsize est plus petit que le taille du
masque d'affinité utilisé par le noyau.
- ESRCH
-
Aucun fil d’exécution avec pour identifiant thread n'a pu être trouvé.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
| Interface | Attribut | Valeur
|
|
pthread_setaffinity_np(),
pthread_getaffinity_np()
| Sécurité des threads | MT-Safe
|
STANDARDS
GNU ; d'où le suffixe « _np » (non portable) dans leur nom.
HISTORIQUE
glibc 2.3.4.
Dans la glibc 2.3.3, uniquement, les versions de ces fonctions n'avaient pas
de paramètre cpusetsize. À la place, la taille de l'ensemble de CPU
fourni à l'appel système sous-jacent était toujours sizeof(cpu_set_t).
NOTES
Après un appel à pthread_setaffinity_np(), l'ensemble de CPU sur lesquels
le processus s'exécutera est l'intersection de l'ensemble spécifié dans le
paramètre cpuset et l'ensemble des CPU actuellement présents sur le
système. Le système peut restreindre encore plus l'ensemble des CPU sur
lesquels le processus peut tourner si le mécanisme « cpuset », décrit dans
cpuset(7), est utilisé. Ces restrictions sur le véritable ensemble de CPU
sur lesquels le processus peut tourner sont imposées sans avertissement par
le noyau.
Ces fonctions sont implémentées en utilisant les appels système
sched_setaffinity(2) et sched_getaffinity(2).
Un nouveau thread créé avec pthread_create(3) hérite d'une copie du
masque d'affinité CPU de son créateur.
EXEMPLES
Dans le programme suivant, le thread principal utilise
pthread_setaffinity_np() pour définir son masque d'affinité CPU incluant
les CPU 0 à 7 (qui peuvent ne pas être tous présents sur le système), puis
appelle pthread_getaffinity_np() pour vérifier le masque d'affinité CPU
finalement utilisé pour le thread.
#define _GNU_SOURCE
#include <err.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int s;
cpu_set_t cpuset;
pthread_t thread;
thread = pthread_self();
/* Set affinity mask to include CPUs 0 to 7. */
CPU_ZERO(&cpuset);
for (size_t j = 0; j < 8; j++)
CPU_SET(j, &cpuset);
s = pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_setaffinity_np");
/* Check the actual affinity mask assigned to the thread. */
s = pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_getaffinity_np");
printf("Set returned by pthread_getaffinity_np() contained:\n");
for (size_t j = 0; j < CPU_SETSIZE; j++)
if (CPU_ISSET(j, &cpuset))
printf(" CPU %zu\n", j);
exit(EXIT_SUCCESS);
}
VOIR AUSSI
sched_setaffinity(2), CPU_SET(3), pthread_attr_setaffinity_np(3),
pthread_self(3), sched_getcpu(3), cpuset(7), pthreads(7),
sched(7)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- ATTRIBUTS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- EXEMPLES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:22 GMT, September 19, 2025