Perf I/O aléatoires sur serveur DB avec NVMe

Posté par rmartineau le 25/11/2024
RÉSOLU

rmartineau

Membre depuis le 05/07/2024

salut les linuxistes

on a une base postgres sur un gros serveur avec des NVMe samsung des puces de dingue quoi. et pourtant on a des pics de latence I/O de temps en temps genre 100ms alors que d'habitude c'est <1ms. ça arrive souvent sous charge mais pas tout le temps et on comprend pas pourquoi. le CPU est OK la RAM est OK


# fstab
UUID=... /data ext4 defaults,noatime,nodiratime 0 0

# on a déjà mis noop comme scheduler mais ça change rien
cat /sys/block/nvme0n1/queue/scheduler
# [noop] mq-deadline kyber bfq none

des idées pour debug ça ? on a testé ioping, fio c'est pas reproductible facilement

Commentaires

lenoir-etienne

Membre depuis le 17/09/2023

euh nvme et noop c le combo classique oui. t'as vérifié les firmwares de tes NVMe ? des fois y a des bugs de latence corrigés avec un firmware plus récent

wlelievre

Membre depuis le 26/07/2019

t'as pas une config multi-path ou des trucs genre dm-multipath avec tes NVMe ? des fois ça met le bordel et le scheduler est pas bien appliqué

michelle60

Membre depuis le 17/06/2020

kernel version ? et t'as checké les logs dmesg pour des erreurs nvme des resets ou des trucs du genre ? des fois ça fait des pauses le temps de récupérer

rmartineau

Membre depuis le 05/07/2024

firmware à jour dmesg clean pas de multipath. kernel 5.15. on a déjà regardé tout ça ça semble propre

lenoir-etienne

Membre depuis le 17/09/2023

ok. autre piste le garbage collection de tes NVMe. si la flash est trop remplie ou si le controller est saturé par le GC ça peut causer des pics. t'as quelle utilisation d'espace ? et t'as de l'over-provisioning ?

rmartineau

Membre depuis le 05/07/2024

on est à 70% d'utilisation et oui il y a de l'over-provisioning. les samsung PM1733 c'est pas censé avoir ce genre de souci ils sont costauds

wlelievre

Membre depuis le 26/07/2019

ptete un souci de cgroup v2 ou de répartition des ressources I/O si t'as d'autres trucs qui tournent sur la machine. même si CPU/RAM sont ok l'I/O peut être limité

michelle60

Membre depuis le 17/06/2020

tu uses `sync` ou `async` i/o pour postgres ? et tes `fsync` sont configurés comment ? une mauvaise gestion des écritures sync peut bloquer tout le pipeline

rmartineau

Membre depuis le 05/07/2024

postgresql est en `fsync=on` et `synchronous_commit=on` donc oui il fait des fsync réguliers. on a besoin de la durabilité maximale. mais le problème apparaît même quand la charge est juste en lecture

lenoir-etienne

Membre depuis le 17/09/2023

alors si c'est en lecture même avec noop ça peut être le scheduler qui est pas adapté aux NVMe. pour les NVMe modernes souvent c'est même pas `noop` mais carrément laisser le kernel faire sa vie ou `none` si c'est dispo pour ta distrib

certains recommandent `none` pour les NVMe vu que les cartes gèrent leur propre queue. essaye de setter `none` si dispo. sinon mq-deadline est pas mal si t'es sur un kernel récent

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