Czasem jest tak, że do wykonania jest jakieś zadanie, na czasie wykonania którego nie zależy nam szczególnie, ale wykonujemy je na sprzęcie, który przy większym obciążeniu zaczyna np. hałasować. Dobrym przykładem jest kompresja/dekompresja dużych archiwów lub konwersja filmów na laptopie. Mój laptop praktycznie nigdy nie korzysta z wiatraka. Włącza się on dopiero, gdy procesor osiągnie 75 st. C, ale za to jak się włączy… tragedia, że szkoda słów.
Zwykły nice nie wystarczy (to dobre do zapewnienia dobrej responsywności innych zadań), ale to jest Linux, więc na pewno coś jest, co może pomóc. I rzeczywiście istnieje program, który pozwoli procentowo przydzielić zasoby CPU, a nazywa się on cpulimit.
Zasada działania jest prosta – uruchomiony program śledzi wskazany proces i okresowo zatrzymać jego działanie (wysyłając SIGSTOP), a następnie, po bardzo krótkiej chwili wznawia je (wysyłając SIGCONT). Dodatkowo oblicza, na ile zatrzymać działanie tak, aby średni czas działania był zgodny z podanym przez użytkownika procentowym udziałem przydzielonego czasu procesora. Żadnych cudów, ale efekt bardzo fajny – po -l 60 (limitowanie do 60%) mam pewność, że wiatrak się nie załączy – temperatura nie zbliża się w okolice krytycznych 75 st. C.
Żeby nie było za dobrze, są też wady. Oczywista to wydłużenie czasu wykonania operacji. Mniej oczywista, to trochę „śmieci” na ekranie (przy uruchomieniu jeden raz pojawia się informacja o zatrzymaniu działania procesu). Kolejna wada, to działanie tylko dla pierwszego procesu pasującego do nazwy (ale to już polecam przeczytanie uwag w man cpulimit).
Ponieważ miałem problem z opcjami -e oraz -P (pewnie zaraz zgłoszenie błędu pójdzie), za to -p działa bez problemu, to, jeśli ktoś koniecznie chce odwoływać się do nazwy, polecam użycie:
cpulimit -p `pidof PROCES` -l 60 -v
Z podobnych zagadnień, jeśli ktoś chciałby przypisać proces do danego CPU, to powinien zainteresować się programem taskset.
UPDATE: Jak Paweł słusznie zauważył w komentarzu (dzięki za info), już było na ten temat pisane. Dodaję linka.
Linki:
- Strona domowa programu cpulimit.
- Ciekawie wyglądający opis tworzenia demona na bazie programu cpulimit (nie testowałem w praktyce).
- Nieco więcej o taskset.
- Wpis Grzglo na ten sam temat – parę informacji więcej (zwł. o demonie) oraz dyskusja.
- Opis Control Groups w Linuksie – inny, wspierany przez kernel, bardziej uniwersalny, wydaje się, że lepszy (ale i nieco trudniejszy w użyciu) sposób na to samo.