Comment activer et utiliser le planificateur BFQ?

Je viens dinstaller la version 4.12 du noyau Linux sur Ubuntu 17.04 en utilisant ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Le fait est que lorsque je vérifie les planificateurs dE / S disponibles, je ne parviens pas à trouver le BFQ ni le Kyber I / O scheduler:

cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq] 

Alors comment utiliser lun des nouveaux programmateurs de cette version Linux?

Réponse

Je « ne suis pas dans Ubuntu, mais ce que jai fait dans Fedora peut vous aider.

BFQ est un blk-mq (Multi-Queue Block IO Queuing Mechanism), vous devez donc activer blk-mq au démarrage, modifier votre fichier / etc / default / grub et ajouter scsi_mod.use_blk_mq=1 à votre GRUB_CMDLINE_LINUX, voici mon fichier grub, par exemple:

GRUB_TIMEOUT=3 GRUB_DISTRIBUTOR="$(sed "s, release .*$,,g" /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=false GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1" GRUB_DISABLE_RECOVERY="true" 

Après cela, vous devez mettre à jour votre grub. Sur Fedora, nous devons utiliser sudo grub2-mkconfig -o /path/to/grub.cfg, qui varie en fonction de la méthode de démarrage . Sur Ubuntu, vous pouvez simplement exécuter:

sudo update-grub 

Redémarrez, et si vous obtenez ceci:

cat /sys/block/sda/queue/scheduler [mq-deadline] none 

Votre noyau a probablement été compilé avec BFQ en tant que module , et cela peut également être le cas pour Kyber.

sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none 

Vous pouvez lajouter au démarrage en ajoutant un fichier /etc/modules-load.d/bfq.conf contenant bfq.

Il est important de noter que lactivation de blk_mq rend impossible lutilisation dordonnanceurs non blk_mq, vous perdrez donc noop cfq et le non mq date limite

Apparemment, le système de planification blk_mq ne prend pas en charge les indicateurs dascenseur dans grub, les règles udev peuvent être utilisées à la place, avec en prime un contrôle plus granuleux.

Créez /etc/udev/rules.d/60-scheduler.rules sil nexistait pas et ajoutez:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq" 

Comme indiqué ici si nécessaire, vous pouvez faire la distinction entre la rotationa l (HDD) et les périphériques non rotatifs (SSD) dans les règles udev utilisant lattribut ATTR{queue/rotational}. Sachez que Paolo Valente, développeur BFQ, a souligné dans LinuxCon Europe que BFQ peut être un meilleur choix que les planificateurs noop ou deadline en termes des garanties de faible latence, ce qui fait un bon conseil de l’utiliser également pour les SSD.

Comparaison de Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Enregistrez-le, puis rechargez et déclenchez udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Commentaires

  • Je veux juste noter: don ' t le faire sur les ordinateurs avec Linux < 4.15 que vous pensez pouvoir suspendre à la mémoire vive; < 4.15 suspendra tous les E / S à la reprise car ils nont pas le " mise au repos SCSI sécurisée " corrections.
  • Vous pouvez également avoir des problèmes sur le noyau 4.14 où lactivation de blk-mq semble donner un noyau " oops " juste au début g de chargement du noyau sur certains systèmes (ce ' nest pas une panique complète, juste une déréférence nulle à lintérieur du noyau). Vous pourriez le manquer si vous ' ne le cherchez pas, mais si vous ' êtes paranoïaque, cela pourrait être un signe que quelque chose est cassé.
  • Je ' suggère dutiliser une règle udev légèrement plus précise. Quand jai essayé celui montré ici, udev a essayé de définir le planificateur pour certains périphériques dont les noms correspondent à ce modèle, mais ne sont pas ' t périphériques de bloc SCSI qui peuvent utiliser le planificateur BFQ. La règle avec laquelle je me suis retrouvé est la suivante: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Elle évite la correspondance de motifs avec les noms dappareils, ce qui rend la correspondance plus précise. ' ne correspondra pas aux périphériques de partition, car ils ' nont pas la " file dattente / scheduler " attribut.
  • Il est également important de noter que les noyaux 4.15-4.16 souffrent dun bogue assez grave où la mise à jour du schéma de partition dun lecteur tout en utilisant BFQ peut conduisent à un verrouillage complet des E / S. Cf .: lkml.org/lkml/2017/12/1/80
  • Vous pouvez également echo bfq > /sys/block/sda/queue/scheduler en tant que root. (sudo na pas fonctionné pour moi dans Ubuntu 18.04) Cela devrait le rendre effectif immédiatement.

Réponse

À Réponse de RomuloPBenedetti :

Vous pouvez tester si le planificateur bfq est réellement disponible sur un appareil particulier en utilisant PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" dans la règle udev.Cela remplacera effectivement DRIVERS=="sd|sr" et ne se déclenchera tout simplement pas si on oublie scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Exécute un programme pour déterminer sil y a une correspondance; la clé est vraie si le programme retourne avec succès; Si aucun chemin absolu nest indiqué, le programme devrait vivre dans / lib / udev.
  • $sys – Le point de montage sysfs (/sys).
  • $devpath – Le chemin de développement de lappareil (/ devices / pci / …).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *