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)

REZUMAT
#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

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.

VERSIUNI
Apelul de sistem migrate_pages() a apărut pentru prima dată în Linux 2.6.16.

STANDARDE
Acest apel de sistem este specific pentru Linux.

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 creată 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.