Le présent wiki a été migré vers wiki.archlinux.org.
Ce Wiki a été archivé. Toute contribution doit donc désormais se faire là-bas. Cette page de Wiki possède donc potentiellement des informations qui ne sont plus à jour !
Ordonnanceur d'E/S
L'ordonnanceur d'entrées-sorties (I/O scheduling en anglais) permet, comme son nom l'indique, d'ordonner les entrées et sorties des périphériques.
Par défaut, Linux utilise l'ordonnanceur CFQ (Completely Fair Queuing), mais il est possible d'en utiliser un autre. Chacun a des propriétés propres à lui, donc il n'y en a pas de meilleur, tout dépend du périphérique concerné.
Sommaire
Liste des ordonnanceurs disponibles
La liste des ordonnanceurs disponibles est accessible avec la commande :
cat /sys/block/sdX/queue/scheduler
- Noop : il fonctionne en plaçant toutes les requêtes d'E/S dans une simple file FIFO, et n'implémente que la fusion de requêtes.
- Deadline : il tente de garantir un temps de réponse à une requête.
- CFQ : il fonctionne en plaçant les requêtes synchrones soumises par les processus dans des files d'attente dédiées (une file par processus), et en allouant des tranches de temps processeur à chaque file pour accéder au disque dur.
- BFQ : il a pour but d'avoir un algorithme plus simple que CFQ. Cet ordonnanceur est disponible avec les noyaux suivants : linux-ck, linux-bfq, linux-bfs, linux-pf, linux-uksm...
Changement d'ordonnanceur
Changement par le Sysfs
On peut changer temporairement d'ordonnanceur d'E/S (jusqu'au prochain redémarrage) avec la commande suivante en tant que root :
echo noop > /sys/block/sdX/queue/scheduler
Ou bien avec un utilisateur standard :
echo noop | sudo tee /sys/block/sdX/queue/scheduler
Changement par un paramètre noyau
De façon plus permanente, on peut changer l'ordonnanceur en passant un paramètre dans la ligne de boot du noyau. Par exemple, il faudra ajouter :
elevator=noop
Pour utiliser l'ordonnanceur d'E/S noop par défaut.
Changement par une règle Udev
Si on veut des paramètres affinés et persistant, on utilisera une règle Udev.
# Définit 'noop' pour les SSD uniquement ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop" # Définit 'cfq' pour les HDD uniquement ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"
Puis penser à recharger Udev :
udevadm control --reload
Vérification des changements
Après avoir appliqué une de ces solutions, il suffit de nouveau d'utiliser la commande cat /sys/block/sdX/queue/scheduler pour vérifier le changement d'ordonnanceur. L'ordonnanceur actif est celui entre crochets.
Exemple pour Noop :
[noop] deadline cfq bfq