numa(7)

NUME
numa - prezentare generală a arhitecturii de memorie neuniformă

DESCRIERE
Accesul neuniform la memorie (NUMA) se referă la sistemele multiprocesor a căror memorie este împărțită în mai multe noduri de memorie. Timpul de acces al unui nod de memorie depinde de locațiile relative ale procesorului care face accesul și ale nodului accesat; (acest lucru contrastează cu un sistem multiprocesor simetric, în care timpul de acces la toată memoria este același pentru toate CPU-urile). În mod normal, fiecare CPU dintr-un sistem NUMA are un nod de memorie local al cărui conținut poate fi accesat mai repede decât memoria din nodul local al unui alt CPU sau memoria de pe o magistrală partajată de toate CPU-urile.

  Apeluri de sistem NUMA
Nucleul Linux implementează următoarele apeluri de sistem legate de NUMA: get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2) și set_mempolicy(2). Cu toate acestea, în mod normal, aplicațiile ar trebui să utilizeze interfața oferită de libnuma; a se vedea secțiunea "Suport pentru bibliotecă" de mai jos.

  /proc/pid/numa_maps (începând cu Linux 2.6.14)
Acest fișier afișează informații despre politica și alocarea memoriei NUMA a unui proces.

Fiecare linie conține informații despre un interval de memorie utilizat de proces, afișând, printre altele, politica de memorie efectivă pentru acel interval de memorie și pe ce noduri au fost alocate paginile.

numa_maps este un fișier numai pentru citire. Atunci când /proc/pid/numa_maps este citit, nucleul va scana spațiul virtual de adrese al procesului și va raporta modul în care este utilizată memoria. Se afișează câte o linie pentru fiecare interval de memorie unic al procesului.

Primul câmp al fiecărei linii indică adresa de început a intervalului de memorie. Acest câmp permite o corelare cu conținutul fișierului /proc/pid/maps, care conține adresa de sfârșit a intervalului și alte informații, cum ar fi permisiunile de acces și partajarea.

Al doilea câmp arată politica de memorie în vigoare în prezent pentru intervalul de memorie. Rețineți că politica în vigoare nu este neapărat politica instalată de proces pentru acel interval de memorie. Mai exact, dacă procesul a instalat o politică „implicită” pentru intervalul respectiv, politica efectivă pentru acest interval va fi politica procesului, care poate fi sau nu „implicită”.

Restul liniei conține informații despre paginile alocate în intervalul de memorie, după cum urmează:

N<node>=<număr-pagini>
    Numărul de pagini alocate pe <nod>. <nr_pages> include numai paginile alocate în prezent de către proces. Este posibil ca migrarea paginilor și recuperarea memoriei să aibă pagini temporar nemarcate asociate cu acest interval de memorie. Aceste pagini pot apărea din nou numai după ce procesul a încercat să le facă referire. În cazul în care intervalul de memorie reprezintă o zonă de memorie partajată sau o cartografiere de fișiere, este posibil ca alte procese să aibă în prezent pagini suplimentare cartografiate într-un interval de memorie corespunzător.

file=<nume-fișier>
    Fișierul care stochează intervalul de memorie. În cazul în care fișierul este cartografiat ca fiind privat, este posibil ca accesele în scriere să fi generat pagini COW („Copy-On-Write”, copiere la scriere) în acest interval de memorie. Aceste pagini sunt afișate ca pagini anonime.

heap
    Intervalul de memorie este utilizat pentru grămadă „heap”.

stack
    Intervalul de memorie este utilizat pentru stivă.

huge
    Interval de memorie imens. Numărul de pagini indicat reprezintă pagini imense și nu pagini de dimensiuni normale.

anon=<pagini>
    Numărul de pagini anonime din interval.

dirty=<pagini>
    Numărul de pagini murdare „dirty”.

mapped=<pagini>
    Numărul total de pagini cartografiate, dacă este diferit de paginile murdare „dirty” și anonime „anon”.

mapmax=<număr>
    Numărul maxim de procese de cartografiere (numărul de procese care cartografiază o singură pagină) întâlnit în timpul scanării. Acesta poate fi utilizat ca indicator al gradului de partajare care are loc într-un anumit interval de memorie.

swapcache=<număr>
    Numărul de pagini care au o intrare asociată pe un dispozitiv swap (memorie virtuală).

active=<pagini>
    Numărul de pagini din lista activă. Acest câmp este afișat numai dacă este diferit de numărul de pagini din acest interval. Aceasta înseamnă că în intervalul de memorie există unele pagini inactive care pot fi eliminate din memorie de către gestionarul de memorie virtuală (swap) în curând.

writeback=<pagini>
    Numărul de pagini care sunt în curs de scriere pe disc.

STANDARDE
Niciunul.

NOTE
Apelurile de sistem Linux NUMA și interfața /proc sunt disponibile numai dacă nucleul a fost configurat și construit cu opțiunea CONFIG_NUMA.

  Suport pentru bibliotecă
Face editarea de legături cu -lnuma pentru a obține definițiile apelurilor de sistem. libnuma și antetul necesar <numaif.h> sunt disponibile în pachetul numactl.

Cu toate acestea, aplicațiile nu ar trebui să utilizeze direct aceste apeluri de sistem. În schimb, se recomandă utilizarea interfeței de nivel superior oferită de funcțiile numa(3) din pachetul numactl. Pachetul numactl este disponibil la adresa ftp://oss.sgi.com/www/projects/libnuma/download/. Pachetul este, de asemenea, inclus în unele distribuții Linux. Unele distribuții includ biblioteca de dezvoltare și antetul în pachetul separat numactl-devel.

CONSULTAȚI ȘI
get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3), cpuset(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.