6.4.2. Programmateur d'E/S « Deadline »
L'ordonnanceur d'E/S « Deadline » tente de fournir une latence garantie pour les requêtes. Il est important de remarquer que la mesure de la latence démarre uniquement lorsque les requêtes arrivent à l'ordonnanceur d'E/S (ceci est une distinction importante car une application peut être mise en veille alors qu'elle attendait que des descripteurs de requêtes soient libérés). Par défaut, les lectures sont prioritaires par rapport aux écritures, car les applications sont plus susceptibles de bloquer lors des E/S de lecture.
« Deadline » expédie les E/S en lots. Un lot est une séquence d'E/S de lecture ou d'écriture qui sont dans un ordre LBA croissant (élévateur unidirectionnel). Après le traitement de chaque lot, l'ordonnanceur d'E/S vérifie pour voir si des requêtes d'écriture ont été en attente trop longtemps, puis il décide s'il faut lancer un nouveau lot de lectures ou d'écritures. La liste des requêtes FIFO est uniquement vérifiée pour trouver des requêtes expirées au début de chaque lot, puis uniquement pour trouver la direction des données de ce lot. Ainsi. si un lot d'écritures est sélectionné et qu'il y a une requête de lecture expirée, cette requête de lecture ne sera pas traitée tant que le lot d'écritures ne sera pas terminé.
Réglages
fifo_batch
- Ceci détermine le nombre de lectures ou écritures à délivrer en un seul lot. La valeur par défaut est de
16
. Définir une valeur plus élevée peut améliorer le débit, mais cela augmentera aussi la latence. front_merges
- Vous pouvez définir ce réglage sur
0
si vous savez que votre charge de travail ne générera jamais de fusions frontales. À moins d'avoir mesuré l'en-tête de cette vérification, il est conseillé de la laisser avec son paramètre par défaut (1
). read_expire
- Ce réglage vous permet de définir le nombre de millisecondes pour qu'une requête de lecture soit traitée. Par défaut, ce nombre est défini sur
500
ms (une demi-seconde). write_expire
- Ce réglage vous permet de définir le nombre de millisecondes pour qu'une requête d'écriture soit traitée. Par défaut, ce nombre est défini sur
5000
ms ( cinq secondes). writes_starved
- Ce réglage contrôle combien de lots de lecture peuvent être traités avant qu'un seul lot d'écriture ne puisse être traité. Plus cette valeur est élevée, plus la préférence sera donnée aux lectures.