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

Posté par ines-garcia le 27/10/2024
RÉSOLU

ines-garcia

Membre depuis le 19/03/2019

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 ?

Commentaires

dufour-zacharie

Membre depuis le 01/04/2020

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).

petit-guy

Membre depuis le 08/05/2019

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.

ines-garcia

Membre depuis le 19/03/2019

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.

dufour-zacharie

Membre depuis le 01/04/2020

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.

ines-garcia

Membre depuis le 19/03/2019

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`.

ines-garcia

Membre depuis le 19/03/2019

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 !

dufour-zacharie

Membre depuis le 01/04/2020

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.

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