Solution 1 :
Comment le paramètre RA est-il transmis dans la chaîne de périphériques de bloc virtuel ?
Ça dépend. Supposons que vous êtes à l'intérieur de Xen domU et que RA=256. Votre /dev/xvda1 est le LV réel sur le dom0 visible sous /dev/dm1. Vous avez donc RA(domU(/dev/xvda1)) =256 et RA(dom0(/dev/dm1)) =512 . Cela aura un tel effet que le noyau dom0 accédera à /dev/dm1 avec un autre RA que le noyau de domU. C'est aussi simple que ça.
Une autre situation se produira si nous supposons la situation /dev/md0(/dev/sda1,/dev/sda2).
blockdev --report | grep sda
rw **512** 512 4096 0 1500301910016 /dev/sda
rw **512** 512 4096 2048 1072693248 /dev/sda1
rw **512** 512 4096 2097152 1499227750400 /dev/sda2
blockdev --setra 256 /dev/sda1
blockdev --report | grep sda
rw **256** 512 4096 0 1500301910016 /dev/sda
rw **256** 512 4096 2048 1072693248 /dev/sda1
rw **256** 512 4096 2097152 1499227750400 /dev/sda2
La configuration de /dev/md0 RA n'affectera pas les périphériques de bloc /dev/sdX.
rw **256** 512 4096 2048 1072693248 /dev/sda1
rw **256** 512 4096 2097152 1499227750400 /dev/sda2
rw **512** 512 4096 0 1072627712 /dev/md0
Donc, généralement, à mon avis, le noyau accède au blockdevice de la manière qui est réellement définie. Un volume logique est accessible via RAID (dont il fait partie) ou périphérique devicemapper et chacun avec un autre RA qui sera respecté.
Donc, la réponse est - le paramètre RA n'est IMHO pas transmis dans la chaîne de blocs de périphériques, mais quel que soit le paramètre RA de périphérique de niveau supérieur, il sera utilisé pour accéder aux périphériques constitutifs
Est-ce que dm-0 l'emporte sur tout parce que c'est le périphérique de bloc de niveau supérieur auquel vous accédez réellement ?
Si vous voulez dire propagation profonde par "tout l'emporter" - conformément à mon commentaire précédent, je pense que vous pouvez avoir différents RA pour différents appareils du système.
Lvchange -r aurait-il un impact sur le périphérique dm-0 et ne s'afficherait-il pas ici ?
Oui mais c'est un cas particulier. Supposons que nous ayons /dev/dm0 qui est le /dev/vg0/blockdevice de LVM. Si vous le faites :
lvchange -r 512 /dev/vg0/blockdevice
le /dev/dm0 changera également car /dev/dm0 et /dev/vg0/blockdevice est exactement le même périphérique de bloc en ce qui concerne l'accès au noyau.
Mais supposons que /dev/vg0/blockdevice est identique à /dev/dm0 et /dev/xvda1 dans Xen domU qui l'utilise. Le réglage du RA de /dev/xvda1 prendra effet mais dom0 verra toujours son propre RA.
Qu'utilisez-vous, équivalent à la taille de secteur ci-dessus, pour déterminer la valeur de lecture anticipée réelle pour un périphérique virtuel :
Je découvre généralement RA en expérimentant différentes valeurs et en le testant avec hdparm .
La taille de bande du RAID (pour md0) ?
Comme ci-dessus.
Le FS joue-t-il un rôle (je suis principalement intéressé par ext4 et XFS) ?
Bien sûr - c'est un sujet très vaste. Je vous recommande de commencer ici http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
Solution 2 :
Connaître la réponse plus difficile à expliquer, donc je vais le faire dans l'exemple. Supposons que vous ayez 3 périphériques de bloc et que vous réglez votre RA sur 4 (4 * 512 octets) en supposant un secteur standard. Si vous deviez utiliser un schéma RAID-5 en utilisant les 3 disques, toute lecture qui toucherait même une bande sur un disque unique aggraverait le RA par le facteur que vous avez initialement défini sur le périphérique de bloc RA. Donc, si votre lecture s'étendait exactement sur les 3 disques, votre RA effective serait de 12*512 octets. Cela peut être aggravé par settin RA dans les différents niveaux, par exemple MD ou LVM. En règle générale, si mon application bénéficie de RA, je la place sur la couche la plus élevée possible afin de ne pas aggraver inutilement la RA. Je démarre ensuite le système de fichiers sur le secteur 2049 et décale chaque début de secteur sur un nombre divisible par 8. Je suis peut-être loin de ce que vous demandez, mais c'est mon 2 ¢.