Tips en Trucs 2012

Procesprioriteit regelen

Inleiding

De Linux Kernel zorgt ervoor dat elk proces een tijdje gebruik kan maken van de processor. Om een proces meer processortijd te geven, moet je de prioriteit van het proces aanpassen.

Wanneer gebruik je dit? Wel, bijna nooit, maar als je een niet zo snelle computer hebt en je wilt iets compileren, terwijl je deelneemt aan een video conferentie, dan wil je waarschijnlijk dat de video conferentie software meer processortijd krijgt dan het compileerprogramma.

Hoe versnel je een proces?

Om de prioriteit van een proces aan te passen, gaan we de opdracht nice gebruiken. Daarvoor moet je de PID van het aan te passen proces (programma) kennen. Om de PID van een proces op te zoeken, gebruik je de opdracht pstree of htop, gebruik bij de opdracht pstree de optie -p:
dany@linux-bxth:~> pstree -p
...
           ├─kdeinit4(1687)─┬─bluefish(11788)─┬─{bluefish}(11809)
           │                │                 ├─{bluefish}(11810)
           │                │                 ├─{bluefish}(11831)
           │                │                 └─{bluefish}(12032)
           │                ├─firefox(10407)───firefox-bin(10412)─┬─kmozillahelper(10464)
           │                │                                     ├─plugin-containe(11467)─┬─{plugin-containe}(11468)
           │                │                                     │                        ├─{plugin-containe}(11708)
           │                │                                     │                        ├─{plugin-containe}(11709)
           │                │                                     │                        ├─{plugin-containe}(11710)
           │                │                                     │                        ├─{plugin-containe}(11711)
           │                │                                     │                        ├─{plugin-containe}(11712)
           │                │                                     │                        ├─{plugin-containe}(11713)
           │                │                                     │                        ├─{plugin-containe}(11714)
           │                │                                     │                        ├─{plugin-containe}(11715)
           │                │                                     │                        └─{plugin-containe}(11718)
           │                │                                     ├─{firefox-bin}(10415)
           │                │                                     ├─{firefox-bin}(10416)
           │                │                                     ├─{firefox-bin}(10417)
           │                │                                     ├─{firefox-bin}(10418)
           │                │                                     ├─{firefox-bin}(10421)
           │                │                                     ├─{firefox-bin}(10422)
           │                │                                     ├─{firefox-bin}(10424)
           │                │                                     ├─{firefox-bin}(10457)
           │                │                                     ├─{firefox-bin}(10458)
           │                │                                     ├─{firefox-bin}(10461)
           │                │                                     ├─{firefox-bin}(10462)
           │                │                                     ├─{firefox-bin}(10463)
           │                │                                     ├─{firefox-bin}(10465)
           │                │                                     ├─{firefox-bin}(10466)
           │                │                                     ├─{firefox-bin}(10467)
           │                │                                     ├─{firefox-bin}(10470)
           │                │                                     ├─{firefox-bin}(10474)
           │                │                                     ├─{firefox-bin}(10475)
           │                │                                     ├─{firefox-bin}(10525)
           │                │                                     ├─{firefox-bin}(11466)
           │                │                                     ├─{firefox-bin}(11997)
           │                │                                     ├─{firefox-bin}(12011)
           │                │                                     └─{firefox-bin}(12013)
...

Na het opzoeken van het PID (in het voorbeeld is de PID van het hoofdproces van firefox 10407) kun je met renice de prioriteit van het proces aanpassen.

Het bereik loopt van -20 tot 20, bij -20 werkt het proces op zijn maximale snelheid.

Met de opdracht
sudo renice -8 -p 10407
krijgt het proces met het PID 10407 de prioriteit -8, waardoor de processor meer bezig is met dit proces en het proces dus sneller werkt.

Enkel de systeembeheerder root kan een proces versnellen, gewone gebruikers kunnen hun eigen processen vertragen, maar niet versnellen. Gewone gebruikers kunnen hun eigen vertraagde processen wel afsluiten en opnieuw opstarten waardoor ze terug de standaard prioriteit 0 krijgen.

Lees de man-pagina van renice en hou rekening met het feit dat het aanpassen van een ouder proces (parent process) invloed heeft op alle nakomelingen (die door het ouderproces werden opgestart). In het voorbeeld zal dus niet alleen het firefox proces 10407 versnellen, maar ook alle opgestarte subprocessen (m.a.w. alle firefox onderdelen en vensters). Om het ouderproces te achterhalen, gebruikt je best de opdracht pstree.