get_mempolicy(2)

NUME
get_mempolicy - recuperează politica de memorie NUMA pentru un fir de execuție

BIBLIOTECA
Biblioteca de politici NUMA („Non-Uniform Memory Access”: acces neuniform la memorie) (libnuma, -lnuma)

SINOPSIS
#include <numaif.h>

long get_mempolicy(int *mode,
                   unsigned long nodemask[(.maxnode + ULONG_WIDTH - 1)
/ ULONG_WIDTH],
                   unsigned long maxnode, void *addr,
                   unsigned long flags);

DESCRIERE
get_mempolicy() recuperează politica NUMA a firului apelant sau a unei adrese de memorie, în funcție de valoarea lui flags.

O mașină NUMA are diferite controloare de memorie cu distanțe diferite față de diferitele CPU-uri. Politica de memorie definește din ce nod este alocată memoria pentru firul de execuție.

Dacă flags este specificat ca fiind 0, atunci sunt returnate informații despre politica implicită a firului apelant (așa cum a fost stabilită de set_mempolicy(2)), în memoriile tampon indicate de mode și nodemask. Valoarea returnată în aceste argumente poate fi utilizată pentru a readuce politica firului la starea sa din momentul apelului la get_mempolicy() folosind set_mempolicy(2). Atunci când flags este 0, addr trebuie să fie specificat ca NULL.

Dacă flags specifică MPOL_F_MEMS_ALLOWED (disponibil începând cu Linux 2.6.24), argumentul mode este ignorat, iar setul de noduri (memorii) pe care firul de execuție are voie să le specifice în apelurile ulterioare către mbind(2) sau set_mempolicy(2) (în absența oricărui indicator mode flags) este returnat în nodemask. Nu este permisă combinarea MPOL_F_MEMS_ALLOWED cu MPOL_F_ADDR sau MPOL_F_NODE.

În cazul în care flags specifică MPOL_F_ADDR, atunci sunt returnate informații despre politica care guvernează adresa de memorie indicată în addr. Această politică poate fi diferită de politica implicită a firului de execuție dacă mbind(2) sau una dintre funcțiile de ajutor descrise în numa(3) a fost utilizată pentru a stabili o politică pentru intervalul de memorie care conține addr.

Dacă argumentul mode nu este NULL, atunci get_mempolicy() va stoca modul de politică și orice indicatori opționali mode flags ai politicii NUMA solicitate în locația indicată de acest argument. Dacă nodemask nu este NULL, atunci masca de nod asociată politicii va fi stocată în locația indicată de acest argument. maxnode specifică numărul de ID-uri de nod care pot fi stocate în nodemask, adică ID-ul maxim de nod plus unu. Valoarea specificată de maxnode este întotdeauna rotunjită la un multiplu de sizeof(unsigned long)*8.

Dacă flags specifică atât MPOL_F_NODE, cât și MPOL_F_ADDR, get_mempolicy() va returna ID-ul nodului pe care adresa addr este alocată în locația indicată de mode. În cazul în care nu a fost alocată încă nicio pagină pentru adresa specificată, get_mempolicy() va aloca o pagină ca și cum firul de execuție ar fi efectuat un acces de citire (încărcare) la adresa respectivă și va returna ID-ul nodului în care a fost alocată pagina respectivă.

În cazul în care flags specifică MPOL_F_NODE, dar nu MPOL_F_ADDR, iar politica curentă a firului este MPOL_INTERLEAVE sau MPOL_WEIGHTED_INTERLEAVE, atunci get_mempolicy() va returna în locația indicată de un argument mode non-NULL, ID-ul de nod al nodului următor care va fi utilizat pentru intercalarea paginilor interne ale nucleului alocate în numele firului. Aceste alocări includ paginile pentru fișiere alocate în memorie în intervalele de memorie ale procesului, alocate cu ajutorul apelului mmap(2) cu indicatorul MAP_PRIVATE pentru accesări de citire și în intervalele de memorie alocate cu indicatorul MAP_SHARED pentru toate accesările.

Alte valori ale fanionului sunt rezervate.

Pentru o prezentare generală a politicilor posibile, a se vedea set_mempolicy(2).

VALOAREA RETURNATĂ
În caz de succes, get_mempolicy() returnează 0; în caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EFAULT
    O parte din tot intervalul de memorie specificat de nodemask și maxnode indică în afara spațiului de adrese accesibil.

EINVAL
    Valoarea specificată de maxnode este mai mică decât numărul de ID-uri de noduri acceptate de sistem. Sau flags a specificat alte valori decât MPOL_F_NODE sau MPOL_F_ADDR; sau flags a specificat MPOL_F_ADDR și addr este NULL, sau flags nu a specificat MPOL_F_ADDR și addr nu este NULL. Sau, flags a specificat MPOL_F_NODE, dar nu MPOL_F_ADDR, iar politica curentă a firelor nu este MPOL_INTERLEAVE nici MPOL_WEIGHTED_INTERLEAVE. Sau, flags a specificat MPOL_F_MEMS_ALLOWED fie cu MPOL_F_ADDR, fie cu MPOL_F_NODE; (și mai există și alte cazuri EINVAL).

STANDARDE
Linux.

ISTORIC
Linux 2.6.7.

NOTE
Pentru informații privind suportul de bibliotecă, consultați numa(7).

CONSULTAȚI ȘI
getcpu(2), mbind(2), mmap(2), set_mempolicy(2), numa(3), numa(7), numactl(8)

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

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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.