Scheduler CPU pas top pour des workers temps réel

Posté par andre15 le 20/07/2025
RÉSOLU

andre15

Membre depuis le 10/07/2019

Yop les devs ! J'ai un souci sur des serveurs Linux (CentOS 7) qui font tourner des processus workers temps réel (traitement de flux audio/vidéo). De temps en temps on a des micro-freezes des lags qui font louper des frames. Les machines ont du CPU dispo, pas de saturation mémoire, pas de swap. J'ai l'impression que le scheduler CPU standard de Linux (CFS) est pas optimal pour nos besoins temps réel. Des idées pour améliorer la latence du scheduling ?

Commentaires

ilacroix

Membre depuis le 01/06/2019

salut. ouais le CFS c'est pas fait pour le vrai temps réel. tu peux essayer de jouer avec les priorités temps réel (`SCHED_FIFO` ou `SCHED_RR`) via `chrt`. il faut que tes applis soient capables de les gérer par contre et attention si t'as des process mal codés ça peut te bloquer toute la machine

andre15

Membre depuis le 10/07/2019

j'ai testé `chrt -f 99` pour mes processus critiques mais ça aide pas tant que ça. j'ai toujours ces petits glitches aléatoires. ptete un problème d'interruptions ou de drivers ?

fmarchal

Membre depuis le 11/04/2019

si c'est des micro-freezes ça peut être des interruptions ou même l'accès disque. t'as checké les stats `/proc/interrupts` ou utilisé un outil comme `irqbalance` ? et t'as un kernel low-latency ou RT patché ? c'est souvent la solution pour ces cas extrêmes

stephanie-devaux

Membre depuis le 26/07/2021

et n'oublie pas le governor cpu en performance pour éviter les changements de fréquence. et aussi désactiver les C-states pour que les coeurs ne se mettent pas en veille profonde. ça réduit la latence de réveil mais consomme plus d'énergie. vérifie aussi les P-states

ilacroix

Membre depuis le 01/06/2019

le kernel RT c'est vraiment le move pour ça. tu peux aussi isoler des coeurs CPU pour tes workers avec grub et `isolcpus=` ou cpusets. ça évite que le scheduler y mette d'autres trucs et que les interruptions soient routées dessus. c'est radical mais efficace

andre15

Membre depuis le 10/07/2019

ok je vais regarder le kernel RT et les `isolcpus`. j'ai déjà le cpu governor en performance mais pas pensé aux c-states. je vais essayer de les désactiver. ça fait bcp de pistes à explorer ! merci !

fmarchal

Membre depuis le 11/04/2019

une autre chose à vérifier c'est la mémoire. si t'es en NUMA tu dois t'assurer que tes processus allouent la mémoire sur le même noeud NUMA que les CPUs qu'ils utilisent avec `numactl`. sinon ça fait des latences d'accès mémoire entre noeuds. ça se voit pas toujours au premier coup d'oeil

stephanie-devaux

Membre depuis le 26/07/2021

et enfin désactive le swap. même si tu ne l'utilises pas une petite page fault sur un bloc qui est sur le swap ça peut te tuer un process temps réel. toujours pas de swap sur les systèmes critiques. double check `swappiness` aussi

ilacroix

Membre depuis le 01/06/2019

pense aussi aux softirqs et ksoftirqd. si tes drivers réseau ou disque génèrent trop d'interruptions ou que tes ksoftirqd tournent trop ça peut empiéter sur tes processus temps réel. tu peux affiner l'affinity des softirqs aussi avec `/proc/irq/IRQ_NUMBER/smp_affinity`

fmarchal

Membre depuis le 11/04/2019

oui la gestion des interruptions c'est clé. pour les drivers tu utilises des modules standards ou des drivers proprio ? des fois une mise à jour ou un réglage spécifique du driver peut faire une énorme différence sur le comportement temps réel

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