Perf I/O dégueu sur VM avec disque NVMe virtuel

Posté par christiane15 le 04/03/2026
RÉSOLU

christiane15

Membre depuis le 09/04/2019

Hello la team, on a des VMs KVM sur des hôtes avec du NVMe physique, mais les perfs I/O sur ces VMs sont vraiment à chier. C'est du `virtio-scsi` avec des disques que j'ai configuré en `cache=none,io=native`. On s'attendait à des trucs de fou mais on est au niveau d'un HDD à plateaux. Genre, un simple `dd` prend 10x plus de temps que sur l'hôte physique.

# exemple dd sur la vm
dd if=/dev/zero of=testfile bs=1m count=1024 oflag=direct

Je pige pas, y a un truc que je rate dans la chaîne ?

Commentaires

edouard78

Membre depuis le 28/03/2019

salut ! t'as regardé ton `iostat -x` pendant que tu fais un test ? voir si le `util` est haut et si le `await` ou `svctm` sont élevés. et c'est quel type de workload ? random read/write, sequential ?

christiane15

Membre depuis le 09/04/2019

oui j'ai `iostat`. le `util` est à 99% mais les `tps` sont ridicules, genre 20-30 tps pour des block devices nvme. `await` est à plusieurs centaines de ms. c'est du mix, plutôt de la petite écriture/lecture random, c'est pour une base de données

maurice42

Membre depuis le 27/02/2019

ok 99% util et tps faibles c'est un bottleneck clair. sur le NVMe physique côté hôte c'est quoi le scheduler I/O ? et côté VM ? avec `cat /sys/block/sdX/queue/scheduler` ou `nvmeXnX` pour NVMe direct

christiane15

Membre depuis le 09/04/2019

sur l'hôte c'est `none` (nvme direct) normal. sur la VM c'est `bfq`. est-ce que ça peut avoir un impact énorme même avec `io=native` ?

edouard78

Membre depuis le 28/03/2019

ah `bfq` pour une BDD avec du random I/O c'est pas idéal. `bfq` est super pour les workloads desktop interactifs mais pas pour des serveurs. essaie de passer la VM en `mq-deadline` ou même `none` si c'est du virtio-blk (pas virtio-scsi). ça peut aider beaucoup

vrenaud

Membre depuis le 20/07/2019

oui `bfq` c'est un tue-la-performance pour du random io intensif. si tu es en `virtio-scsi` `mq-deadline` est souvent le meilleur compromis. sinon t'as check si tu utilises `io_uring` dans ton applicatif ? ça peut aussi booster pas mal si bien implémenté

christiane15

Membre depuis le 09/04/2019

ok je vais tester `mq-deadline` sur la VM. je relance mes tests et je vois. pour `io_uring` non pas encore, l'appli utilise des appels standards. je me concentre sur l'infra pour l'instant.

christiane15

Membre depuis le 09/04/2019

bon, `mq-deadline` a bien amélioré les choses ! les `await` ont chuté. on est pas encore au niveau de l'hôte mais c'est bien mieux. y a encore des gains possibles ou c'est le mieux qu'on puisse avoir avec `virtio-scsi` ?

maurice42

Membre depuis le 27/02/2019

si tu peux passer en `virtio-blk` au lieu de `virtio-scsi` ça peut apporter un petit plus, c'est un peu plus simple et direct. mais le gros gain c'était le scheduler. après il y a toujours un overhead de virtualisation mais ça devrait être minimal avec du bon tuning.

christiane15

Membre depuis le 09/04/2019

je peux tester `virtio-blk` sur une autre VM. je vais faire ça. merci pour tous les conseils, ça m'a bien aidé à comprendre la chaîne I/O virtuelle !

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