Outils pour utilisateurs

Outils du site


tuto:linux:i_o_scheduer

I/O Scheduler

Tuto SuSE pour paramétrage IO + scheduler : http://doc.opensuse.org/products/draft/SLES/SLES-tuning_sd_draft/cha.tuning.io.html

root@ks305337:/home# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
root@ks305337:/home# echo cfq > /sys/block/sda/queue/scheduler
root@ks305337:/home# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]

CFQ

Le Completely Fair Queuing (File d'attente complètement équitable en anglais), ou CFQ, est un ordonnanceur de tâches d'E/S pour le noyau Linux et écrit par Jens Axboe.

CFQ 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. La taille de la tranche de temps processeur et le nombre de requêtes qu'une file peut soumettre en une seule fois dépend de la priorité d'entrée/sortie assignée au processus correspondant. Les requêtes asynchrones de tous les processus sont regroupées dans un nombre plus restreint de files, une par priorité. Bien que CFQ ne fasse pas à proprement parler de l'ordonnancement anticipé, il fournit le même service, à savoir d'obtenir un bon taux d'échange global avec la mémoire de masse pour l'ensemble du système, en permettant à une file processus de se mettre en attente à la fin d'une opération d'E/S synchrone, après avoir anticipé sur les prochaines opérations d'entrées/sorties de ce processus. CFQ peut-être considéré comme un moyen naturel d'allouer aux processus des tranches de temps processeur dédiées aux E/S .

Anticipatory scheduling

L'Anticipatory scheduling (« ordonnancement anticipé » en français), est un algorithme d'ordonnancement pour les entrée-sorties sur les disques durs d'un ordinateur qui était présent dans le noyau Linux jusqu'à la version 2.6.321. Son but est d'optimiser l'utilisation de ceux-ci en anticipant les opérations synchrones de lecture.

« L'oisiveté trompeuse »(deceiptive idleness en anglais) est une situation où un processus semble avoir terminé une opération de lecture sur disque dur alors qu'il est en train de traiter des données en préparation d'une autre opération de lecture. Cette situation provoque une réaction normale de l'ordonnanceur d'E/S qui va alors traiter les opérations d'E/S d'un autre processus, et cela se fait au détriment des performances des lectures synchrones et augmente la charge de travail2. L'ordonnancement anticipé surmonte cela en effectuant une courte pause (quelques millisecondes) après une opération de lecture, en anticipant sur une autre requête de lecture proche dans le temps3.

L'ordonnancement anticipé apporte une amélioration importante de l'utilisation des disques pour certaines utilisations4. Dans certaines situations, le serveur web Apache connaît une hausse de performance de 71 % lorsque le noyau utilise l'ordonnancement anticipé5.

L'ordonnanceur à anticipation du noyau Linux peut en revanche réduire les performances avec les disques utilisant la technologie TCQ, les disques à hautes performances, ainsi que les grappes RAID matérielles6. L'ordonnanceur à anticipation fut l'ordonnanceur d'E/S par défaut du noyau Linux, de la version 2.6.0 à la version 2.6.18, à partir duquel il a été remplacé par l'ordonnanceur CFQ.

Deadline scheduler

Le but du Deadline scheduler est de tenter de garantir un temps de réponse à une requête1. Cela est réalisé en imposant une échéance à chaque opération d'E/S afin d'éviter une pénurie de ressources. Il gère deux files FIFO d'échéances en plus des files de requêtes (une de lecture, une d'écriture). Les files d'échéances sont triées par date d'expiration des échéances, tandis que les files de requêtes sont triées par numéro de secteur sur le disque de stockage.

Avant de traiter une requête, l'ordonnanceur décide quelle file utiliser. Les files de lecture ont une plus forte priorité, car les processus sont le plus souvent en attente sur des opérations de lecture. Ensuite, l'ordonnanceur vérifie si la première requête dans la file d'échéances a expiré, et la traite le cas échéant. Sinon, l'ordonnanceur traite un groupe de requêtes de la liste choisie. Dans les deux cas, l'ordonnanceur traite également un groupe de requêtes suivant celle choisie dans la liste. Ceci permet d'assurer au mieux les temps de réponse aux requêtes, tout en groupant ces dernières suivant les secteurs des disques à atteindre.

Par défaut, les requêtes de lecture ont une échéance de 500 millisecondes, et les requêtes d'écritures ont 5 secondes.

La documentation du noyau conseille l'utilisation de cet ordonnanceur pour les systèmes de base de données, spécialement dans les cas de systèmes à disques de hautes performances ou d'utilisation de disques supportant la technologie TCQ2.

NOOP

L'ordonnanceur NOOP 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. Il suppose que les performances d'E/S sont ou seront optimisées au niveau du périphérique de stockage ou du contrôleur de périphérique ou HBA1. L'ordonnanceur NOOP peut être utilisé au mieux sur les périphériques ne comportant aucune pénalité de recherche de données, comme la mémoire flash2.

tuto/linux/i_o_scheduer.txt · Dernière modification : 2016/10/27 20:29 de root