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.