Jak nastavit priority procesů S nice and renice na Linuxu

Photo of author

By etechblogcz

Příkazy nice a renice představují nástroje pro jemné ladění chování jádra operačního systému při správě spuštěných procesů. Umožňují vám upravovat priority procesů a ovlivňovat tak jejich přidělování systémových zdrojů. V tomto článku se dozvíte, jak tyto příkazy využívat v operačních systémech Linux a jemu podobných, jako je macOS.

Základní princip: Procesy a jejich správa

Ve vašem počítači s Linuxem či Unixem běží mnoho procesů ještě před spuštěním vámi zvolené aplikace. Většina z nich jsou klíčové součásti systému nebo podpůrné procesy pro grafické prostředí. Systém neustále pracuje na pozadí a má k dispozici omezené množství systémových prostředků a času procesoru. Jádro Linuxu hraje roli koordinátora těchto procesů.

Jádro rozhoduje o tom, které procesy získají aktuálně prioritu a které musí počkat. Neustále analyzuje a žongluje s prioritami, aby zajistilo plynulý chod počítače a spravedlivé přidělení systémových prostředků. Některé procesy jsou pro správnou funkci systému klíčové a mají prioritu před ostatními, jako například před webovým prohlížečem.

Co je to „nice“ hodnota?

Jedním z klíčových kritérií, podle kterých jádro rozhoduje o prioritě procesu, je tzv. „nice“ hodnota. Každý proces má přidělenu tuto hodnotu, která se pohybuje v rozmezí od -19 do 20. Standardně jsou všechny procesy spouštěny s „nice“ hodnotou 0.

Platí, že čím vyšší je „nice“ hodnota, tím „ohleduplnější“ je daný proces k ostatním. Jádru sděluje, že proces klidně počká. Naopak, záporná „nice“ hodnota značí sobeckost procesu, který se snaží získat co nejvíce procesorového času bez ohledu na ostatní běžící procesy.

Příkaz nice slouží k nastavení „nice“ hodnoty při spouštění procesu, zatímco renice umožňuje upravit tuto hodnotu u již spuštěného procesu. Další informace naleznete v manuálových stránkách: nice a renice.

Příkaz nice v praxi

Příkaz nice umožňuje ovlivnit prioritu procesu při jeho spuštění, čímž můžeme zvýšit nebo snížit jeho nároky na systémové zdroje ve srovnání s ostatními procesy.

Představme si situaci, kdy programátor vytvořil program s názvem ackermann, který počítá Ackermannovy funkce. Tento výpočet je náročný na procesor a paměť. Programátor by mohl program spustit pomocí příkazu:

./ackermann

Pro monitorování spuštěných procesů a jejich priorit můžeme použít příkaz top:

top

Informace o procesu ackermann najdeme v horní části výpisu. Sloupec „NI“ udává „nice“ hodnotu, která je standardně nastavena na 0.

Nyní zkusíme proces spustit znovu, ale tentokrát mu nastavíme nižší prioritu. Použijeme příkaz nice s „nice“ hodnotou 15. Příkaz má následující syntaxi: nice -[hodnota] [příkaz], kde [hodnota] je nová „nice“ hodnota a [příkaz] je spouštěný program. V našem příkladě:

nice -15 ./ackermann

Pozor, -15 zde neznamená zápornou hodnotu -15, ale kladnou 15. Znak - je použit pro signalizaci parametru. Pro nastavení záporné „nice“ hodnoty je potřeba použít dva znaky -.

Spuštěním příkazu top znovu uvidíme změnu v chování procesu ackermann:

top

S „nice“ hodnotou 15 proces ackermann již nespotřebovává tolik procesorového času. Procesy jako GNOME a Rhythmbox nyní využívají více zdrojů, čímž se dosáhlo snížení priority procesu ackermann.

Nyní si ukážeme opačný případ, kdy procesu ackermann přiřadíme zápornou „nice“ hodnotu. Všimněte si použití dvou znaků -. Pro nastavení procesu s vyšší prioritou (nižší „nice“ hodnota) je potřeba použít sudo. Každý uživatel si může nastavit nižší prioritu procesu, ale vyšší prioritu může nastavit pouze administrátor (root):

sudo nice --10 ./ackermann

Opětovným spuštěním příkazu top můžeme pozorovat změnu:

top

Proces ackermann má nyní „nice“ hodnotu -10 a opět se nachází na vrcholu seznamu spotřeby procesorového času.

Příkaz renice – úprava priority běžících procesů

Příkaz renice nám umožňuje měnit „nice“ hodnotu u již spuštěných procesů bez nutnosti je zastavovat a restartovat. Nová hodnota se nastaví za běhu.

renice přijímá jako parametr ID procesu (PID). PID můžeme získat ze sloupce „PID“ v příkazu top, nebo pomocí ps a grep. Níže je uveden příklad vyhledání PID procesu ackermann spuštěného uživatelem dave:

ps -eu dave | grep ackermann

Nyní, když máme PID, můžeme ho použít s renice. V následujícím příkladu nastavíme procesu ackermann novou „nice“ hodnotu 5:

sudo renice -n 5 2339

Příkaz renice nám potvrdí změnu „nice“ hodnoty a ukáže původní i novou hodnotu.

Jádro obvykle spravuje priority procesů velmi efektivně. Pokud ale spouštíte dlouhý proces, který je náročný na CPU a nezáleží vám na tom, kdy skončí, může být pro plynulý chod celého systému přínosné, pokud tomuto procesu nastavíte vyšší „nice“ hodnotu. Tím se zlepší uživatelský komfort a celková odezva systému.