Performances I/O aléatoires sur VMs Linux critiques

patrick81 24/11/2024
RÉSOLU
patrick81
Auteur Actif
Avatar de patrick81
patrick81
Auteur Actif

yo la team j'ai un truc chelou sur nos vms linux en prod. c'est sur du san donc block device. les perfs i/o sont super instables. parfois c'est mega rapide d'autres fois ça rame à mort. iostat -x 1 montre des await qui montent à 500ms sans raison. c'est l'enfer pour les apps critiques

24/11/2024 à 00:19

13 commentaires

thomas-henry
Membre Actif Secouriste
Avatar de thomas-henry
thomas-henry
Membre Actif Secouriste

salut! await élevé sur SAN ça fait penser au io_scheduler. t'es en quel scheduler? cfq par défaut est souvent pas top pour les SANs. faudrait tester deadline ou noop. echo deadline > /sys/block/sdX/queue/scheduler

Modifié le 23/05/2026 à 16:20
adrien-brun
Membre Actif Secouriste
Avatar de adrien-brun
adrien-brun
Membre Actif Secouriste

et la version de ton kernel? des fois y'a des bugs i/o corrigés dans les nouvelles versions. et t'es bien avec les drivers virtuels genre virtio_blk pour la vm ou tu utilises encore des vieux trucs émulés? lsmod | grep virtio

Modifié le 23/05/2026 à 16:20

vérifie aussi la queue depth de tes LUNs côté SAN et côté VM. si la VM envoie trop de requêtes et que le SAN en accepte moins ça peut backlog et créer des await. et des snapshots ou des réplications sur le SAN en arrière-plan? ça peut plomber les perfs

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

le scheduler est en deadline partout. kernel 5.15.x. et virtio_blk est bien chargé. côté san rien de spécial les autres vms sur les mêmes LUNs vont bien. pas de snapshots ou réplications qui tournent à ces moments-là

Modifié le 23/05/2026 à 16:20
thomas-henry
Membre Actif Secouriste
Avatar de thomas-henry
thomas-henry
Membre Actif Secouriste

ok donc pas le scheduler classique. est-ce que c'est lié à des pics de workload sur les VMs? t'as des processus qui font des gros batchs i/o d'un coup? ou c'est random? regarde les métriques au niveau des cgroups ou du process avec pidstat -d

Modifié le 23/05/2026 à 16:20
adrien-brun
Membre Actif Secouriste
Avatar de adrien-brun
adrien-brun
Membre Actif Secouriste

et les logs kernel (dmesg -T)? des erreurs disk, des timeouts scsi, des resets de bus? même si c'est du virtio, ça peut masquer un souci physique en dessous. un truc du genre blk_update_request: I/O error?

Modifié le 23/05/2026 à 16:20

y'a pas une limite de connexions ou de débit réseau sur l'hyperviseur pour le trafic i/o? ou des ressources cpu allouées qui sont tirées à bloc sur le node physique? un top ou htop sur l'hyperviseur pendant un pic de latence peut donner un indice

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

non les logs kernel sont propres. pas d'erreurs disk. c'est des dbs donc beaucoup de petites écritures aléatoires et des lectures. ça peut être des pics de requêtes oui mais le cpu/mem de la vm est ok. c'est juste l'i/o qui se met à ramer

01/12/2024 à 01:36
thomas-henry
Membre Actif Secouriste
Avatar de thomas-henry
thomas-henry
Membre Actif Secouriste

hmmm bizarre. est-ce que t'as joué avec les paramètres de cache du système de fichiers? vm.dirty_ratio, vm.dirty_background_ratio? si la vm accumule trop de pages sales en mémoire avant de les flusher sur le disk ça peut créer des latences monstrueuses quand le flush se produit

Modifié le 23/05/2026 à 16:20
adrien-brun
Membre Actif Secouriste
Avatar de adrien-brun
adrien-brun
Membre Actif Secouriste

oui c'est une excellente piste. par défaut le dirty_ratio est à 20% et dirty_background_ratio à 10% de la ram. si ta vm a bcp de ram et beaucoup d'écritures ça peut faire des gros pauses. essaye de les baisser à 5 et 2% pour forcer des flush plus fréquents et plus petits

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

ah oui j'avais pas pensé à ça ! le dirty_ratio était bien à 20 et 10. je vais tester de baisser ça. je mets vm.dirty_background_ratio = 2 et vm.dirty_ratio = 5 via sysctl pour voir

Modifié le 23/05/2026 à 16:20
thomas-henry
Membre Actif Secouriste
Avatar de thomas-henry
thomas-henry
Membre Actif Secouriste

normalement ça devrait lisser la charge i/o. le kernel va vider le cache plus souvent et éviter les gros à-coups. tiens nous au jus

04/12/2024 à 16:37
patrick81
Auteur Actif
Avatar de patrick81
patrick81
Auteur Actif

alors le changement a eu un effet direct. les pics d'await sont quasi disparus. les perfs sont beaucoup plus stables maintenant. c'était bien le cache dirty du kernel qui mettait le bazar. un grand merci la team vous êtes au top!

05/12/2024 à 14:21

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