perf I/O bizarres sur des VM Linux en prod avec du mongo

Posté par luce80 le 06/02/2025
RÉSOLU

luce80

Membre depuis le 26/03/2019

hello la team ! on a des VMs Linux sur VMware qui hébergent du MongoDB et on a des drops de perf I/O assez violents de temps en temps. genre les queries qui prennent 10x plus de temps. j'ai checké le CPU et la RAM des VMs, rien d'anormal. ça sent le scheduler I/O qui fait des siennes. vous avez des best practices pour les VMs avec des bases de données ?

Commentaires

tdelattre

Membre depuis le 02/07/2020

salut. pour les VMs, surtout si l'OS hôte gère déjà son propre scheduler I/O (genre ESXi), on recommande souvent `noop` ou `deadline`. `cfq` est souvent le défaut mais il est pas idéal pour les environnements virtualisés car il fait trop de boulot déjà fait par l'hyperviseur.

denis-victor

Membre depuis le 15/10/2024

ouais `noop` c'est le plus simple il passe tout direct au kernel sans ordonnancement. `deadline` c'est un bon compromis, il assure que les requêtes ne soient pas trop retardées. pour voir ton scheduler actuel : `cat /sys/block/sdX/queue/scheduler` (remplace sdX par ton device).

rclement

Membre depuis le 26/12/2024

et si t'es sur un kernel récent (genre 4.x ou plus) et que t'as du NVMe ou du stockage bloc rapide, `mq-deadline` peut être encore mieux. c'est la version multi-queue de `deadline` qui tire parti des interfaces modernes. faut voir si ton kernel le supporte.

luce80

Membre depuis le 26/03/2019

merci ! je viens de checker, on est en `cfq`. je vais passer une VM en `noop` pour tester. pour changer à chaud : `echo noop > /sys/block/sdX/queue/scheduler` c'est ça ? faut le rendre persistant dans grub après.

tdelattre

Membre depuis le 02/07/2020

c'est ça pour le changer à chaud. pour la persistance, modifie la ligne `GRUB_CMDLINE_LINUX` dans `/etc/default/grub` et ajoute `elevator=noop` puis `update-grub` et reboot. si `noop` te donne pas les perfs que tu veux, tente `deadline` ou `mq-deadline`.

denis-victor

Membre depuis le 15/10/2024

attention aussi au niveau de VMware. t'es sur quel type de datastore ? et t'as checké le queue depth côté VM et côté hyperviseur ? parfois c'est une saturation là-bas avant même que le scheduler Linux ne voie le souci.

luce80

Membre depuis le 26/03/2019

on est sur du vSAN. j'ai passé une VM en `noop`, c'est mieux mais j'ai toujours des pics occasionnels. je vais regarder le queue depth et les métriques vSAN. on a pas mal de VMs sur le même datastore ptete de la contention.

rclement

Membre depuis le 26/12/2024

si t'es sur vSAN avec un kernel moderne, `mq-deadline` est souvent le vainqueur. `noop` est bien pour les hyperviseurs qui gèrent tout, mais `mq-deadline` peut mieux répartir la charge sur les queues I/O du kernel et du stockage sous-jacent.

luce80

Membre depuis le 26/03/2019

je viens de passer en `mq-deadline` sur une VM et là c'est le jour et la nuit. plus aucun pic de latence. les queries mongo sont stables. c'était bien le scheduler ! merci à tous pour les infos et les pistes, vous m'avez sauvé mon lundi.

tdelattre

Membre depuis le 02/07/2020

nickel content que ça ait résolu ton problème ! `mq-deadline` c'est vraiment le bon choix pour les infra modernes.

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