Scroll to navigation

getcpu(2) System Calls Manual getcpu(2)

NUME

getcpu - determină CPU-ul și nodul NUMA pe care rulează firul apelant

BIBLIOTECA

Biblioteca C standard (libc, -lc)

REZUMAT

#define _GNU_SOURCE             /* Consultați feature_test_macros(7) */
#include <sched.h>
int getcpu(unsigned int *_Nullable cpu, unsigned int *_Nullable node);

DESCRIERE

Apelul de sistem getcpu() identifică procesorul și nodul pe care se execută în prezent firul sau procesul apelant și le scrie în numerele întregi indicate de argumentele cpu și nod. Procesorul este un număr întreg mic și unic care identifică un procesor. Nodul este un identificator mic unic care identifică un nod NUMA. Atunci când cpu sau nod este NULL, nu se scrie nimic în indicatorul respectiv.

Informațiile plasate în cpu sunt garantate a fi actuale doar în momentul apelului: dacă afinitatea procesorului nu a fost fixată folosind sched_setaffinity(2), nucleul poate schimba procesorul în orice moment; (în mod normal, acest lucru nu se întâmplă, deoarece planificatorul încearcă să minimizeze mișcările între CPU-uri pentru a menține memoria cache în funcțiune, dar este posibil). Apelantul trebuie să ia în considerare posibilitatea ca informațiile returnate în cpu și node să nu mai fie actuale în momentul în care apelul returnează.

VALOAREA RETURNATĂ

În caz de succes, se returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI

Argumentele indică în afara spațiului de adrese al procesului apelant.

VERSIUNI

getcpu() a fost adăugat în Linux 2.6.19 pentru x86-64 și i386. Suportul pentru bibliotecă a fost adăugat în glibc 2.29 (versiunile anterioare ale glibc nu ofereau o funcție învăluitoare pentru acest apel de sistem, fiind necesară utilizarea syscall(2)).

STANDARDE

getcpu() este specific Linux.

NOTE

Linux depune toate eforturile pentru a efectua acest apel cât mai repede posibil; (pe unele arhitecturi, acest lucru se face prin intermediul unei implementări în vdso(7)). Intenția lui getcpu() este de a permite programelor să facă optimizări cu date per-CPU sau pentru optimizarea NUMA.

Diferențe între biblioteca C și nucleu

Apelul de sistem al nucleului are un al treilea argument:


int getcpu(unsigned int *cpu, unsigned int *node,
           struct getcpu_cache *tcache);

Argumentul tcache este nefolosit începând cu Linux 2.6.24 și (atunci când se invocă direct apelul de sistem) ar trebui să fie specificat ca NULL, cu excepția cazului în care este necesară portabilitatea la Linux 2.6.23 sau la o versiune anterioară.

În Linux 2.6.23 și versiunile anterioare, dacă argumentul tcache nu era NULL, atunci acesta specifica un indicator către o memorie tampon alocată de apelant în memoria locală a firului de execuție care era utilizată pentru a furniza un mecanism de stocare în cache pentru getcpu(). Utilizarea cache-ului putea accelera apelurile getcpu(), cu prețul că exista o șansă foarte mică ca informațiile returnate să nu mai fie actualizate. S-a considerat că mecanismul de stocare în cache ar putea cauza probleme la migrarea firelor de execuție între CPU-uri, astfel că argumentul este acum ignorat.

CONSULTAȚI ȘI

mbind(2), sched_setaffinity(2), set_mempolicy(2), sched_getcpu(3), cpuset(7), vdso(7)

TRADUCERE

Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

4 decembrie 2022 Pagini de manual de Linux 6.03