Cum să setați prioritatea procesului Linux folosind comenzile Nice and Renice


În acest articol, vom explica pe scurt programatorul de kernel (cunoscut și ca programatorul de procese) și prioritatea procesului, care sunt subiecte dincolo de domeniul de aplicare al acestui ghid. Apoi ne vom scufunda în gestionarea proceselor Linux: vedeți cum să rulați un program sau o comandă cu prioritate modificată și, de asemenea, să schimbați prioritatea rulării proceselor Linux.

Citiți și: Cum să monitorizați procesele Linux și să stabiliți limite de proces pe bază de utilizator

Înțelegerea Linux Kernel Scheduler

Un planificator de nucleu este o unitate a nucleului care determină cel mai potrivit proces dintre toate procesele rulabile pentru a fi executat în continuare; alocă timpul procesorului între procesele rulabile dintr-un sistem. Un proces care poate fi rulat este unul care așteaptă doar timpul CPU, este gata să fie executat.

Planificatorul formează nucleul multitasking-ului în Linux, folosind un algoritm de programare bazat pe priorități pentru a alege între procesele rulabile din sistem. Clasifică procesele în funcție de cele mai merituoase, precum și de nevoia de timp CPU.

Înțelegerea priorității procesului și a valorii plăcute

Nucleul stochează o mulțime de informații despre procese, inclusiv prioritatea procesului, care este pur și simplu prioritatea de planificare atașată unui proces. Procesele cu o prioritate mai mare vor fi executate înaintea celor cu o prioritate mai mică, în timp ce procesele cu aceeași prioritate sunt programate unul după altul, în mod repetat.

Există un total de 140 priorități și două intervale de priorități distincte implementate în Linux. Prima este o valoare drăguță (frumusețea) care variază de la -20 (valoarea cu cea mai mare prioritate) la 19 (valoarea cu cea mai mică prioritate) și implicit este 0, acesta este ceea ce vom descoperi în acest ghid. Cealaltă este prioritatea în timp real, care variază de la 1 la 99 în mod implicit, apoi de la 100 la 139 sunt destinate spațiului utilizator.

O caracteristică importantă a Linux este programarea dinamică bazată pe priorități, care permite modificarea (creșterea sau scăderea) valorii frumoase a proceselor în funcție de nevoile dvs., așa cum vom vedea mai târziu.

Cum să verificați valoarea bună a proceselor Linux

Pentru a vedea valorile frumoase ale proceselor, putem folosi utilitare precum ps, top sau htop.

Pentru a vizualiza procesele o valoare bună cu comanda ps în format definit de utilizator (aici NI coloana arată gradul de frumos al proceselor).

ps -eo pid,ppid,ni,comm

Alternativ, puteți utiliza utilitarele top sau htop pentru a vedea valorile frumoase ale proceselor Linux, așa cum se arată.

top
htop

Diferența dintre PR sau PRI și NI

Din rezultatele sus și htop de mai sus, veți observa că există o coloană numită PR și PRI receptiv care arată prioritatea unui proces.

Prin urmare, aceasta înseamnă că:

  • NI – este valoarea plăcută, care este un concept de spațiu utilizator, în timp ce
  • PR sau PRI – este prioritatea reală a procesului, așa cum se vede de nucleul Linux.
Cum se calculează valorile PR sau PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Interval de valori frumos (NI): de la -20 la 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Dar dacă vedeți un rt mai degrabă decât un număr, așa cum se arată în captura de ecran de mai jos, înseamnă practic că procesul rulează cu prioritate de programare în timp real.

Cum să rulați o comandă cu o valoare bună dată în Linux

Aici, ne vom uita la cum să prioritizăm utilizarea CPU a unui program sau a unei comenzi. Dacă aveți un program sau o sarcină care consumă foarte mult CPU, dar înțelegeți, de asemenea, că poate dura mult timp pentru a finaliza, îi puteți seta o prioritate ridicată sau favorabilă utilizând comanda plăcută.

Sintaxa este următoarea:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

Important:

  • Dacă nu este furnizată nicio valoare, nice setează în mod implicit o prioritate de 10.
  • O comandă sau un program rulat fără valori implicite frumoase la o prioritate de zero.
  • Numai root poate rula o comandă sau un program cu prioritate crescută sau mare.
  • Utilizatorii normali pot rula doar o comandă sau un program cu prioritate scăzută.

De exemplu, în loc să porniți un program sau o comandă cu prioritatea implicită, îl puteți porni cu o anumită prioritate folosind următoarea comandă frumoasă.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

De asemenea, puteți utiliza a treia metodă, care este puțin confuză, mai ales pentru valorile negative de frumos.

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Modificați prioritatea de programare a unui proces în Linux

După cum am menționat anterior, Linux permite programarea dinamică bazată pe priorități. Prin urmare, dacă un program rulează deja, îi puteți modifica prioritatea cu comanda renice în această formă:

renice -n  -12  -p 1055
renice -n -2  -u apache

Din exemplul de sus rezultat de mai jos, frumusețea teamspe+ cu PID 1055 este acum -12 și pentru toate procesele deținute de utilizatorul apache este -2.

Folosind încă această ieșire, puteți vedea formula PR=20 + NI,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Orice modificări pe care le faceți cu comanda renice la valorile frumoase ale proceselor unui utilizator sunt aplicabile numai până la următoarea repornire. Pentru a seta valori implicite permanente, citiți secțiunea următoare.

Cum să setați valoarea implicită Nice a proceselor unui anumit utilizator

Puteți seta valoarea standard implicită a unui anumit utilizator sau grup în fișierul /etc/security/limits.conf. Funcția sa principală este de a defini limitele de resurse pentru utilizatorii conectați prin PAM.

Sintaxa pentru definirea unei limite pentru un utilizator este următoarea (și valorile posibile ale diferitelor coloane sunt explicate în fișier):

#<domain>   <type>  <item>  <value>

Acum utilizați sintaxa de mai jos, unde hard - înseamnă aplicarea legăturilor hard și soft înseamnă - impunerea limitelor soft.

<username>  <hard|soft>  priority  <nice value>

Ca alternativă, creați un fișier sub /etc/security/limits.d/ care înlocuiește setările din fișierul principal de mai sus, iar aceste fișiere sunt citite în ordine alfabetică.

Începeți prin a crea fișierul /etc/security/limits.d/tecmint-priority.conf pentru utilizatorul tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Apoi adăugați această configurație în ea:

tecmint  hard  priority  10

Salvați și închideți fișierul. De acum înainte, orice proces deținut de tecmint va avea o valoare bună de 10 și PR de 30.

Pentru mai multe informații, citiți paginile de manual ale nice și renice:

man nice
man renice 

De asemenea, v-ar putea dori să citiți următoarele articole despre managementul proceselor Linux.

  1. Cum să găsiți și să omorâți procesele care rulează în Linux
  2. Un ghid pentru comenzile Kill, Pkill și Killall pentru a termina un proces în Linux
  3. Cum se monitorizează utilizarea sistemului, întreruperile și depanarea serverelor Linux
  4. CPUTool – Limitați și controlați utilizarea CPU a oricărui proces în Linux

În acest articol, am explicat pe scurt planificatorul nucleului, prioritatea procesului, am analizat cum să rulăm un program sau o comandă cu prioritate modificată și, de asemenea, să schimbăm prioritatea proceselor active Linux. Puteți împărtăși orice părere cu privire la acest subiect prin intermediul formularului de feedback de mai jos.