Vraag Verwerk 'vriendelijkheid' versus 'prioriteit'


Tijdens het hardlopen top, Ik kan deze (verkorte) voorbeelduitvoer zien:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Er zijn twee waarden waar ik in geïnteresseerd ben: PR (Prioriteit) en NI (Niceness).

Als ik begreep wat ik al goed heb ontdekt, bepalen beide hoeveel CPU-tijd een proces krijgt in tegenstelling tot andere processen. Maar wat is dan het verschil tussen die waarden?

Kunt u ook beschrijven hoe u die waarden van een proces kunt manipuleren en onder welke omstandigheden dit nuttig zou kunnen zijn?


72
2017-08-05 09:17


oorsprong




antwoorden:


mooie waarde is een gebruikersruimte en PR voorrang is de feitelijke prioriteit van het proces die door de Linux-kernel wordt gebruikt. In linux zijn systeemprioriteiten 0 tot 139, waarbij 0 tot 99 voor realtime en 100 tot 139 voor gebruikers zijn. mooi waardebereik is -20 tot +19 waarbij -20 het hoogst is, 0 standaard en +19 het laagste. relatie tussen leuke waarde en prioriteit is:

PR = 20 + NI

dus, de waarde van PR = 20 + (-20 to +19) is 0 tot 39 die 100 tot 139 toewijzen.

Volgens de top handleiding:

PR - Prioriteit De planningsprioriteit van de taak. Als je het ziet   'rt' in dit veld betekent dit dat de taak onder 'realtime' wordt uitgevoerd   planningsprioriteit.

NI is een leuke taakwaarde.

NI - Nice Value De mooie waarde van de taak. Een negatieve aardig   waarde betekent hogere prioriteit, terwijl een positieve mooie waarde lager betekent   priority.Zero in dit veld betekent gewoon dat prioriteit niet wordt aangepast   bij het bepalen van de verzendcapaciteit van een taak

Bewerk: Standaard wordt een programma gelanceerd in Linux en wordt het gestart met de prioriteit '0'. U kunt echter de prioriteit van uw programma's op een van de volgende manieren wijzigen.

  1. U kunt een programma starten met uw vereiste prioriteit met

    nice -n nice_value program_name
    
  2. u kunt ook de prioriteit van een reeds actief proces wijzigen met

    renice -n nice_value -p process_id
    

72
2017-08-05 09:51



Zeg je, ze zijn bijna hetzelfde omgekeerd (beide vertegenwoordigen prioriteit) MAAR niceness kan worden gebruikt om een ​​negatieve prioriteit te geven, zodat die taak met de niceness gaat uit de buurt van taken met hoge prioriteit? (ie het is nice en andere bronnen voor toegang toestaan? Of bracht dit me gewoon in verwarring? - Mark Kirby
Een voorbeeld van wat ik bedoel, twee taken, beide hebben pr van 20, dus gelijk, taak één heeft een ni van 0 en taak twee heeft een ni van 20, dus dit zou betekenen dat taak twee middelen zou opgeven voor taak één omdat het dat wel is nicer - Mark Kirby
Zoals ik weet, prioriteit berekend als PR = 20 + NI. dus taak één prioriteit = 20 +0. maximale waarde van mooie wil +19 - pl_rock
PR = 20 + NI maximale waarde kan 39 zijn. eigenlijk in linux-systeem is er 139 prioriteit, waarbij 0 tot 99 de real time prioriteit is en voor de gebruiker is er 100 tot 139. dus, NI-waarde -20 tot +19 worden toegewezen aan prioriteit 100 tot 139. die je kunt aanpassen. maar nog steeds kernel niet zeker of je NI-waarde verandert, dan zal het prioriteit veranderen, NI-waarde is een goede suggestie voor de kernel. kernel enige tijd negeer het - pl_rock
Dus zijn PR en NI eigenlijk equivalent, omdat ze slechts een andere offset hebben? Waarom hebben we beide waarden dan? En je zou kunnen toevoegen dat het instellen van de aardigheid van een proces <0 rootrechten vereist. - Byte Commander


Wat is prioriteit en waarom zou ik erom geven?

Bij processen over prioriteit gaat het erom de processortijd te beheren. De processor of CPU is als een menselijk jongleren met meerdere taken tegelijkertijd. Soms kunnen we genoeg ruimte hebben om meerdere projecten aan te nemen. Soms kunnen we ons slechts op één ding tegelijk richten. Andere keren komt er iets belangrijks naar voren en we willen al onze energie wijden aan het oplossen van dat probleem terwijl we minder belangrijke taken op een laag pitje zetten.

In Linux kunnen we richtlijnen instellen die de CPU moet volgen wanneer deze naar alle taken kijkt die hij moet uitvoeren. Deze richtlijnen worden 'leukheid' of 'leuke waarde' genoemd. De Linux-vriendelijkheidsschaal gaat van -20 tot 19. Hoe lager het getal, hoe meer prioriteit die taak krijgt. Als de waarde voor leukheid een hoog getal is als 19, wordt de taak ingesteld op de laagste prioriteit en verwerkt de CPU deze telkens wanneer deze de kans krijgt. De standaard mooie waarde is nul.

Door deze schaal te gebruiken kunnen we onze CPU-bronnen beter toewijzen. Programma's met een lagere prioriteit die niet belangrijk zijn, kunnen op een hogere waarde worden ingesteld, terwijl programma's met een hoge prioriteit, zoals daemons en services, kunnen worden ingesteld om meer van de focus van de CPU te ontvangen. U kunt zelfs een specifieke gebruiker een lagere waarde geven voor al zijn / haar processen, zodat u hun vermogen om de kernservices van de computer te vertragen, kunt beperken.

Bron

Stel de prioriteit in voor nieuwe processen met nice, bijv

nice -n 10 firefox

voor bestaande processen

renice 10 -p $(pgrep firefox)

Om de prioriteit in te stellen <0 jij hebt nodig sudo, bijv .:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

maar niet voor een prioriteit >=0


Voorbeeld

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Ander voorbeeld

Alle actieve processen renderen voor een specifieke gebruiker

renice 20 -u user_name

19
2017-08-05 11:06



In uw voorbeeld, de renice 10 zou ook werken zonder sudo, toch? En kunt u een voorbeeld toevoegen om alle processen van een specifieke gebruiker leuker te maken? Dat zou eigenlijk best handig zijn als iemand anders tegelijkertijd is ingelogd en een aantal onnodige, maar resource-eating-processen heeft (zoals een gepauzeerd flash-spel in Firefox, doen kleine broers zulke dingen ...: - /) - Byte Commander
@ByteCommander done =) - A.B.
Hoe herstel ik de oude niceness-waarden van die gebruiker na een tijdje? Terugzetten naar 0? Dat houdt geen rekening met het feit dat sommige processen eerder een andere nicenesswaarde hadden. Is er een eenvoudige mogelijkheid om dit te doen? - Byte Commander
@ByteCommander Nee, het is niet eenvoudig. Ofwel gebruik je 0 of ... er is het probleem;) - A.B.
@ByteCommander, maar daar zou ik een script voor kunnen schrijven;) - A.B.