Quel I/O scheduler pour du NVMe sous Linux

Posté par tdelannoy le 03/03/2026
RÉSOLU

tdelannoy

Membre depuis le 11/09/2019

hello la team on est en train de tunner des serveurs de prod qui utilisent des disques NVMe sous linux et je me pose la question du I/O scheduler. on est resté sur cfq un peu par habitude mais ça me paraît pas idéal pour du flash moderne. vous utilisez quoi vous

# check le scheduler actuel
cat /sys/block/nvme0n1/queue/scheduler

Commentaires

stephane07

Membre depuis le 14/08/2024

pour du nvme c `noop` ou `none` direct les schedulers classiques comme cfq ou deadline sont faits pour des disques rotatifs ils réordonnent les i/o pour minimiser les mouvements de tête ce qui est inutile sur nvme

dubois-stephane

Membre depuis le 12/08/2024

exactement le hardware nvme est déjà très intelligent pour gérer l'ordre des requêtes l'os doit juste les passer le plus vite possible sans ajouter de latence. `noop` est le meilleur choix dans presque tous les cas

tdelannoy

Membre depuis le 11/09/2019

d'acc je vois donc le rôle du kernel se réduit juste à passer l'i/o au disque sans y toucher. c'est logique. vous avez vu des gains significatifs en passant à `noop`

stephane07

Membre depuis le 14/08/2024

clairement des gains en latence et un peu en iops surtout sous forte charge si ton appli fait beaucoup d'i/o aléatoires. le kernel passe juste les commandes au contrôleur nvme qui les optimise super bien lui-même

dubois-stephane

Membre depuis le 12/08/2024

oui la latence c'est le gain principal. si t'es sur un kernel récent (genre 5.0+) le scheduler par défaut `mq-deadline` est aussi pas mal il est conçu pour les devices multi-queues mais `none`/`noop` reste souvent le plus direct

tdelannoy

Membre depuis le 11/09/2019

on est sur du 5.15 je vais tester `none` alors on cherche surtout à optimiser la latence pour notre base de données. merci pour l'info

stephane07

Membre depuis le 14/08/2024

fais gaffe `noop` et `none` c'est le même principe mais `none` est une implémentation plus moderne `mq-noop` ou `none` sont les termes exacts selon ton kernel. tu peux le changer à chaud via `echo none > /sys/block/nvme0n1/queue/scheduler`

tdelannoy

Membre depuis le 11/09/2019

j'ai testé avec `none` sous charge et on a clairement gagné des microsecondes précieuses c parfait. merci à vous

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