scheduler linux cpu-intensive apps et performance étrange

william40 17/02/2025
RÉSOLU
william40
Auteur Actif
Avatar de william40
william40
Auteur Actif

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
17/02/2025 à 13:18

10 commentaires

qherve
Membre Actif
Avatar de qherve
qherve
Membre Actif

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 ?

18/02/2025 à 09:49
navarro-eleonore
Membre Actif
Avatar de navarro-eleonore
navarro-eleonore
Membre Actif

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 ?

19/02/2025 à 06:37
william40
Auteur Actif
Avatar de william40
william40
Auteur Actif

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

20/02/2025 à 06:36
qherve
Membre Actif
Avatar de qherve
qherve
Membre Actif

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

21/02/2025 à 05:41
honore54
Membre
Avatar de honore54
honore54
Membre

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

Modifié le 23/05/2026 à 16:20
william40
Auteur Actif
Avatar de william40
william40
Auteur Actif

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 ?

22/02/2025 à 20:59
qherve
Membre Actif
Avatar de qherve
qherve
Membre Actif

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

Modifié le 23/05/2026 à 16:20
william40
Auteur Actif
Avatar de william40
william40
Auteur Actif

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

Modifié le 23/05/2026 à 16:20
navarro-eleonore
Membre Actif
Avatar de navarro-eleonore
navarro-eleonore
Membre Actif

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

25/02/2025 à 14:26
william40
Auteur Actif
Avatar de william40
william40
Auteur Actif

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

26/02/2025 à 13:31

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