Perf I/O dégueu sur VM Linux avec disques NVMe

ines-garcia 27/10/2024
RÉSOLU
ines-garcia
Auteur
Avatar de ines-garcia
ines-garcia
Auteur

salut les linuxiens

on a migré nos VM dev sur une nouvelle infra avec du NVMe en backend et depuis, les perfs I/O sont vraiment pas top. j'ai un peu de mal à comprendre pourquoi.

les VMs sont sur KVM, avec des disques virtio-blk. iostat me montre que le disque est utilisé à 90% mais le throughput est minable, genre 20-30MB/s alors que les NVMe derrière sont censés envoyer du lourd.

y'a un truc à tuner côté kernel linux pour du NVMe virtualisé ? genre le scheduler I/O ?

27/10/2024 à 05:34

7 commentaires

dufour-zacharie
Membre Actif Secouriste
Avatar de dufour-zacharie
dufour-zacharie
Membre Actif Secouriste

hello !

c'est clair qu'avec du nvme tu devrais pas avoir ça. pour le scheduler i/o, sur du nvme physique on est souvent en none ou noop car le device gère lui-même son ordonnancement. mais sur une vm avec virtio-blk, c'est pas toujours le meilleur choix.

tu peux checker cat /sys/block/vda/queue/scheduler (ou sda/nvme0n1 etc, selon ton disque). si c'est noop ou none, essaye de basculer sur mq-deadline ou bfq pour voir. echo mq-deadline > /sys/block/vda/queue/scheduler (en root bien sûr).

Modifié le 23/05/2026 à 16:20
petit-guy
Membre
Avatar de petit-guy
petit-guy
Membre

yep le scheduler c'est la base. aussi, t'as regardé les métriques de l'hyperviseur ? des fois le problème est pas dans la VM mais la couche virt. genre si le host est surchargé ou le driver virtio pas à jour.

29/10/2024 à 04:19
ines-garcia
Auteur
Avatar de ines-garcia
ines-garcia
Auteur

ok je vais regarder le scheduler. c'est bien noop par défaut. l'hyperviseur semble ok, pas de surcharge cpu/ram. drivers virtio sur le host sont les derniers. coté VM c'est bien virtio-blk.

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

virtio-blk c'est le "vieux" driver pour les disques virtuels. pour du NVMe backend, souvent le virtio-scsi est plus performant car il gère mieux les commandes SCSI et peut passer plus d'infos sur le type de backend au kernel guest. ça permet au kernel guest de mieux optimiser l'I/O.

si tu peux tester de changer le type de disque virtuel dans ta config KVM de virtio-blk à virtio-scsi et voir ce que ça donne, c'est une grosse piste.

Modifié le 23/05/2026 à 16:20
ines-garcia
Auteur
Avatar de ines-garcia
ines-garcia
Auteur

intéressant ça ! j'avais pas pensé au virtio-scsi. je vais tenter de recréer une VM de test avec virtio-scsi et le scheduler en mq-deadline.

Modifié le 23/05/2026 à 16:20
ines-garcia
Auteur
Avatar de ines-garcia
ines-garcia
Auteur

BOOM ! les gars vous êtes des génies !

j'ai refait une VM avec virtio-scsi et j'ai mis le scheduler en mq-deadline. les perfs I/O sont passées de 30MB/s à genre 500MB/s sur un simple dd. c'était bien le combo virtio-blk + noop qui bridait tout avec le backend NVMe. incroyable la différence.

merci un million de fois !

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

nickel ! content que ça ait résolu ton problème. c'est un classique avec les environnements virtuels, le "optimisé pour bare-metal" n'est pas toujours le bon choix pour le guest.

02/11/2024 à 16:12

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