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 : c'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 -- commandeva limiter le processus à environ 20 % de CPU au total. -
Les control groups de Linux : c'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:herveje vais pouvoir lancer les processus sans passer par sudosudo cgset -r cpu.cfs_quota_us=2000000 cpulimitedquota en µs pour un total de 10 cœurs de CPUsudo cgset -r cpu.cfs_period_us=1000000 cpulimitedpar seconde- (on peut faire une seule commande cgset avec les deux paramètres -r)
cgexec -g cpu:cpulimited commandesudo cgget -a cpulimitedpour vérifier comment on a réglé ce cgroupsudo systemd-cgtoppour vérifier combien le groupe utilise de CPU réellement