Soluzione 1:
In che modo l'impostazione RA viene trasmessa alla catena di dispositivi a blocchi virtuali?
Dipende. Supponiamo di essere all'interno di Xen domU e di avere RA=256. Il tuo /dev/xvda1 è il vero LV sul dom0 visibile sotto /dev/dm1. Quindi hai RA(domU(/dev/xvda1)) =256 e RA(dom0(/dev/dm1)) =512 . Avrà un tale effetto che il kernel dom0 accederà a /dev/dm1 con un RA diverso dal kernel di domU. Semplice come quello.
Un'altra situazione si verificherà se assumiamo la situazione /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
L'impostazione di /dev/md0 RA non influirà sui dispositivi a blocchi /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
Quindi generalmente, a mio parere, il kernel accede a blockdevice nel modo in cui è effettivamente impostato. È possibile accedere a un volume logico tramite RAID (di cui fa parte) o dispositivo devicemapper e ciascuno con un'altra RA che verrà rispettata.
Quindi la risposta è:l'impostazione RA è IMHO non trasmessa dalla catena di dispositivi a blocchi, ma qualunque sia l'impostazione RA del dispositivo di livello superiore, verrà utilizzata per accedere ai dispositivi costituenti
Dm-0 ha la meglio su tutto perché è il dispositivo di blocco di primo livello a cui stai effettivamente accedendo?
Se intendi propagazione profonda con "trionfo su tutto", come da mio commento precedente, penso che potresti avere RA diversi per dispositivi diversi nel sistema.
Lvchange -r avrebbe un impatto sul dispositivo dm-0 e non verrebbe visualizzato qui?
Sì, ma questo è un caso particolare. Supponiamo di avere /dev/dm0 che è /dev/vg0/blockdevice di LVM. Se lo fai:
lvchange -r 512 /dev/vg0/blockdevice
anche /dev/dm0 cambierà perché /dev/dm0 e /dev/vg0/blockdevice è esattamente lo stesso dispositivo a blocchi quando si tratta di accesso al kernel.
Ma supponiamo che /dev/vg0/blockdevice sia lo stesso di /dev/dm0 e /dev/xvda1 in Xen domU che lo sta utilizzando. L'impostazione della RA di /dev/xvda1 avrà effetto ma dom0 vedrà ancora la propria RA.
Che cosa usi, equivalente alla dimensione del settore di cui sopra per determinare il valore di readahead effettivo per un dispositivo virtuale:
In genere scopro RA sperimentando valori diversi e testandolo con hdparm .
La dimensione dello stripe del RAID (per md0)?
Come sopra.
L'FS gioca un ruolo (sono principalmente interessato a ext4 e XFS)?
Certo, questo è un argomento molto vasto. Ti consiglio di iniziare da qui http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
Soluzione 2:
Conosci la risposta più difficile da spiegare, quindi lo farò nell'esempio. Supponiamo che tu abbia 3 dispositivi a blocchi e imposti la tua RA su 4 (4 * 512 byte) assumendo un settore standard. Se dovessi dire di utilizzare uno schema RAID-5 utilizzando i 3 dischi, qualsiasi lettura che abbia anche toccato una striscia su un disco univoco aggraverebbe l'RA in base al fattore su cui inizialmente hai impostato il dispositivo a blocchi RA. Quindi, se la tua lettura si estendesse esattamente su tutti e 3 i dischi, la tua RA effettiva sarebbe 12 * 512 byte. Ciò può essere aggravato impostando RA nei vari livelli, ad esempio MD o LVM. Come regola generale, se la mia app beneficia di RA, la imposto sul livello più alto possibile in modo da non aggravare inutilmente la RA. Quindi avvio il filesystem sul settore 2049 e sfalso l'inizio di ogni settore su un numero divisibile per 8. Potrei essere molto lontano da quello che stai chiedendo, ma questo è il mio 2 ¢.