Sujet :
RÉSOLU
Liste des sujets Répondre Créer un sujet
Membre depuis le 24/08/2024
salut les linuxiens ! j'ai un souci bizarre sur un de nos serveurs de base de données. il a un nvme tout neuf qui est censé être ultra rapide, mais iostat me montre un %iowait qui tape dans les 50-70% alors que le débit disque est ridicule genre 10-20 MB/s max. en gros le disque attend tout le temps mais ne fait rien. le CPU est pas saturé. qu'est-ce qui peut causer ça sur un nvme ?
iostat -x 1
# ...
# avg-cpu: %user %nice %system %iowait %steal %idle
# 10.00 0.00 5.00 65.00 0.00 20.00
# Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz areq-sz asvc-t %util
# nvme0n1 50.00 100.00 500.00 1000.00 0.00 0.00 0.00 0.00 50.00 100.00 0.10 10.00 0.60 0.90
# (les stats ci-dessus sont un exemple, pas les vraies valeurs, mais on voit bien le %iowait très haut et r/w/kB/s très bas)
vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
sebastien-thibault
Membre depuis le 15/08/2024
salut ! le
%iowaitélevé avec un faible débit c'est souvent plein de petites requêtes I/O aléatoires qui saturent le queue depth ou un truc côté kernel. vérifie déjà le scheduler disque. sur un NVMe moderne tu devrais être enmq-deadlineounoop. si tu es encore encfqoubfqça peut créer des latences de ouf.martineau-sebastien
Membre depuis le 11/08/2024
ouais et vois aussi quel processus est responsable de ces i/o.
iotopoupidstat -d 5peuvent t'aider à identifier le coupable. parfois c'est juste un truc qui fait plein de petitsfsync()ou qui lit des tonnes de petits fichiers sans buffering. ça tue la performance.anouk58
Membre depuis le 02/05/2024
autre piste : la taille du
block sizede ton système de fichiers et des requêtes de l'appli. si ton appli écrit en blocs de 4KB et ton FS est en 4KB mais que le disque préfère du 512B ou du 8KB ça peut générer du overhead. mais bon sur NVMe c'est rare que ça soit si critique. t'as vérifié lestrimopérations ?caroline49
Membre depuis le 15/07/2024
est-ce que ton applicatif fait des
direct I/Oou utilise le cache du kernel ? si c'est du direct i/o ça bypass le cache et toutes les petites écritures sont directement flushées au disque. sur un nvme c'est souvent bien mais si l'appli en fait trop ça peut être pire. fais un test avecfiopour voir les perfs brutes du disque et compare avec ce que ton app faitnicole-andre
Membre depuis le 24/08/2024
ok un grand merci à tous pour les pistes ! c'était bien le scheduler, il était sur
mq-deadlinedonc ça c'était bon. par contre, en utilisantiotopj'ai vu que c'était notre service de base de données (un truc custom) qui faisait des milliers de petites écritures de 4KB avecO_DIRECTà chaque fois. le comboo_direct+ petites writes =iowaitde fou même sur un nvme. j'ai pu modifier l'appli pour bufferiser un peu plus les écritures et le%iowaitest retombé à 5% avec un débit bien plus sain. ouf !