pthread_setaffinity_np(3) Library Functions Manual pthread_setaffinity_np(3) NUME pthread_setaffinity_np, pthread_getaffinity_np - stabilete/obine afinitatea CPU a unui fir BIBLIOTECA Biblioteca de fire de execuie POSIX (libpthread, -lpthread) SINOPSIS #define _GNU_SOURCE /* Consultai feature_test_macros(7) */ #include 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); DESCRIERE Funcia pthread_setaffinity_np() stabilete masca de afinitate CPU a firului thread la setul de CPU indicat de cpuset. Daca apelul are succes, iar firul nu ruleaza in prezent pe unul dintre CPU-urile din cpuset, atunci acesta este migrat catre unul dintre acele CPU-uri. Funcia pthread_getaffinity_np() returneaza masca de afinitate CPU a firului thread in memoria tampon indicata de cpuset. Pentru mai multe detalii despre matile de afinitate CPU, consultai sched_setaffinity(2). Pentru o descriere a unui set de macrocomenzi care pot fi utilizate pentru a manipula i inspecta seturile de CPU, consultai CPU_SET(3). Argumentul cpusetsize este lungimea (in octei) a memoriei tampon indicate de cpuset. De obicei, acest argument ar fi specificat ca sizeof(cpu_set_t); (poate fi o alta valoare, daca se utilizeaza macrocomenzile descrise in CPU_SET(3) pentru alocarea dinamica a unui set CPU). VALOAREA RETURNATA In caz de succes, aceste funcii returneaza 0; in caz de eroare, ele returneaza un numar de eroare diferit de zero. ERORI-IEIRE EFAULT Adresa de memorie furnizata nu a fost valida. EINVAL (pthread_setaffinity_np()) Masca de bii de afinitate mask nu conine niciun procesor care se afla in prezent fizic pe sistem i care este permis firului de execuie in conformitate cu orice restricii care pot fi impuse de mecanismul ,,cpuset" descris in cpuset(7). EINVAL (pthread_setaffinity_np()) cpuset a specificat un CPU care se afla in afara setului acceptat de nucleu; (opiunea de configurare a nucleului CONFIG_NR_CPUS definete intervalul setului acceptat de tipul de date al nucleului utilizat pentru a reprezenta seturile de CPU). EINVAL (pthread_getaffinity_np()) cpusetsize este mai mica decat dimensiunea matii de afinitate utilizata de nucleu. ESRCH Nu a putut fi gasit niciun fir de execuie cu identificatorul thread. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |pthread_setaffinity_np(), | Sigurana firelor | MT-Safe | |pthread_getaffinity_np() | | | +--------------------------------------+---------------------+---------+ STANDARDE GNU; de aici i sufixul ,,_np" (neportabil) din denumiri. ISTORIC glibc 2.3.4. Numai in glibc 2.3.3, au fost furnizate versiuni ale acestor funcii care nu aveau un argument cpusetsize. In schimb, dimensiunea setului de procesoare transmisa apelurilor de sistem subiacente era intotdeauna sizeof(cpu_set_t). NOTE Dupa un apel la pthread_setaffinity_np(), setul de CPU-uri pe care se va executa efectiv firul este intersecia dintre setul specificat in argumentul cpuset i setul de CPU-uri prezente efectiv in sistem. Sistemul poate restriciona i mai mult setul de CPU-uri pe care ruleaza firul de execuie daca se utilizeaza mecanismul ,,cpuset" descris in cpuset(7). Aceste restricii privind setul real de CPU-uri pe care va rula firul sunt impuse in mod silenios de catre nucleu. Aceste funcii sunt implementate pe baza apelurilor de sistem sched_setaffinity(2) i sched_getaffinity(2). Un nou fir creat de pthread_create(3) motenete o copie a matii de afinitate CPU a creatorului sau. EXEMPLE In urmatorul program, firul principal utilizeaza pthread_setaffinity_np() pentru a-i defini masca de afinitate CPU pentru a include CPU de la 0 la 7 (care pot sa nu fie toate disponibile in sistem) i apoi apeleaza pthread_getaffinity_np() pentru a verifica masca de afinitate CPU rezultata a firului. #define _GNU_SOURCE #include #include #include #include #include int main(void) { int s; cpu_set_t cpuset; pthread_t thread; thread = pthread_self(); /* Definete masca de afinitate pentru a include CPU de la 0 la 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"); /* Verifica masca de afinitate actuala atribuita firului. */ s = pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset); if (s != 0) errc(EXIT_FAILURE, s, "pthread_getaffinity_np"); printf("Setul returnat de pthread_getaffinity_np() conine:\n"); for (size_t j = 0; j < CPU_SETSIZE; j++) if (CPU_ISSET(j, &cpuset)) printf(" CPU %zu\n", j); exit(EXIT_SUCCESS); } CONSULTAI I sched_setaffinity(2), CPU_SET(3), pthread_attr_setaffinity_np(3), pthread_self(3), sched_getcpu(3), cpuset(7), pthreads(7), sched(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 pthread_setaffinity_np(3)