Administrarea Unix - încărcare fără procesor

Oricine este familiarizat cu sistemele de tip NIX știe despre excelenta comandă "de sus", care arată starea actuală a sistemului: utilizarea procesorului, alocarea RAM, încărcarea, procesele și așa mai departe.

În acest articol, aș dori să fac o prezentare generală a încărcării procesului pe FreeBSD OS, și anume, care etape trec de la setul de comandă top-P (ieșire de încărcare de către procesoare) la ieșirea de date de pe ecran.

După cum puteți vedea în screenshot - există informații despre 4 procesoare (sau nuclee), defalcate în funcție de încărcare: utilizator, frumos, sistem, întrerupere, inactiv. Să încercăm să obțineți singuri aceste date din kernel.

Pentru a accesa datele kernel-ului în FreeBSD, se folosește biblioteca libkvm și vom începe din aceasta. Aceste kerneluri sunt accesibile prin intermediul dispozitivului "/ dev / mem", astfel încât veți avea nevoie de acces la acesta în timpul experimentelor pe care le citiți. Puteți să vă adăugați la grupul kmem sau să experimentați cu superuserul (root).

Înainte de a determina volumul de lucru al procesoarelor - este necesar să se determine și cât de multe dintre ele sunt în sistem deloc? Pentru a face acest lucru, există o funcție:

Funcția va returna numărul de procesoare acceptate de sistem sau "-1" dacă apare o eroare. Numărul de procesoare acceptate nu este egal cu numărul de procesoare instalate.

Creați un șablon pentru lucrul cu kernelul:

Prima întrebare a sistemului - câte procesoare sunt suportate:

Apoi vom obține informații despre procesoare:

Datele despre fiecare procesor FreeBSD sunt transferate cu atenție la "struct pcpu". Doar din ea și vom primi informații despre volumul de muncă.

Returnează informații despre procesor (dacă este prezent sub numărul "CPU") sau NULL - dacă informațiile sunt inaccesibile (fără procesor).
În această structură, suntem interesați de "pc_cp_time" - statistici de procesoare:

Acordăm atenție modului în care este completat acest tablou:

Adică, «cpu [n] [CP_SYS]» - conține numărul de CPU căpușe apeluri de sistem de procesare, logodite «cpu [n] [CP_INTR]» - ticuri cheltuite pentru procesul de întrerupere. Apoi, este logic să presupunem - în cazul în care, după o anumită perioadă de timp pentru a re-aduna informații despre procesor, și scade din ea primul - puteți obține o sarcină a acestui procesor în căpușe.

Vă scriem cele de mai sus:

Ramane doar sa traducem acesti papagali intr-un interes clar. Cu acest simplu - se știe cât de mult a fost consumat căpușe în toate și câte cecuri o sarcină specifică. Calculam proporția de apariție a fiecărei sarcini în total:

Acum colectăm totul împreună și vedem ce sa întâmplat. Listarea programului:

Compilați și executați:

Probabil că ați acordat atenție, ce în totalul căpușelor pe fiecare procesor 127? Faptul este că nucleul colectează statistici cu o anumită periodicitate. Dacă pe scurt - atunci al doilea este împărțit într-un număr egal de căpușe, iar fiecare bifă este marcată cu ce încărcare îi aparține. Puteți vedea numărul de căpușe pe secundă în variabila de sistem "kern.clockrate", și anume "stathz":

PS: Pe baza celor de mai sus - este logic ca kernel-ul să stabilească numărul de procesoare acceptate egal cu numărul de instalate. În cazul meu, sistemul este asamblat cu suport pentru 64 de procese, deși doar 4 sunt utilizate în realitate.

Articole similare