Performances I/O bizarres sur VM Linux avec NVMe

Posté par coulon-aimee le 17/05/2024
RÉSOLU

coulon-aimee

Membre depuis le 10/08/2019

salut la compagnie ! j'ai un souci de perf i/o super fluctuantes sur une VM prod (Debian 11 kernel 5.10) qui utilise des disques NVMe virtuels. Parfois c'est fulgurant et d'autres fois on a des latences de plusieurs dizaines de ms pour des petites écritures. C'est surtout visible sur des charges de type base de données. On dirait que le scheduler i/o fait n'importe quoi. Des idées pour optimiser ça ?


# pour voir le scheduler actuel
cat /sys/block/nvme0n1/queue/scheduler

Commentaires

fpichon

Membre depuis le 04/04/2019

yo pour du NVMe le scheduler recommandé c'est souvent noop ou none selon la version du kernel. Les contrôleurs NVMe sont déjà très optimisés donc laisser le kernel faire son boulot derrière ça ajoute de l'overhead inutile

paul-thibault

Membre depuis le 04/05/2024

exactement. le default sur des kernels plus anciens peut être cfq ou deadline qui sont pas du tout faits pour du ssd/nvme. passe en noop avec echo noop > /sys/block/nvme0n1/queue/scheduler et voit si ça stabilise

coulon-aimee

Membre depuis le 10/08/2019

ok je suis en deadline là. je vais tester noop. par contre c'est une VM sur Proxmox avec un backend Ceph. ça change quelque chose ou l'OS invité doit quand même avoir noop ?

fpichon

Membre depuis le 04/04/2019

même avec Ceph derrière le NVMe virtuel reste un device block pour l'OS invité. donc noop reste une bonne approche. Par contre si tu as des soucis de contention sur Ceph lui-même ça règlera pas tout. Faut monitorer les IOPS et latences côté Ceph aussi

paul-thibault

Membre depuis le 04/05/2024

oui noop sur l'invité c le standard pour ce genre de setup. mais aussi vérifie le `discard` ou `fstrim`. si t'es sur un FS qui supporte trim et que ça se déclenche mal ou pas du tout ça peut accumuler de la garbage et ralentir les I/O à la longue

coulon-aimee

Membre depuis le 10/08/2019

j'ai activé noop et ça semble déjà un peu mieux mais j'ai toujours des pics occasionnels. vous pensez aux tailles de blocs ? la db est configurée pour des blocs de 8k. l'OS est en 4k. ça peut créer du désalignement et des perfs pourries non ?

fpichon

Membre depuis le 04/04/2019

carrément l'alignement c'est critique. si ta db écrit par blocs de 8k et ton fs/storage est en 4k tu peux doubler le nombre d'opérations physiques. il faudrait aligner la taille de bloc du fs (ext4 mkfs option) avec celle de ta db si possible

paul-thibault

Membre depuis le 04/05/2024

et aussi la taille de la queue I/O du device. /sys/block/nvme0n1/queue/nr_requests. Si c'est trop bas ça peut limiter les IOPS en parallèle. Tente d'augmenter ça ptete à 256 ou 512 si tu as beaucoup de requêtes concurrentes

coulon-aimee

Membre depuis le 10/08/2019

ok j'ai checké l'alignement et c'était pas optimal. j'ai remonté la queue size et j'ai reconfiguré noop. les perfs sont vachement plus stables maintenant. la db respire mieux. merci pour les conseils précis !

fpichon

Membre depuis le 04/04/2019

nickel content que ça tourne mieux. les i/o c'est souvent un mix de petits réglages qui font la diff. pense à pérenniser tes changements dans /etc/default/grub ou via udev rules si c'est bon

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