Sistemele de operare Linux și macOS utilizează un concept esențial numit memorie virtuală. Să analizăm cum aceasta influențează performanța sistemului, gestionarea resurselor și impactul asupra componentelor hardware.
Ce reprezintă memoria virtuală?
Fiecare computer dispune de o cantitate limitată de memorie fizică, denumită memorie RAM. Această resursă este administrată de nucleul sistemului, fiind distribuită între sistemul de operare și aplicațiile active. Dar ce se întâmplă când cerințele de memorie depășesc capacitatea RAM instalată?
Sistemele de operare Linux și macOS rezolvă această problemă folosind o zonă specială pe hard disk, numită „spațiu de swap”. Acest spațiu este tratat ca o extensie a memoriei RAM, formând ceea ce cunoaștem ca memorie virtuală.
Nucleul Linux are capacitatea de a muta blocuri de memorie din RAM în spațiul de swap, eliberând astfel memoria fizică pentru alte procese. Atunci când datele stocate în spațiul de swap sunt din nou necesare, acestea sunt readuse în RAM. Acest proces poartă numele de „paginare”.
Deși memoria virtuală oferă o soluție la limitările de RAM, accesul la aceasta este mai lent comparativ cu memoria fizică. În plus, utilizarea intensivă a memoriei virtuale generează un efort suplimentar pentru procesor și unitatea de disc. Procesorul trebuie să aloce mai mult timp pentru paginare, iar unitatea de disc este solicitată cu numeroase operații de citire și scriere.
Linux pune la dispoziție comanda `vmstat`, un instrument util pentru monitorizarea activității memoriei virtuale, oferind statistici detaliate despre utilizarea resurselor.
Explorarea Comenzii `vmstat`
Executarea comenzii `vmstat` fără parametri afișează un set de valori medii, calculate de la ultima repornire a sistemului. Aceste valori nu reprezintă o imagine instantanee a stării actuale a sistemului.
vmstat
Rezultatul este prezentat sub forma unui tabel scurt, organizat pe coloane denumite „Procs”, „Memory”, „Swap”, „IO”, „System” și „CPU”. Coloana „CPU” prezintă informații despre procesor.
Urmează descrierea detaliată a datelor furnizate de fiecare coloană:
Proc |
r: Numărul de procese care sunt eligibile pentru execuție. Acestea fie rulează activ, fie așteaptă rândul la procesor. b: Numărul de procese aflate în stare de somn neîntrerupt. Aceste procese sunt blocate în timpul operațiilor de sistem și nu pot fi întrerupte până la finalizarea sarcinii curente. |
Memory |
swpd: Cantitatea de memorie virtuală utilizată (memoria paginată). free: Cantitatea de memorie RAM inactivă (neutilizată). buff: Cantitatea de memorie utilizată ca buffer. cache: Cantitatea de memorie utilizată ca cache. |
Swap |
si: Cantitatea de memorie mutată din spațiul de swap în RAM. so: Cantitatea de memorie mutată din RAM în spațiul de swap. |
IO |
bi: Blocuri de date primite de la un dispozitiv de stocare (datele aduse din spațiul de swap în RAM). bo: Blocuri de date trimise către un dispozitiv de stocare (datele mutate din RAM în spațiul de swap). |
System |
in: Numărul de întreruperi pe secundă, inclusiv cele ale ceasului sistemului. cs: Numărul de schimbări de context pe secundă (trecerea de la modul kernel la modul utilizator). |
CPU |
Valorile din această secțiune reprezintă procentele din timpul total de utilizare al procesorului: us: Timpul alocat rulării codului aplicațiilor (modul utilizator). sy: Timpul alocat rulării codului nucleului. id: Timpul în care procesorul a fost inactiv. wa: Timpul în care procesorul a așteptat finalizarea operațiilor de intrare/ieșire. st: Timpul „furat” de o mașină virtuală (timpul pe care o mașină virtuală trebuie să-l aștepte până când hypervisorul își finalizează operațiile). |
Utilizarea Intervale de Timp și Contorizări
Comanda `vmstat` poate fi configurată pentru a genera actualizări periodice ale statisticilor, folosind o valoare de întârziere (în secunde). Pentru a afișa statisticile la fiecare 5 secunde, se poate folosi comanda:
vmstat 5
Pentru a opri această actualizare continuă, trebuie să apăsați combinația de taste Ctrl+C.
Pentru a preveni suprasolicitarea sistemului în timpul monitorizării intensive, se recomandă folosirea unei valori de numărare, care specifică numărul de actualizări înainte de a se opri automat. Dacă nu se specifică o valoare de numărare, `vmstat` va rula continuu până la oprirea manuală (Ctrl+C).
De exemplu, pentru a obține patru actualizări ale statisticilor, la fiecare 5 secunde, se folosește:
vmstat 5 4
După afișarea celor patru actualizări, comanda se oprește.
Schimbarea Unităților de Măsură
Opțiunea `-S` (urmată de `k`, `K`, `m` sau `M`) permite afișarea memoriei și a statisticilor de swap în kiloocteți sau megaocteți. Aceste opțiuni reprezintă:
- k: 1000 de octeți
- K: 1024 de octeți
- m: 1000000 de octeți
- M: 1048576 octeți
Comanda următoare va afișa statisticile la fiecare 10 secunde, cu memoria și spațiul de swap afișate în megaocteți:
vmstat 10 -S M
Este important de reținut că opțiunea `-S` nu afectează statisticile blocurilor IO, care sunt întotdeauna afișate în blocuri.
Memorie Activă și Inactivă
Utilizând opțiunea `-a`, coloanele `buff` și `cache` sunt înlocuite de coloanele `inactive` și `active`, indicând cantitatea de memorie inactivă și activă. Această modificare poate fi utilă pentru o analiză mai detaliată a utilizării memoriei.
Pentru a afișa aceste coloane, se utilizează comanda:
vmstat 5 -a -S M
Rețineți că opțiunea `-S` afectează și afișarea valorilor pentru coloanele `inactive` și `active`.
Analiza Fork-urilor
Opțiunea `-f` afișează numărul de furcături (forks) care au avut loc de la pornirea sistemului. Un „fork” apare atunci când un proces nou este lansat.
vmstat -f
Acest afișaj nu se actualizează, furnizând doar o valoare cumulativă.
Slabinfo – Monitorizarea Memoriei Nucleului
Nucleul sistemului de operare utilizează, de asemenea, mecanisme proprii de gestionare a memoriei, folosind un sistem numit „plăci” (slabs). Plăcile sunt segmente de memorie pre-alocate, optimizate pentru diferitele tipuri de obiecte de date pe care nucleul le gestionează. Această tehnică îmbunătățește eficiența alocării și dealocării memoriei în interiorul nucleului.
Pentru a analiza statisticile plăcilor, se folosește opțiunea `-m`. Deoarece rezultatul poate fi voluminos, se recomandă folosirea `less` pentru a facilita vizualizarea. Pentru aceasta, este necesar să folosiți `sudo` și să introduceți parola de administrator.
sudo vmstat -m | less
Rezultatul este afișat sub forma unui tabel cu cinci coloane:
- Cache: Numele cache-ului.
- num: Numărul de obiecte active din cache.
- total: Numărul total de obiecte disponibile în cache.
- dimensiune: Dimensiunea fiecărui obiect din cache.
- pagini: Numărul total de pagini de memorie alocate cache-ului.
Pentru a ieși din `less`, se apasă tasta `q`.
Statistici de Evenimente și Memorie
Opțiunea `-s` (minuscul) afișează statistici detaliate despre evenimente și memoria sistemului. Aceste informații includ statistici similare cu cele afișate de `vmstat` implicit, dar cu o prezentare mai detaliată.
vmstat -s
De exemplu, ieșirea standard combină timpul de procesor al utilizatorului, inclusiv cel `nice`, în coloana `us`, în timp ce opțiunea `-s` prezintă aceste statistici separat.
Statistici Detaliate ale Discului
Opțiunea `-d` oferă statistici detaliate despre operațiile de disc, listând informații despre citiri, scrieri și activitatea IO.
vmstat -d | less
Pentru fiecare disc, sunt afișate trei coloane principale: Citiri (`Reads`), Scrieri (`Writes`) și IO. Coloana IO din dreapta este măsurată în secunde, în timp ce statisticile bazate pe timp din coloanele `Reads` și `Writes` sunt măsurate în milisecunde.
Iată semnificația fiecărei coloane:
Citiri (Reads) |
total: Numărul total de citiri efectuate de pe disc. îmbinat: Numărul total de citiri grupate. sectoare: Numărul total de sectoare citite. ms: Timpul total în milisecunde alocat citirii datelor de pe disc. |
Scrieri (Writes) |
total: Numărul total de scrieri efectuate pe disc. îmbinat: Numărul total de scrieri grupate. sectoare: Numărul total de sectoare scrise pe disc. ms: Timpul total în milisecunde alocat scrierii datelor pe disc. |
IO |
cur: Numărul de operații de citire sau scriere curente pe disc. sec: Timpul în secunde alocat operațiilor de citire sau scriere curente. |
Statistici Rezumate ale Discului
Opțiunea `-D` (majuscul) oferă un sumar rapid al statisticilor de activitate a discului.
vmstat -D
Numărul de discuri afișate poate părea neobișnuit de mare, mai ales pe sisteme care utilizează aplicații Snap în Ubuntu, deoarece acestea generează dispozitive pseudo squashfs atașate ca dispozitive loop.
Statistici pe Partiții
Pentru a analiza statisticile unei partiții specifice, se folosește opțiunea `-p` urmată de identificatorul partiției ca parametru (de exemplu, `sda1`, unde `sda` este discul principal, iar `1` reprezintă prima partiție).
vmstat -p sda1
Rezultatul afișează numărul total de citiri și scrieri pe disc, precum și numărul de sectoare implicate în aceste operații pentru partiția selectată.
Concluzii
Înțelegerea modului în care funcționează sistemul de operare și instrumentele de monitorizare disponibile, cum ar fi `vmstat`, oferă o perspectivă valoroasă asupra gestionării resurselor și a performanței sistemului. Acum, aveți la dispoziție cunoștințele și instrumentul necesar pentru a monitoriza activitatea memoriei virtuale, a procesorului și a discului, fapt ce vă va ajuta în diagnosticarea problemelor și în optimizarea performanței.