Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       set_mempolicy - stabilește politica implicită de memorie NUMA pentru un fir și copiii acestuia

BIBLIOTECA

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

SINOPSIS

       #include <numaif.h>

       long set_mempolicy(int mod, const unsigned long *nodemask,
                          unsigned long maxnode);

DESCRIERE

       set_mempolicy()  stabilește  politica  de  memorie  NUMA  a  firului  apelant, care constă într-un mod de
       politică și zero sau mai multe noduri, la valorile specificate de argumentele mode, nodemask și maxnode.

       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.

       Acest apel de sistem definește politica implicită pentru firele de execuție. Politica firelor de execuție
       guvernează  alocarea  de  pagini  în  spațiul  de  adrese  al procesului în afara intervalelor de memorie
       controlate de o politică mai specifică stabilită de mbind(2). Politica implicită a  firelor  de  execuție
       controlează,  de  asemenea, alocarea oricăror pagini pentru fișierele cu memorie alocată utilizând apelul
       mmap(2) cu fanionul MAP_PRIVATE și care sunt citite (încărcate) numai de către firul  de  execuție  și  a
       fișierelor  cu  memorie  alocată  utilizând apelul mmap(2) cu fanionul MAP_SHARED, indiferent de tipul de
       acces. Politica este aplicată numai atunci când o nouă pagină este  alocată  pentru  firul  de  execuție.
       Pentru  memoria  anonimă,  acest  lucru se întâmplă atunci când pagina este accesată pentru prima dată de
       către firul de execuție.

       Argumentul  mod  trebuie   să   specifice   unul   dintre   MPOL_DEFAULT,   MPOL_BIND,   MPOL_INTERLEAVE,
       MPOL_WEIGHTED_INTERLEAVE,  MPOL_PREFERRED  sau  MPOL_LOCAL (care sunt descrise în detaliu în continuare).
       Toate modurile, cu excepția MPOL_DEFAULT, necesită ca apelantul să specifice nodul sau nodurile  la  care
       se aplică modul, prin intermediul argumentului nodemask.

       Argumentul mod poate include, de asemenea, un fanion de mod opțional. Fanioanele mod acceptate sunt:

       MPOL_F_NUMA_BALANCING (începând cu Linux 5.12)
              Atunci  când  mod  este MPOL_BIND, se activează echilibrarea NUMA a nucleului pentru sarcină, dacă
              aceasta este acceptată de nucleu. Dacă fanionul nu este acceptat de nucleu sau este utilizat cu un
              mod altul decât MPOL_BIND, se returnează -1 și errno este configurată la EINVAL.

       MPOL_F_RELATIVE_NODES (începând cu Linux 2.6.26)
              Un argument nodemask nevid specifică ID-urile nodurilor care sunt relative la setul de ID-uri  ale
              nodurilor  permise  de  „cpuset-ul”  curent  al  procesului (limitarea la subseturile de noduri de
              procesare și de memorie actuală a procesului).

       MPOL_F_STATIC_NODES (începând cu Linux 2.6.26)
              Un argument nodemask nevid specifică ID-urile nodurilor fizice. Linux nu va  repoziționa  nodemask
              atunci  când  procesul se mută într-un context cpuset diferit și nici atunci când se schimbă setul
              de noduri permise de contextul cpuset curent al procesului.

       nodemask indică o mască de biți a ID-urilor nodurilor care conține  până  la  maxnode  biți.  Dimensiunea
       măștii de biți este rotunjită la următorul multiplu de sizeof(unsigned long), dar nucleul va utiliza biți
       numai  până  la  maxnode.  O valoare NULL a nodemask sau o valoare maxnode de zero specifică setul gol de
       noduri. Dacă valoarea lui maxnode este zero, argumentul nodemask este ignorat.

       Atunci când este necesară o mască de noduri nodemask, aceasta trebuie să conțină cel puțin  un  nod  care
       este  activ, permis de contextul cpuset curent al procesului (cu excepția cazului în care este specificat
       fanionul de mod MPOL_F_STATIC_NODES) și conține memorie. Dacă MPOL_F_STATIC_NODES este definit în mod  și
       o  mască  de  noduri  nodemask necesară nu conține noduri care sunt permise de contextul cpuset curent al
       procesului, politica de memorie revine la alocarea locală local allocation.  Aceasta  prevalează  efectiv
       asupra  politicii  specificate până când contextul cpuset al procesului include unul sau mai multe noduri
       specificate de nodemask.

       Argumentul mod trebuie să includă una dintre următoarele valori:

       MPOL_DEFAULT
              Acest mod specifică faptul că orice politică de  memorie  a  firelor  de  execuție  care  nu  este
              implicită  este  eliminată,  astfel  încât  politica  de  memorie „revine” la politica implicită a
              sistemului. Politica implicită a sistemului este „alocare locală” -- adică, alocarea  memoriei  pe
              nodul  CPU care a declanșat alocarea. Masca de noduri nodemask trebuie să fie specificată ca NULL.
              Dacă „nodul local” nu conține memorie liberă, sistemul va încerca să aloce memorie de  pe  un  nod
              „apropiat”.

       MPOL_BIND
              Acest  mod  definește  o  politică  strictă  care  restricționează alocarea de memorie la nodurile
              specificate în nodemask. Dacă nodemask specifică mai mult de  un  nod,  alocările  de  pagini  vor
              proveni  mai  întâi  de  la  nodul  cu cel mai mic ID de nod numeric, până când nodul respectiv nu
              conține memorie liberă. Alocările vor veni apoi de la nodul cu următorul ID de nod  cel  mai  mare
              specificat  în  nodemask  și  așa  mai  departe, până când niciunul dintre nodurile specificate nu
              conține memorie liberă. Paginile nu vor fi alocate din niciun  nod  care  nu  este  specificat  în
              nodemask.

       MPOL_INTERLEAVE
              Acest  mod  intercalează  alocările  de  pagini  între nodurile specificate în nodemask în ordinea
              numerică a ID-ului nodului. Acest lucru optimizează lățimea  de  bandă  în  loc  de  latență  prin
              repartizarea  paginilor  și a accesărilor de memorie la acele pagini pe mai multe noduri. Cu toate
              acestea, accesul la o singură pagină va fi în continuare limitat la lățimea de bandă de memorie  a
              unui singur nod.

       MPOL_WEIGHTED_INTERLEAVE (începând cu Linux 6.9)
              Acest  mod  intercalează  alocările de pagini între nodurile specificate în nodemask în funcție de
              ponderile din /sys/kernel/mm/mempolicy/weighted_interleave. De exemplu, dacă biții 0, 2 și 5  sunt
              definiți  în nodemask, iar conținutul /sys/kernel/mm/mempolicy/weighted_interleave/node0, /sys/...
              /node2, și /sys/.../node5 sunt 4, 7 și, respectiv, 9, atunci paginile din această regiune  vor  fi
              alocate nodurilor 0, 2 și 5 într-un raport 4:7:9.

       MPOL_PREFERRED
              Acest  mod  stabilește nodul preferat pentru alocare. Nucleul va încerca să aloce mai întâi pagini
              din acest nod și va reveni la nodurile „apropiate” dacă nodul preferat are puțină memorie  liberă.
              Dacă  nodemask  specifică  mai  mult  de  un ID de nod, primul nod din mască va fi selectat ca nod
              preferat. Dacă argumentele nodemask și maxnode specifică  setul  gol,  atunci  politica  specifică
              „alocare locală” (precum politica implicită a sistemului discutată mai sus).

       MPOL_LOCAL (începând cu Linux 3.8)
              Acest  mod specifică „alocare locală”; memoria este alocată pe nodul CPU care a declanșat alocarea
              („nodul local”). Argumentele nodemask și maxnode trebuie  să  specifice  setul  gol.  Dacă  „nodul
              local”  are puțină memorie liberă, nucleul va încerca să aloce memorie din alte noduri. Nucleul va
              aloca memorie din „nodul local” ori de câte ori este disponibilă memorie pentru  acest  nod.  Dacă
              „nodul local” nu este permis de contextul cpuset curent al procesului, nucleul va încerca să aloce
              memorie din alte noduri. Nucleul va aloca memorie din „nodul local” ori de câte ori aceasta devine
              permisă de contextul cpuset curent al procesului.

       Politica  de  memorie  a  firelor  de  execuție  este  păstrată  pe parcursul unui apel execve(2) și este
       moștenită de firele de execuție copii create utilizând fork(2) sau clone(2).

VALOAREA RETURNATĂ

       În caz de succes, set_mempolicy() returnează 0; în  caz  de  eroare,  se  returnează  -1  și  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 Argumentul mod nu este valid. Sau, mod este MPOL_DEFAULT și  masca  de  noduri  nodemask  nu  este
              goală,  sau  mod este MPOL_BIND sau MPOL_INTERLEAVE și nodemask este goală. Sau, maxnode specifică
              mai mult de o pagină de biți. Sau, nodemask specifică unul sau mai multe ID-uri de nod  care  sunt
              mai  mari  decât  ID-ul maxim de nod acceptat. Sau, niciunul dintre ID-urile de nod specificate de
              nodemask nu este activ și permis de contextul cpuset curent al  procesului,  sau  niciunul  dintre
              nodurile specificate nu conține memorie. Sau argumentul mod a specificat atât MPOL_F_STATIC_NODES,
              cât  și  MPOL_F_RELATIVE_NODES.  Sau,  MPOL_F_NUMA_BALANCING  nu  este acceptat de nucleu sau este
              utilizat cu un mod altul decât MPOL_BIND.

       ENOMEM Nu a fost disponibilă suficientă memorie pentru nucleu.

STANDARDE

       Linux.

ISTORIC

       Linux 2.6.7.

NOTE

       Politica de memorie nu este reținută dacă pagina este transferată. Atunci când o astfel  de  pagină  este
       reimportată  în  memoriei, aceasta va utiliza politica firului sau a intervalului de memorie care este în
       vigoare la momentul alocării paginii.

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

CONSULTAȚI ȘI

       get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), 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 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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                   set_mempolicy(2)