Uživatelské nástroje

Nástroje pro tento web


system:prikazovy_radek:priorita

Pokud v systému existuje běžící program, označuje se jako proces. V systému lze nastavit jejich prioritu pomocí příkazů nice a renice. Normální program může spouštět celou řadu procesů, nemusí být jen jeden. Každý proces dostane od jádra přidělené číselné označení (PID - process identification number, identifikační číslo procesu), které můžete zjistit pomocí příkazu ps, top a dalších. Existují i grafické utility, které to umí, ale ty zde nediskutujeme :-).

Příklad využití: Zatížení procesu je trvale vysoké, snižuje se odezva aplikací. Co se děje? Který proces tak zatěžuje procesor? Použijete příkaz top, který také vypisuje PID procesů, ale výpis je defaultně řazen podle využití procesoru jednotlivými procesy:

Konzole

Tasks: 121 total,   2 running, 119 sleeping,   0 stopped,   0 zombie
Cpu(s):  8.6%us,  2.6%sy,  9.3%ni, 78.1%id,  1.0%wa,  0.3%hi,  0.0%si,  0.0%st
Mem:   1556028k total,  1488200k used,    67828k free,   163936k buffers
Swap:  3293244k total,      156k used,  3293088k free,   756536k cached
 Unknown command - try 'h' for help
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6948 user      39  19 81920  42m  10m S 92.0  2.8  55:34.10 beagled-helper
 6720 user      20   0  341m 134m  25m S  6.0  8.8  17:35.38 firefox-bin
 6767 user      27   7  116m  73m 9196 S  3.0  4.8  61:00.91 beagled
 6624 user      20   0 21600  10m 8300 S  1.0  0.7   4:23.34 gkrellm
 4318 root      20   0  195m  44m 6788 S  0.7  2.9   7:31.69 X
 6405 user      20   0 42064  18m  13m S  0.3  1.2   0:45.94 kicker
 6736 user      20   0 32744  22m 8724 S  0.3  1.5   0:09.90 net_applet
17374 user      20   0 35800  13m  11m R  0.3  0.9   0:00.76 konsole
18232 root      20   0  2168 1000  784 R  0.3  0.1   0:00.01 top
    1 root      20   0  1648  532  472 S  0.0  0.0   0:01.00 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:01.09 ksoftirqd/0
    5 root      15  -5     0    0    0 S  0.0  0.0   0:01.27 events/0
    6 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khelper

Je vidět, že proces, který enormně zatěžuje procesor je beagled-helper, a jeho PID je 6978. Ve sloupci NI je uvedena priorita procesu.

Podobně jako příkaz renice používá čísla od 19 (nejnižší priorita) do -19 (nejvyšší priorita). Průměrná priorita, obvyklá u uživatelských procesů (programů) je 0. Proces beagle-helper má hodnotu nice 19, tedy nejnižší možnou.

V praxi to funguje tak, že procesy s vyšší prioritou dostanou při zpracování přednost. Můžete si všimnout, že ve chvíli, kdy váš program pracuje, vytížení procesoru se změní ve prospěch aktuálně využívaného programu. Proces beagle-helper procesor uvolní pro upřednostněné procesy. Jakmile má procesor čas, věnuje ho i procesům s nízkou prioritou.

V tomto konkrétním případě by bylo nutné měnit ještě prioritu procesu beagled, který celou indexaci řídí.

Použít na tento proces příkaz renice za účelem uvolnění procesoru pro jiné programy nemá tedy smysl. Pokud ale potřebujete mít indexaci pro vyhledávání mít hotovou dříve, je možné jeho prioritu zvýšit (tedy číslo snížit). Je potřeba zmínit, že zvyšovat prioritu (snižovat číslo) může jen administrátor; uživatel může jen u svých procesů prioritu pouze snižovat (číslo zvyšovat). Nyní tedy zvýšíme prioritu procesu beagle-helper na úroveň ostatních uživatelských procesů, tedy na nulu:

Konzole

[root@localhost user]# renice 0 -p 6948
6948: původní priorita 19, nová priorita 0
[root@localhost user]#

Nyní beagle-helper využívá procesor stejně jako většina ostatních uživatelských procesů. Opět výpis z programu top:

Konzole

Tasks: 125 total,   2 running, 123 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.0%us,  2.7%sy,  8.0%ni, 81.0%id,  4.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1556028k total,  1515824k used,    40204k free,   195236k buffers
Swap:  3293244k total,      156k used,  3293088k free,   742524k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6948 moje      20   0 81920  43m  10m S  9.3  2.8  57:03.50 beagled-helper
 6720 moje      20   0  340m 133m  25m R  1.3  8.8  19:42.97 firefox-bin
 6624 moje      20   0 21600  10m 8300 S  1.0  0.7   4:55.07 gkrellm
 4318 root      20   0  195m  44m 6788 S  0.7  2.9   8:34.79 X
 6767 moje      27   7  116m  74m 9196 S  0.7  4.9  62:52.88 beagled
 6745 moje      20   0  115m  35m  21m S  0.3  2.3   0:10.80 thunderbird-bin
19125 root      20   0  2168 1012  784 R  0.3  0.1   0:00.71 top

Pokud chcete spouštěnému programu/procesu určit prioritu hned při spuštění, slouží k tomu příkaz nice. V něm se nezadává konečná hodnota priority jako u příkazu renice, ale k aktuální hodnotě se v parametru -n přičítá zde uvedené číslo. Tedy nice -n 2 nazev_spustitelneho_souboru přičte k aktuálnímu číslu priority dvojku, tedy sníží prioritu o dva stupně. Pokud je číslo s mínusovým znaménkem, dochází ke zvyšování priority (snižování čísla).

Další informace viz přeložené manuálové a info stránky zde

system/prikazovy_radek/priorita.txt · Poslední úprava: 2014/10/25 13:14 (upraveno mimo DokuWiki)