Limiter l'utilisation du CPU par un processus Linux
Un programme tel que ffmpeg va utiliser tout le CPU possible pour s'exécuter aussi vite que possible, mais il va faire chauffer le CPU et augmenter le bruit du ventilo, ce qui n'est pas supportable sur plusieurs heures d'affilée. Voici des solutions.
Les bonnes vieilles commandes nice
et ionice
ne sont pas suffisantes. Il y a mieux
-
Le programme cpulimit est une astuce qui utilise les signaux Unix SIGSTOP et SIGCONT pour ralentir le processus. Il parait qu'il peut y avoir des programmes qui ne supportent pas bien ce jeu sur les signaux (ce n'est pas le cas de ffmpeg apparemment) mais c'est le plus simple pour lancer une seule commande en lui passant en paramètre le pourcentage maximal de CPU utilisé.
Pour un PC avec un CPU 10 cœurs :cpulimit -l 200 -- commande
va limiter le processus à environ 20 % de CPU au total. -
Les control groups de Linux est une solution robuste intégrée au noyau dans le cadre de la virtualisation. C'est plus complexe que le programme cpulimit mais c'est plus sûr.
Pour créer un control group nommé "cpulimited", dire que les processus lancés dans ce groupe ne pourront pas utiliser plus de 20 % de CPU avec un CPU 10 cœurs, et lancer les processus en question :sudo cgcreate -g cpu:/cpulimited -t herve:herve
je vais pouvoir lancer les processus sans passer par sudosudo cgset -r cpu.cfs_quota_us=2000000 cpulimited
quota en µs pour un total de 10 cœurs de CPUsudo cgset -r cpu.cfs_period_us=1000000 cpulimited
par seconde- (on peut faire une seule commande cgset avec les deux paramètres -r)
cgexec -g cpu:cpulimited commande
sudo cgget -a cpulimited
pour vérifier comment on a réglé ce cgroupsudo systemd-cgtop
pour vérifier combien le groupe utilise de CPU réellement