Lors de l'utilisation de logiciels RAID et LVM sous Linux, quels sont les paramètres du planificateur d'E / S et de lecture anticipée?

28

Dans le cas de plusieurs couches (disques physiques -> md -> dm -> lvm), comment les planificateurs, les paramètres de lecture anticipée et les autres paramètres de disque interagissent-ils?

Imaginez que vous disposez de plusieurs disques (/ dev / sda - / dev / sdd) faisant tous partie d'un périphérique RAID logiciel (/ dev / md0) créé avec mdadm. Chaque périphérique (y compris les disques physiques et / dev / md0) a son propre paramètre pour le planificateur d'E / S ( modifié comme tel ) et readahead ( modifié à l'aide de blockdev ). Lorsque vous ajoutez des éléments comme dm (crypto) et LVM, vous ajoutez encore plus de couches avec leurs propres paramètres.

Par exemple, si le périphérique physique a une lecture avant 128 blocs et le RAID a une lecture anticipée de 64 blocs, qui est honoré lorsque je fais une lecture depuis / dev / md0? Le pilote md tente-t-il une lecture de 64 blocs que le pilote de périphérique physique traduit ensuite en une lecture de 128 blocs? Ou est-ce que la lecture anticipée du RAID est "transmise" au périphérique sous-jacent, ce qui entraîne une lecture de 64 blocs?

Le même genre de question vaut pour les planificateurs? Dois-je m'inquiéter de plusieurs couches de planificateurs d'E / S et de la façon dont ils interagissent, ou le / dev / md0 remplace-t-il efficacement les planificateurs sous-jacents?

Dans mes tentatives pour répondre à cette question, j'ai déterré des données intéressantes sur les planificateurs et les outils qui pourraient aider à comprendre cela:

andrew311
la source

Réponses:

7

Si vous effectuez une lecture à partir de md0, la lecture anticipée de md0 est utilisée. Si vous faisiez la lecture de sda ​​qui est un composant de md0, il utiliserait le paramètre sda. Le mappeur de périphériques divise simplement une E / S en plusieurs lectures et écritures pour effectuer le RAID, mais tout cela est en dessous de la couche de cache de bloc où la lecture anticipée a lieu. La pile de stockage ressemble à:

système de fichiers - contourne le cache lorsque vous ouvrez avec O_DIRECT

cache de bloc - lecture anticipée, cache d'écriture, planificateur

mappeur de périphériques - dm, lvm, RAID logiciel, instantané, etc.

sd - pilote de disque

SCSI - gestion des erreurs, routage des périphériques

pilote matériel - carte scsi, carte FC, ethernet

Notez que lorsque vous faites

dd if=/dev/sda of=foo

vous lisez sda en tant que fichier, vous passez donc par le cache de blocs. Pour aller directement sur le disque, faites

dd if=/dev/sda of=foo iflag=direct

Quant aux planificateurs d'ascenseurs d'E / S, ils n'existent que sur le pilote de disque (sd). Il n'y a pas de répertoire de file d'attente sous / sys / block / md ou / sys / block / dm. Vous ne faites qu'une seule fois le tri par élévateur de disque.

rigide
la source
2
Il y a un /sys/block/md0/queue/schedulersur mes systèmes, mais le seul choix là-dedans est none.
Peter Eisentraut