Latence disque élevée sur VM Linux avec NVMe

alaine 13/04/2025
RÉSOLU
alaine
Auteur Actif
Avatar de alaine
alaine
Auteur Actif

salut la team sysadmin ! j'ai un souci de perfs I/O sur une VM linux (ubuntu 22.04, kernel 6.2) toute neuve qui tourne sur un serveur physique avec des NVMe super rapides. la VM a son disque sur un LVM au-dessus d'un LVM sur l'NVMe directement. je vois des pics de latence à 50ms sur des opérations qui devraient prendre 1-2ms. l'appli gueule grave. j'ai mis le scheduler I/O à noop sur l'OS guest mais ça change rien.

13/04/2025 à 18:34

9 commentaires

maggie84
Membre
Avatar de maggie84
maggie84
Membre

ah le classique scheduler I/O. si t'es sur du NVMe avec un bon HBA coté host et que t'as du LVM sur LVM ça sent le none ou mq-deadline coté host et none ou noop coté guest. noop c'est bien quand le stockage gère déjà tout l'ordonnancement.

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

totalement d'accord avec none ou noop sur les deux niveaux. mais surtout, il faut regarder si tu as pas un souci de driver NVMe sur le host. et est-ce que ton hyperviseur est bien tuné pour les NVMe ? genre pas de sur-allocation de CPU ou de mémoire qui flinguerait les queues I/O.

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

le none scheduler est souvent le meilleur pour les NVMe parce qu'ils ont leur propre intelligence pour optimiser les accès. mais si tu as du LVM, tu as une couche de plus. t'as vérifié les block sizes de tes filesystems et de tes LVMs ? des fois un mismatch peut pénaliser un peu.

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

le scheduler sur le host est mq-deadline. j'avais mis noop sur le guest. j'ai testé none sur le guest pareil. je vais tenter none sur le host aussi. les block sizes sont default 4k partout. c'est une VM KVM/QEMU, je suis pas sûr des drivers NVMe du host.

Modifié le 23/05/2026 à 16:20
maggie84
Membre
Avatar de maggie84
maggie84
Membre

si le host est en mq-deadline c'est pas idéal pour le NVMe. mets none sur le host pour les NVMe. et côté guest essaie none ou kyber (si ton kernel guest le supporte bien). kyber est pas mal pour les workloads mixtes.

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

ouais et un truc tout con mais qui arrive souvent : est-ce que ton LVM coté guest est bien en mode cache=writethrough si tu as des caches ? des fois un writeback mal géré peut donner des latences cheloues. et la taille de tes queues I/O aussi. cat /sys/block/nvme0n1/queue/nr_requests.

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

ok j'ai mis none partout (host nvme, guest lvm). et j'ai regardé nr_requests c'est à 128 par défaut. les latences ont un peu baissé mais c'est pas encore parfait. j'ai toujours des pics de latence. je commence à suspecter le LVM sur LVM. est-ce que c'est une bonne idée cette architecture ?

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

LVM sur LVM c'est pas l'idéal pour les perfs pures. chaque couche ajoute un overhead. si tu peux simplifier ça serait mieux. genre LVM direct sur NVMe et ta VM prend un LV directement. ou carrément passer le NVMe en passthrough à la VM si c'est une VM unique sur ce NVMe. ça élimine l'hyperviseur de la boucle I/O.

20/04/2025 à 12:59
alaine
Auteur Actif
Avatar de alaine
alaine
Auteur Actif

je vais tester de simplifier le stack LVM et voir pour le passthrough si c'est possible. ça expliquerait les pics. merci pour toutes ces pistes c'est super utile !

21/04/2025 à 08:04

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