Ținând cont de ceea ce se întâmplă

De Ian Shields
Actualizat la 31 ianuarie 2015 | Publicat la 2 februarie 2010

linux

Prezentare generală

Acest tutorial vă bazează pe tehnicile de bază Linux pentru gestionarea priorităților procesului de execuție. Invata sa:

  • Înțelegeți prioritățile procesului
  • Stabiliți prioritățile procesului
  • Schimbați prioritățile procesului

Acest tutorial vă ajută să vă pregătiți pentru obiectivul 103.6 din subiectul 103 al examenului Linux Server Professional (LPIC-1) 101. Obiectivul are o pondere de 2.

Prioritățile sarcinii Linux

Linux, la fel ca majoritatea sistemelor de operare moderne, poate rula mai multe procese. Face acest lucru prin partajarea procesorului și a altor resurse între procese. Dacă un proces poate utiliza 100 la sută din CPU, atunci alte procese pot să nu mai răspundă. Vă vom prezenta modul în care Linux atribuie priorități pentru sarcini.

Despre această serie

Această serie de tutoriale vă ajută să învățați sarcini de administrare a sistemului Linux. De asemenea, puteți utiliza materialul din aceste tutoriale pentru a vă pregăti pentru LPIC-1 al Linux Professional Institute: examene de certificare profesională Linux Server.

Consultați „Aflați Linux, 101: O foaie de parcurs pentru LPIC-1” pentru o descriere și un link către fiecare tutorial din această serie. Foaia de parcurs este în curs. Acest tutorial reflectă obiectivele versiunii 5.0, actualizate la 29 octombrie 2018. Pe măsură ce tutorialele sunt finalizate, acestea vor fi adăugate la foaia de parcurs.

Condiții prealabile

Pentru a beneficia la maximum de tutorialele din această serie, ar trebui să aveți cunoștințe de bază despre Linux și un sistem Linux funcțional pe care să puteți practica comenzile acoperite în acest tutorial. Uneori, versiunile diferite ale unui program vor format rezultatele în mod diferit, astfel încât rezultatele dvs. s-ar putea să nu arate întotdeauna exact ca listările și cifrele prezentate aici. Rezultatele din exemplele prezentate aici au fost obținute pe o distribuție Ubuntu 15.04. Acest tutorial se bazează pe conceptele discutate în tutorialul anterior „Aflați Linux 101: creați, monitorizați și ucideți procesele”.

Cunoașterea priorităților tale

Dacă executați comanda de sus, implicit este afișarea proceselor în ordine descrescătoare în funcție de utilizarea procesorului, așa cum se arată în Listă 1. În tutorialul anterior, „Aflați Linux 101: creați, monitorizați și ucideți procesele”, am arătat un Scriptul Ceasului omului sărac, care tipărește ora pe consolă la fiecare 30 de secunde și nu face nimic în restul timpului. Dacă am rula acest proces, probabil că nu va intra pe lista de ieșire de sus, deoarece procesul își petrece cea mai mare parte a timpului fără a utiliza CPU.

Listare 1. Ieșire tipică de sus pe o stație de lucru Linux

Este posibil ca sistemul dvs. să aibă multe comenzi capabile să utilizeze o mulțime de CPU. Exemplele includ instrumente de editare a filmelor și programe pentru a converti între diferite tipuri de imagini sau între diferite codificări de sunet, cum ar fi mp3 în ogg.

Când aveți doar unul sau un număr limitat de procesoare, trebuie să decideți cum să partajați resursele CPU limitate între mai multe procese concurente. Acest lucru se face, în general, selectând un proces pentru execuție și lăsându-l să ruleze pentru o perioadă scurtă de timp (numit timp de timp), sau până când trebuie să aștepte un eveniment, cum ar fi IO pentru finalizare. Pentru a ne asigura că procesele importante nu sunt înfometate de porcii CPU, selecția se face pe baza unei priorități de programare. NU coloana din Listarea 1 de mai sus, arată prioritatea de planificare sau simpatia fiecărui proces. Frumusețea variază în general de la -20 la 19, cu -20 fiind cea mai favorabilă sau cea mai mare prioritate pentru programare și 19 fiind cea mai puțin favorabilă sau cea mai mică prioritate.

Folosind ps pentru a găsi frumusețe

În plus față de comanda de sus, puteți afișa și valori de frumusețe folosind comanda ps. Puteți fie să personalizați rezultatul așa cum ați văzut în tutorialul „Aflați Linux 101: creați, monitorizați și ucideți procesele”, sau puteți utiliza doar opțiunea -l pentru a obține o listă lungă. Ieșirea ps -l ps -l este prezentată în Lista 2. Ca și în partea de sus, căutați valoarea de frumusețe în NU coloană.

Listarea 2. Folosirea ps pentru a găsi frumusețe

Simpatie implicită

Este posibil să fi ghicit din Lista 1 sau Lista 2 că simpatia implicită, cel puțin pentru procesele începute de utilizatorii obișnuiți, este 0. Acest lucru este de obicei cazul sistemelor Linux actuale. Puteți verifica valoarea pentru shell și sistem executând comanda nice fără parametri, așa cum se arată în Listarea 3.

Listare 3. Verificarea simpatiilor implicite

Stabilirea priorităților

Înainte de a ne uita cum să setăm sau să modificăm valorile de frumusețe, să construim un mic script cu intensitate de CPU care să arate cum funcționează cu adevărat frumusețea.

Un script intensiv în CPU

Vom crea un mic script care folosește doar CPU-ul și face puțin altceva. Scriptul are două intrări, un număr și o etichetă. Tipărește eticheta și data și ora curente, apoi se rotește, diminuând numărul până ajunge la 0 și, în final, imprimă din nou eticheta și data. Acest script prezentat în Listarea 4 nu are verificarea erorilor și nu este foarte robust, dar ilustrează punctul nostru.

Listare 4. Script intensiv în CPU

Dacă rulați acest lucru pe propriul sistem, este posibil să vedeți o ieșire similară listării 5. În funcție de viteza sistemului dvs., poate fi necesar să măriți valoarea contorului pentru a vedea chiar și o diferență în timp. Acest script folosește o mulțime de CPU, așa cum vom vedea într-o clipă. Dacă shell-ul dvs. implicit nu este Bash și dacă scriptul nu funcționează pentru dvs., utilizați a doua formă de apel prezentată mai jos. Dacă nu utilizați propria stație de lucru, asigurați-vă că este bine să utilizați o mulțime de CPU înainte de a rula scriptul.

Listarea 5. Rularea count1.sh

Până acum, bine. Acum să creăm o listă de comenzi pentru a rula scriptul în fundal și lansăm comanda de sus pentru a vedea cât de mult CPU utilizează scriptul. (Vedeți tutorialul anterior „Aflați Linux 101: Linia de comandă Linux” pentru o actualizare pe listele de comenzi.) Lista de comenzi este afișată în Listarea 6 și ieșirea de sus în Listarea 7.

Listă 6. Rularea count1.sh și top
Listarea 7. Folosirea multor CPU

Nu-i rău. Folosim 100% dintr-unul dintre procesoarele de pe acest sistem cu doar un script simplu. Dacă doriți să accesați mai multe procesoare, puteți adăuga o invocare suplimentară de count1.sh la lista de comenzi. Dacă am avea o slujbă de lungă durată, cum ar fi aceasta, am putea constata că aceasta a interferat cu capacitatea noastră (sau cu capacitatea altor utilizatori) de a face alte lucruri pe sistemul nostru.

Folosind frumos pentru a stabili priorități

Acum, că putem ține un CPU ocupat o vreme, vom vedea cum să setăm o prioritate pentru un proces. Pentru a rezuma ceea ce am învățat până acum:

  • Sistemele Linux și UNIX® utilizează un sistem prioritar cu 40 de priorități, variind de la -20 (cea mai mare prioritate) la 19 (cea mai mică prioritate).
  • Procesele începute de utilizatorii obișnuiți au de obicei prioritatea 0.
  • Comanda ps poate afișa prioritatea (frumos sau nivel NI, de exemplu) folosind opțiunea -l.
  • Comanda frumoasă afișează prioritatea noastră implicită.

Comanda frumoasă poate fi utilizată și pentru a porni un proces cu o prioritate diferită. Utilizați opțiunea -n sau (--adjustment) cu o valoare pozitivă pentru a crește valoarea prioritară și o valoare negativă pentru ao reduce. Amintiți-vă că procesele cu cea mai mică prioritate se execută la cea mai mare prioritate de planificare, așa că gândiți-vă că creșteți valoarea priorității ca fiind plăcută cu alte procese. Rețineți că, de obicei, trebuie să fiți superutilizatorul (rădăcina) pentru a specifica ajustările de prioritate negative. Cu alte cuvinte, utilizatorii obișnuiți își pot face procesele mai frumoase.

Pentru a demonstra utilizarea frumosului pentru a stabili prioritățile, să începem două copii ale scriptului count1.sh în sub-shell-uri diferite în același timp, dar să îi oferim unuia frumusețea maximă de 19. După o secundă vom folosi ps -l ps -l pentru a afișa starea procesului, inclusiv simpatia. În cele din urmă, vom adăuga un somn arbitrar de 30 de secunde pentru a ne asigura că secvența de comandă se termină după ce cele două sub-shell-uri se termină. În acest fel, nu vom primi un nou prompt în timp ce așteptăm în continuare rezultatul. Rezultatul este prezentat în Listarea 8.

Listarea 8. Folosirea frumosului pentru a stabili prioritățile pentru o pereche de procese

Ești surprins că cele două lucrări s-au încheiat în același timp? Ce s-a întâmplat cu stabilirea priorității noastre? Amintiți-vă că scenariul a ocupat unu de procesoarele noastre. Acest sistem special rulează pe un procesor Intel (R) Core (TM) i7, care este foarte ușor încărcat, astfel încât fiecare nucleu a rulat un proces și nu a fost nevoie să le acordați prioritate.

Așadar, să încercăm să începem patru procese la patru niveluri diferite de frumusețe (0, 6, 12 și 18) și să vedem ce se întâmplă. Vom mări parametrul de numărare ocupată pentru fiecare, astfel încât să ruleze puțin mai mult. Înainte de a privi listarea 9, gândiți-vă la ce vă puteți aștepta, având în vedere ceea ce ați văzut deja.

Listare 9. Folosind frumos pentru a stabili priorități pentru patru dintre procese

Cu patru priorități diferite, vedem efectul diferitelor valori de frumusețe pe măsură ce fiecare lucrare se termină în ordine de prioritate. Încercați să experimentați diferite valori frumoase pentru a demonstra diferitele posibilități pentru dvs.

O notă finală despre pornirea proceselor cu nice; ca și în cazul comenzii nohup, nu puteți utiliza o listă de comenzi sau o conductă ca argument al lui nice .

Schimbarea priorităților

renice

Dacă se întâmplă să porniți un proces și vă dați seama că acesta ar trebui să ruleze cu o altă prioritate, există o modalitate de a-l schimba după ce a început, folosind comanda renice. Specificați o prioritate absolută (și nu o ajustare) pentru procesul sau procesele care urmează să fie modificate, așa cum se arată în Listarea 10.

Listarea 10. Folosirea renice pentru a schimba prioritățile

Amintiți-vă că trebuie să fiți superutilizatorul pentru a acorda proceselor prioritate mai mare de programare și pentru a le face mai puțin plăcute.

Puteți găsi mai multe informații despre frumos și renice în paginile principale.

Aceasta încheie introducerea dvs. la prioritățile de execuție a procesului.