set_mempolicy(2) System Calls Manual set_mempolicy(2) NUME set_mempolicy - stabilete politica implicita 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 long set_mempolicy(int mod, const unsigned long *nodemask, unsigned long maxnode); DESCRIERE set_mempolicy() stabilete politica de memorie NUMA a firului apelant, care consta intr-un mod de politica i zero sau mai multe noduri, la valorile specificate de argumentele mode, nodemask i maxnode. O maina NUMA are diferite controloare de memorie cu distane diferite faa de diferitele CPU-uri. Politica de memorie definete din ce nod este alocata memoria pentru firul de execuie. Acest apel de sistem definete politica implicita pentru firele de execuie. Politica firelor de execuie guverneaza alocarea de pagini in spaiul de adrese al procesului in afara intervalelor de memorie controlate de o politica mai specifica stabilita de mbind(2). Politica implicita a firelor de execuie controleaza, de asemenea, alocarea oricaror pagini pentru fiierele cu memorie alocata utilizand apelul mmap(2) cu fanionul MAP_PRIVATE i care sunt citite (incarcate) numai de catre firul de execuie i a fiierelor cu memorie alocata utilizand apelul mmap(2) cu fanionul MAP_SHARED, indiferent de tipul de acces. Politica este aplicata numai atunci cand o noua pagina este alocata pentru firul de execuie. Pentru memoria anonima, acest lucru se intampla atunci cand pagina este accesata pentru prima data de catre firul de execuie. Argumentul mod trebuie sa specifice unul dintre MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE, MPOL_WEIGHTED_INTERLEAVE, MPOL_PREFERRED sau MPOL_LOCAL (care sunt descrise in detaliu in continuare). Toate modurile, cu excepia MPOL_DEFAULT, necesita ca apelantul sa specifice nodul sau nodurile la care se aplica modul, prin intermediul argumentului nodemask. Argumentul mod poate include, de asemenea, un fanion de mod opional. Fanioanele mod acceptate sunt: MPOL_F_NUMA_BALANCING (incepand cu Linux 5.12) Atunci cand mod este MPOL_BIND, se activeaza echilibrarea NUMA a nucleului pentru sarcina, daca aceasta este acceptata de nucleu. Daca fanionul nu este acceptat de nucleu sau este utilizat cu un mod altul decat MPOL_BIND, se returneaza -1 i errno este configurata la EINVAL. MPOL_F_RELATIVE_NODES (incepand cu Linux 2.6.26) Un argument nodemask nevid specifica 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 actuala a procesului). MPOL_F_STATIC_NODES (incepand cu Linux 2.6.26) Un argument nodemask nevid specifica ID-urile nodurilor fizice. Linux nu va repoziiona nodemask atunci cand procesul se muta intr-un context cpuset diferit i nici atunci cand se schimba setul de noduri permise de contextul cpuset curent al procesului. nodemask indica o masca de bii a ID-urilor nodurilor care conine pana la maxnode bii. Dimensiunea matii de bii este rotunjita la urmatorul multiplu de sizeof(unsigned long), dar nucleul va utiliza bii numai pana la maxnode. O valoare NULL a nodemask sau o valoare maxnode de zero specifica setul gol de noduri. Daca valoarea lui maxnode este zero, argumentul nodemask este ignorat. Atunci cand este necesara o masca de noduri nodemask, aceasta trebuie sa conina cel puin un nod care este activ, permis de contextul cpuset curent al procesului (cu excepia cazului in care este specificat fanionul de mod MPOL_F_STATIC_NODES) i conine memorie. Daca MPOL_F_STATIC_NODES este definit in mod i o masca de noduri nodemask necesara nu conine noduri care sunt permise de contextul cpuset curent al procesului, politica de memorie revine la alocarea locala local allocation. Aceasta prevaleaza efectiv asupra politicii specificate pana cand contextul cpuset al procesului include unul sau mai multe noduri specificate de nodemask. Argumentul mod trebuie sa includa una dintre urmatoarele valori: MPOL_DEFAULT Acest mod specifica faptul ca orice politica de memorie a firelor de execuie care nu este implicita este eliminata, astfel incat politica de memorie ,,revine" la politica implicita a sistemului. Politica implicita a sistemului este ,,alocare locala" -- adica, alocarea memoriei pe nodul CPU care a declanat alocarea. Masca de noduri nodemask trebuie sa fie specificata ca NULL. Daca ,,nodul local" nu conine memorie libera, sistemul va incerca sa aloce memorie de pe un nod ,,apropiat". MPOL_BIND Acest mod definete o politica stricta care restricioneaza alocarea de memorie la nodurile specificate in nodemask. Daca nodemask specifica mai mult de un nod, alocarile de pagini vor proveni mai intai de la nodul cu cel mai mic ID de nod numeric, pana cand nodul respectiv nu conine memorie libera. Alocarile vor veni apoi de la nodul cu urmatorul ID de nod cel mai mare specificat in nodemask i aa mai departe, pana cand niciunul dintre nodurile specificate nu conine memorie libera. Paginile nu vor fi alocate din niciun nod care nu este specificat in nodemask. MPOL_INTERLEAVE Acest mod intercaleaza alocarile de pagini intre nodurile specificate in nodemask in ordinea numerica a ID-ului nodului. Acest lucru optimizeaza laimea de banda in loc de latena prin repartizarea paginilor i a accesarilor de memorie la acele pagini pe mai multe noduri. Cu toate acestea, accesul la o singura pagina va fi in continuare limitat la laimea de banda de memorie a unui singur nod. MPOL_WEIGHTED_INTERLEAVE (incepand cu Linux 6.9) Acest mod intercaleaza alocarile de pagini intre nodurile specificate in nodemask in funcie de ponderile din /sys/kernel/mm/mempolicy/weighted_interleave. De exemplu, daca biii 0, 2 i 5 sunt definii in nodemask, iar coninutul /sys/kernel/mm/mempolicy/weighted_interleave/node0, /sys/... /node2, i /sys/.../node5 sunt 4, 7 i, respectiv, 9, atunci paginile din aceasta regiune vor fi alocate nodurilor 0, 2 i 5 intr-un raport 4:7:9. MPOL_PREFERRED Acest mod stabilete nodul preferat pentru alocare. Nucleul va incerca sa aloce mai intai pagini din acest nod i va reveni la nodurile ,,apropiate" daca nodul preferat are puina memorie libera. Daca nodemask specifica mai mult de un ID de nod, primul nod din masca va fi selectat ca nod preferat. Daca argumentele nodemask i maxnode specifica setul gol, atunci politica specifica ,,alocare locala" (precum politica implicita a sistemului discutata mai sus). MPOL_LOCAL (incepand cu Linux 3.8) Acest mod specifica ,,alocare locala"; memoria este alocata pe nodul CPU care a declanat alocarea (,,nodul local"). Argumentele nodemask i maxnode trebuie sa specifice setul gol. Daca ,,nodul local" are puina memorie libera, nucleul va incerca sa aloce memorie din alte noduri. Nucleul va aloca memorie din ,,nodul local" ori de cate ori este disponibila memorie pentru acest nod. Daca ,,nodul local" nu este permis de contextul cpuset curent al procesului, nucleul va incerca sa aloce memorie din alte noduri. Nucleul va aloca memorie din ,,nodul local" ori de cate ori aceasta devine permisa de contextul cpuset curent al procesului. Politica de memorie a firelor de execuie este pastrata pe parcursul unui apel execve(2) i este motenita de firele de execuie copii create utilizand fork(2) sau clone(2). VALOAREA RETURNATA In caz de succes, set_mempolicy() returneaza 0; in caz de eroare, se returneaza -1 i errno este configurata pentru a indica eroarea. ERORI-IEIRE EFAULT O parte din tot intervalul de memorie specificat de nodemask i maxnode indica in afara spaiului de adrese accesibil. EINVAL Argumentul mod nu este valid. Sau, mod este MPOL_DEFAULT i masca de noduri nodemask nu este goala, sau mod este MPOL_BIND sau MPOL_INTERLEAVE i nodemask este goala. Sau, maxnode specifica mai mult de o pagina de bii. Sau, nodemask specifica unul sau mai multe ID-uri de nod care sunt mai mari decat 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 conine memorie. Sau argumentul mod a specificat atat MPOL_F_STATIC_NODES, cat i MPOL_F_RELATIVE_NODES. Sau, MPOL_F_NUMA_BALANCING nu este acceptat de nucleu sau este utilizat cu un mod altul decat MPOL_BIND. ENOMEM Nu a fost disponibila suficienta memorie pentru nucleu. STANDARDE Linux. ISTORIC Linux 2.6.7. NOTE Politica de memorie nu este reinuta daca pagina este transferata. Atunci cand o astfel de pagina este reimportata in memoriei, aceasta va utiliza politica firului sau a intervalului de memorie care este in vigoare la momentul alocarii paginii. Pentru informaii privind suportul de biblioteca, consultai numa(7). CONSULTAI I get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), numa(7), numactl(8) 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 2 mai 2024 set_mempolicy(2)