Perf I/O pourrie sur des VM avec des gros IOPS dispo

Posté par anastasie-dumont le 21/09/2024
RÉSOLU

anastasie-dumont

Membre depuis le 02/06/2020

on a des vm linux sur vSphere avec du stockage flash qui nous promet 50k iops et on plafonne à genre 5k. nos app souffrent. j'ai regardé les stats iostat et le %util est à 100% mais les r/s et w/s sont minables. j'ai l'impression que le kernel met des plombs à traiter les requêtes

# iostat -x 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    1.50   90.00    0.00    8.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00   20.00  100.00   100.00  1000.00    18.33     5.00   10.00    5.00   11.00   8.33  100.00

Commentaires

parent-olivier

Membre depuis le 17/03/2019

%iowait à 90% et %util à 100% ça sent le scheduler I/O qui merdouille. T'es en quel scheduler là ?

cat /sys/block/sda/queue/scheduler

catherine-pruvost

Membre depuis le 23/01/2020

Grosse latence aussi sur ton await (10ms) pour peu d'IOPS. Si t'es sur VM, c'est aussi un classique de la virtualisation. Y'a le scheduler guest OS mais aussi celui de l'hyperviseur et le driver de la carte SCSI virtuelle

anastasie-dumont

Membre depuis le 02/06/2020

c'est du deadline. on a essayé noop aussi pas de grosse diff

parent-olivier

Membre depuis le 17/03/2019

bizarre si noop change rien. T'as quel type de filesystem ? xfs ext4 ? et les options de montage ? noatime ou directio ça peut aider si la charge est très spécifique

lucas-amelie

Membre depuis le 08/06/2019

Sur vSphere avec du flash, le scheduler

none
ou
noop
est le plus adapté côté guest. Les schedulers comme
deadline
ou
cfq
sont pour les disques rotatifs et introduisent une latence inutile. C'est important de s'assurer que c'est bien appliqué et persistant après reboot.

catherine-pruvost

Membre depuis le 23/01/2020

Et as-tu vérifié les stats de l'hyperviseur pour cette VM ? La latence est vue comment depuis le vCenter ? C'est possible que le problème vienne avant même d'atteindre le guest OS. Souvent la latence est déjà là au niveau vSphere.

anastasie-dumont

Membre depuis le 02/06/2020

nono filesystem c'est xfs. options par défaut. j'ai pas regardé les stats coté vCenter direct je vais demander à l'admin. mais pour le scheduler même en noop j'ai les mêmes symptômes. on a genre 50 threads qui font des petites écritures de 4k en //

parent-olivier

Membre depuis le 17/03/2019

50 threads de 4k, ça fait beaucoup de petites requêtes. Le

nr_requests
sur ton device est à combien ? T'as essayé de l'augmenter ? genre
echo 256 > /sys/block/sda/queue/nr_requests
ça gère le nombre max de requêtes I/O en attente dans la queue du kernel

lucas-amelie

Membre depuis le 08/06/2019

Ah oui et la

queue_depth
de la carte SCSI virtuelle sur la VM côté vSphere est critique. Par défaut c'est souvent bas (ex: 32 ou 64). Pour du flash et des grosses charges, il faut l'augmenter à 128, 256 voire 512. Ça c'est un truc côté vSphere pas linux. Ça limite le nombre de requêtes simultanées que le driver peut envoyer au stockage.

catherine-pruvost

Membre depuis le 23/01/2020

Confirme aussi que les drivers VMware paravirtualisés sont bien utilisés (pvscsi) et à jour. Si t'es sur l'ancien lsi_sas, c'est pas optimisé du tout pour les charges IOPS et ça peut brider fortement les perfs. Un

lspci -v
pour voir le driver utilisé.

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