Solución 1:
¿Cómo se transmite la configuración de RA a la cadena de dispositivos de bloques virtuales?
Eso depende. Supongamos que está dentro de Xen domU y tiene RA=256. Su /dev/xvda1 es el LV real en el dom0 visible en /dev/dm1. Entonces tienes RA(domU(/dev/xvda1)) =256 y RA(dom0(/dev/dm1)) =512 . Tendrá tal efecto que el kernel dom0 accederá a /dev/dm1 con otro RA que no sea el kernel de domU. Tan simple como eso.
Ocurrirá otra situación si asumimos la situación /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 configuración de /dev/md0 RA no afectará a los dispositivos de bloque /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
Entonces, en general, en mi opinión, el kernel accede a blockdevice de la manera en que realmente está configurado. Se puede acceder a un volumen lógico a través de RAID (del que forma parte) o un dispositivo mapeador de dispositivos y cada uno con otro RA que se respetará.
Entonces, la respuesta es:la configuración de RA en mi humilde opinión no se transmite a través de la cadena de dispositivos de bloques, pero sea cual sea la configuración de RA del dispositivo de nivel superior, se usará para acceder a los dispositivos constituyentes
¿Dm-0 triunfa sobre todo porque ese es el dispositivo de bloque de nivel superior al que realmente está accediendo?
Si se refiere a la propagación profunda por "triunfar sobre todo", según mi comentario anterior, creo que puede tener diferentes RA para diferentes dispositivos en el sistema.
¿Lvchange -r tendría un impacto en el dispositivo dm-0 y no aparecería aquí?
Sí, pero este es un caso particular. Supongamos que tenemos /dev/dm0, que es /dev/vg0/blockdevice de LVM. Si lo hace:
lvchange -r 512 /dev/vg0/blockdevice
/dev/dm0 también cambiará porque /dev/dm0 y /dev/vg0/blockdevice es exactamente el mismo dispositivo de bloque cuando se trata de acceso al kernel.
Pero supongamos que /dev/vg0/blockdevice es lo mismo que /dev/dm0 y /dev/xvda1 en Xen domU que lo está utilizando. La configuración de RA de /dev/xvda1 surtirá efecto, pero dom0 verá que todavía tiene su propio RA.
¿Qué usa, equivalente al tamaño del sector anterior para determinar el valor real de lectura anticipada para un dispositivo virtual:
Por lo general, descubro RA al experimentar con diferentes valores y probarlo con hdparm .
¿El tamaño de franja del RAID (para md0)?
Igual que arriba.
¿El FS juega un papel (estoy interesado principalmente en ext4 y XFS)?
Claro, este es un tema muy amplio. Te recomiendo que comiences aquí http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
Solución 2:
Conozca la respuesta más difícil de explicar, así que lo haré en el ejemplo. Digamos que por el bien de esto, tiene 3 dispositivos de bloque y configura su RA para que diga 4 (4 * 512 bytes) asumiendo el sector estándar. Si tuviera que decir usar un esquema RAID-5 usando los 3 discos, cualquier lectura que incluso tocara una raya en un disco único agravaría el RA por el factor en el que inicialmente configuró el RA del dispositivo de bloqueo. Entonces, si su lectura abarcó exactamente los 3 discos, entonces su RA efectivo sería de 12 * 512 bytes. Esto se puede agravar ajustando RA en varios niveles, por ejemplo, MD o LVM. Como regla general, si mi aplicación se beneficia de RA, la configuro en la capa más alta posible para no aumentar la RA innecesariamente. Luego inicio el sistema de archivos en el sector 2049 y compenso cada inicio de sector en un número divisible por 8. Puede que esté muy lejos de lo que está preguntando, pero estos son mis 2¢.