scheduler linux cpu-intensive apps et performance étrange

Posté par william40 le 17/02/2025
RÉSOLU

william40

Membre depuis le 14/02/2020

salut la commu ! on a des applis de calcul intensif sur des serveurs linux (ubuntu 22.04, kernel 5.15) et on voit des perfs un peu bizarres. parfois un thread se met à monopoliser un cpu et tout le reste rame un peu même si d'autres cpus sont libres. on a l'impression que le scheduler fait n'importe quoi. on est en default cfs.

# sortie de 'top' qui montre un seul process à 100% CPU sur un core
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234 user      20   0 12.5g 4.0g  200m R 100.0   2.5   5:30.12 my_compute_app

Commentaires

qherve

Membre depuis le 04/04/2019

le cfs (completely fair scheduler) c'est le default c'est bien pour la plupart des workloads mais pour du calcul intensif avec des threads critiques ça peut être un peu trop "fair". t'as essayé de jouer avec les priorités nice ou rt_priority ?

navarro-eleonore

Membre depuis le 10/06/2019

ouais et si c'est vraiment un truc temps réel t'as le scheduler rt (real-time) mais c'est risqué faut savoir ce qu'on fait. sinon des cgroups pour limiter/garantir le cpu de certains process ?

william40

Membre depuis le 14/02/2020

on a essayé un peu les nice mais pas de changement fou. les cgroups on y a pas touché encore. mais on voudrait éviter le rt scheduler c'est trop extrême pour nous

qherve

Membre depuis le 04/04/2019

pour du calcul intensif avec plusieurs threads ou processes qui DOIVENT tourner en // et avoir leur propre cpu tu peux essayer de configurer le cpu affinity (taskset) pour "pinner" les threads à des cpus spécifiques. comme ça pas de migration intempestive et moins de cache misses

honore54

Membre depuis le 08/11/2024

et si tu peux avoir un kernel avec le scheduler `bfq` (budget fair queueing) il est pas mal pour les i/o intensives mais aussi le cpu si t'as des contraintes. mais souvent le cpu affinity ou les cgroups c'est la première étape

william40

Membre depuis le 14/02/2020

le cpu affinity c'est intéressant. je vais regarder ça avec taskset. mais on a aussi pas mal de threads qui démarrent/s'arrêtent. ptete c'est le cfs qui a du mal à réallouer rapidement ?

qherve

Membre depuis le 04/04/2019

le cfs est plutôt bon pour ça mais si t'as des micro-bursts et que ton app est sensible à la latence de scheduling ça peut se voir. essaie de tweaker les paramètres du cfs genre `kernel.sched_min_granularity_ns` ou `kernel.sched_latency_ns` via sysctl

william40

Membre depuis le 14/02/2020

j'ai testé `taskset` sur un process critique et la différence est énorme ! le process est resté bien sur son core et les autres aussi. ça a stabilisé les perfs de ouf. merci le coup de la taskset c'est magique

navarro-eleonore

Membre depuis le 10/06/2019

bien joué ! le pinning cpu c'est souvent la solution quand le scheduler par défaut galère avec des workloads spécifiques. pensez à l'automatiser pour pas l'oublier

william40

Membre depuis le 14/02/2020

c'est clair je vais mettre ça en place dans le système de démarrage de l'app. thx encore !

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire