perfs i/o disque pourries sur nos vms linux comment diagnostiquer

mendes-bertrand 12/04/2025
RÉSOLU
mendes-bertrand
Auteur Actif
Avatar de mendes-bertrand
mendes-bertrand
Auteur Actif

salut la compagnie. on a des vms linux (centos/ubuntu) sur notre infra on-prem (kvm/vmware) et certaines ont des perfs i/o disque vraiment mauvaises. ça se ressent sur les applis qui tournent dessus. j'ai l'impression que c'est pas le stockage lui-même qui est lent mais plutôt un souci côté os ou vm. des commandes à lancer, des configs à vérifier pour comprendre d'où ça vient ?


# ce que j'ai déjà regardé rapidement
df -h /var/log
iostat -xz 1 10
12/04/2025 à 19:34

12 commentaires

jerome-riou
Membre Actif
Avatar de jerome-riou
jerome-riou
Membre Actif

première chose oui iostat c la base. regarde les %util et await. si await est très élevé alors que %util est faible c ptete des soucis de fragmentation ou de latence. si les deux sont hauts c la queue du disque qui est saturée.

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

sur tes vms c'est quelle config de disques ? virtio-blk sur kvm ? paravirtualisé sur vmware ? et côté host la config du storage c'est quoi ? raid ? ssd ? nvm-e ? un slow i/o sur la vm peut venir d'un disque saturé sur l'hyperviseur partagé avec d'autres vms.

14/04/2025 à 10:26
cmathieu
Membre Actif
Avatar de cmathieu
cmathieu
Membre Actif

check le scheduler i/o de ton kernel. cat /sys/block/sdX/queue/scheduler. pour les vms souvent noop ou deadline sont meilleurs que cfq qui est plutôt pour les disques physiques rotatifs. change-le avec echo noop > /sys/block/sdX/queue/scheduler (temporaire) ou grub (persistant).

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

aussi les options de montage filesystem. noatime ça aide à réduire les écritures inutiles sur les inodes. et si t'es sur ext4 avec un journal ça peut être utile de tester barrier=0 sur des workloads non critiques mais attention au risque de corruption en cas de crash.

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

c quel type de workload qui fait ramer ? petits fichiers, gros fichiers, random read/write, sequential ? ça impacte le choix des optimisations. si c de la bdd les petits random writes sont les pires.

17/04/2025 à 02:00
mendes-bertrand
Auteur Actif
Avatar de mendes-bertrand
mendes-bertrand
Auteur Actif

ok alors le iostat montre %util souvent à 100% et await très haut, genre 100-200ms parfois. c'est du virtio-blk sur kvm, le host est sur du raid6 ssd. la workload c'est des applis java qui font beaucoup d'accès logs et qqs accès bdd locale.

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

100% util et await à 200ms c clair ça pue. ça sent la saturation. vu que c du raid6 ssd côté host et virtio-blk c bizarre. tu as testé le scheduler i/o ? et fio c la commande ultime pour vraiment benchmarker tes perfs i/o dans la vm.


# exemple fio pour random write 4k
fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting --filename=/testfile
Modifié le 23/05/2026 à 16:20
cmathieu
Membre Actif
Avatar de cmathieu
cmathieu
Membre Actif

sur kvm vérifie la config du cache disque de la vm. cache=none est souvent recommandé pour les perfs dans un contexte de raid hardware. si t'as writeback ou writethrough ça peut être ok aussi mais none est le plus direct.

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

le queue_depth aussi peut jouer. c'est la profondeur de la file d'attente i/o. par défaut c'est souvent 128 ou 256. tu peux le tweak mais c'est avancé. et le num_queues si tu as plusieurs cpus virtuels, tu peux aligner le nombre de queues avec le nombre de vcpus pour mieux paralléliser.

Modifié le 23/05/2026 à 16:20
mendes-bertrand
Auteur Actif
Avatar de mendes-bertrand
mendes-bertrand
Auteur Actif

j'ai switché le scheduler à noop et testé fio. ça a l'air un peu mieux mais pas encore le nirvana. cache=none est déjà configuré. je vais regarder le num_queues et le queue_depth. et aussi l'option noatime sur les points de montage logs.

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

ok good. si fio montre toujours des chiffres bas après ces tweaks alors c'est peut-être l'hyperviseur ou le storage backend du host qui a un souci, ou une saturation globale. un autre truc à voir c'est si les dirty_ratio et dirty_background_ratio du kernel linux ne sont pas trop agressifs et causent des stalls.

Modifié le 23/05/2026 à 16:20
mendes-bertrand
Auteur Actif
Avatar de mendes-bertrand
mendes-bertrand
Auteur Actif

merci à tous pour les conseils super détaillés ! j'ai pas mal de billes pour continuer l'investigation. je vais remonter ça à l'équipe infra. c'est super utile !

23/04/2025 à 05:22

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