Plongeons dans le monde des planificateurs d'E/S de Linux et voyons comment nous pouvons les ajuster pour les technologies de stockage modernes. Attachez vos ceintures, car nous allons passer de 0 à 100K IOPS en un rien de temps !
Le paysage des planificateurs d'E/S
Avant de commencer à ajuster, faisons un rapide tour d'horizon des planificateurs d'E/S disponibles dans les noyaux Linux modernes :
- CFQ (Completely Fair Queuing) : L'ancien fiable, mais qui montre son âge
- Deadline : Un bon polyvalent, surtout pour les charges de travail mixtes
- NOOP : Simple et efficace pour les SSD
- BFQ (Budget Fair Queueing) : Le nouveau venu, promettant une meilleure latence
- mq-deadline : Version multi-file d'attente de Deadline
- Kyber : Conçu pour le stockage rapide et les configurations multi-file d'attente
Chacun de ces planificateurs a ses forces et ses faiblesses. Le défi est de trouver celui qui convient le mieux à votre matériel et à votre charge de travail spécifiques.
Identifier votre planificateur actuel
Avant de commencer à ajuster, voyons quel planificateur vous utilisez actuellement. Exécutez cette commande :
$ cat /sys/block/sda/queue/scheduler
Vous verrez quelque chose comme ceci :
[mq-deadline] kyber bfq none
Le planificateur entre crochets est celui actuellement utilisé.
Choisir le bon planificateur pour le stockage moderne
Si vous utilisez des SSD ou des disques NVMe, vous pourriez envisager NOOP, Kyber, ou même "none" (qui contourne essentiellement le planificateur). Voici un guide rapide :
- Pour les SSD : NOOP ou "none"
- Pour les NVMe : Kyber ou "none"
- Pour les configurations mixtes SSD/HDD : BFQ ou mq-deadline
Ajuster votre planificateur choisi
Disons que vous avez décidé d'utiliser Kyber pour votre disque NVMe. Voici comment vous pouvez l'ajuster :
$ echo "kyber" > /sys/block/nvme0n1/queue/scheduler
$ echo 2 > /sys/block/nvme0n1/queue/iosched/read_lat_nsec
$ echo 10000 > /sys/block/nvme0n1/queue/iosched/write_lat_nsec
Cela définit Kyber comme planificateur et ajuste la latence cible pour les opérations de lecture et d'écriture.
Conseil Pro : Faites toujours un benchmark avant et après avoir apporté des modifications. Ce qui fonctionne pour un système peut ne pas fonctionner pour un autre.
Le duel des IOPS : Évaluer vos modifications
Maintenant que nous avons apporté quelques modifications, voyons si elles font réellement une différence. Nous utiliserons fio
pour le benchmarking :
$ fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --size=4g --numjobs=1 --runtime=60 --time_based --end_fsync=1
Exécutez cela avant et après vos modifications pour voir l'impact.
Au-delà des planificateurs : Autres options d'ajustement
Les planificateurs d'E/S ne sont que la partie visible de l'iceberg. Voici d'autres domaines que vous pouvez explorer :
- Profondeur de la file d'attente d'E/S : Ajustez avec
nr_requests
- Lecture anticipée : Ajustez avec
read_ahead_kb
- Priorités d'E/S : Utilisez
ionice
pour un contrôle précis
Les pièges : À quoi faire attention
Avant de vous lancer dans le changement de planificateurs, gardez ces points à l'esprit :
- Changer de planificateur peut affecter le comportement des applications
- Certaines modifications peuvent nécessiter un redémarrage pour prendre effet
- Testez toujours soigneusement dans un environnement non productif d'abord
Conclusion : L'avenir de la planification d'E/S
À mesure que les technologies de stockage continuent d'évoluer, les planificateurs d'E/S évolueront également. Gardez un œil sur les développements tels que :
- Blk-mq (Mécanisme de file d'attente d'E/S multi-file)
- IO_uring pour les E/S asynchrones
- Zoned Namespace (ZNS) pour les SSD NVMe
Ces technologies façonnent l'avenir des performances de stockage sous Linux.
Réflexion
En conclusion, voici une question à méditer : Avec le stockage devenant de plus en plus rapide, les planificateurs d'E/S traditionnels deviennent-ils obsolètes ? Ou évolueront-ils pour relever de nouveaux défis auxquels nous n'avons même pas encore pensé ?
Rappelez-vous, le meilleur planificateur d'E/S est celui qui fonctionne le mieux pour votre cas d'utilisation spécifique. N'ayez pas peur d'expérimenter, de faire des benchmarks et de trouver l'ajustement parfait pour votre système. Bon ajustement !
Réflexion finale : Dans le monde de la planification d'E/S, il n'y a pas de solution unique. Il s'agit de trouver le bon équilibre entre performance, latence et équité pour votre charge de travail spécifique.