migrate_pages(2) | System Calls Manual | migrate_pages(2) |
NUME
migrate_pages - mută toate paginile dintr-un proces către un alt set de noduri
BIBLIOTECA
Biblioteca de politici NUMA („Non-Uniform Memory Access”: acces neuniform la memorie) (libnuma, -lnuma)
SINOPSIS
#include <numaif.h>
long migrate_pages(int pid, unsigned long maxnode, const unsigned long *old_nodes, const unsigned long *new_nodes);
DESCRIERE
migrate_pages() încearcă să mute toate paginile procesului pid care se află în nodurile de memorie old_nodes în nodurile de memorie din new_nodes. Paginile care nu se află în niciun nod din old_nodes nu vor fi migrate. Pe cât posibil, nucleul păstrează relația topologică relativă în interiorul old_nodes în timpul migrării către new_nodes.
Argumentele old_nodes și new_nodes sunt indicatori la măști de biți de numere de noduri, cu până la maxnode biți în fiecare mască. Aceste măști sunt păstrate ca matrice de numere întregi fără semn long (în ultimul număr întreg long, biții dincolo de cei specificați de maxnode sunt ignorați). Argumentul maxnode este numărul maxim de noduri din masca de biți plus unu (este același ca în mbind(2), dar diferit de select(2)).
Argumentul pid este ID-ul procesului ale cărui pagini urmează să fie mutate. Pentru a muta pagini într-un alt proces, apelantul trebuie să fie privilegiat (CAP_SYS_NICE) sau ID-ul real sau efectiv al utilizatorului procesului apelant trebuie să coincidă cu ID-ul real sau cu ID-ul utilizatorului salvat al procesului țintă. Dacă pid este 0, atunci migrate_pages() mută paginile procesului apelant.
Paginile partajate cu un alt proces vor fi mutate numai dacă procesul inițiator are privilegiul CAP_SYS_NICE.
VALOAREA RETURNATĂ
În caz de succes, migrate_pages() returnează numărul de pagini care nu au putut fi mutate (de exemplu, un răspuns zero înseamnă că toate paginile au fost mutate cu succes). În caz de eroare, returnează -1 și configurează errno pentru a indica eroarea.
ERORI-IEȘIRE
- EFAULT
- O parte sau întregul interval de memorie specificat de old_nodes/new_nodes și maxnode se află în afara spațiului de adrese accesibil.
- EINVAL
- Valoarea specificată de maxnode depășește o limită impusă de nucleu. Sau, old_nodes sau new_nodes specifică unul sau mai multe ID-uri de nod care sunt mai mari decât ID-ul de nod maxim acceptat. Sau, niciunul dintre ID-urile de noduri specificate de new_nodes nu este în linie și nu este permis de contextul cpuset curent al procesului sau niciunul dintre nodurile specificate nu conține memorie.
- EPERM
- Privilegiu insuficient (CAP_SYS_NICE) pentru a muta pagini ale procesului specificat de pid sau privilegiu insuficient (CAP_SYS_NICE) pentru a accesa nodurile țintă specificate.
- ESRCH
- Nu a putut fi găsit niciun proces care să corespundă cu pid.
STANDARDE
Linux.
ISTORIC
Linux 2.6.16.
NOTE
Pentru informații privind suportul de bibliotecă, consultați numa(7).
Utilizați get_mempolicy(2) cu indicatorul MPOL_F_MEMS_ALLOWED pentru a obține setul de noduri care sunt permise de cpuset-ul procesului apelant. Rețineți că aceste informații pot fi modificate în orice moment prin reconfigurarea manuală sau automată a cpuset-ului.
Utilizarea migrate_pages() poate avea ca rezultat pagini a căror locație (nod) încalcă politica de memorie stabilită pentru adresele specificate (a se vedea mbind(2)) și/sau procesul specificat (a se vedea set_mempolicy(2)). Adică, politica de memorie nu constrânge nodurile de destinație utilizate de migrate_pages().
Antetul <numaif.h> nu este inclus în glibc, ci necesită instalarea libnuma-devel sau a unui pachet similar.
CONSULTAȚI ȘI
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8), numastat(8)
Documentation/vm/page_migration.rst în arborele sursă al nucleului Linux
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.
2 mai 2024 | Pagini de manual de Linux 6.8 |