Solusi 1:
Bagaimana setelan RA diturunkan ke rantai perangkat blok virtual?
Tergantung. Misalkan Anda berada di dalam Xen domU dan memiliki RA=256. /dev/xvda1 Anda adalah LV aktual di dom0 yang terlihat di bawah /dev/dm1. Jadi Anda memiliki RA(domU(/dev/xvda1)) =256 dan RA(dom0(/dev/dm1)) =512 . Ini akan memiliki efek sedemikian rupa sehingga kernel dom0 akan mengakses /dev/dm1 dengan RA lain selain kernel domU. Sesederhana itu.
Situasi lain akan terjadi jika kita mengasumsikan situasi /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
Menyetel /dev/md0 RA tidak akan memengaruhi perangkat pemblokiran /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
Jadi secara umum menurut saya kernel mengakses blockdevice dengan cara yang sebenarnya diatur. Satu volume logis dapat diakses melalui RAID (bagian darinya) atau perangkat pemetaan perangkat dan masing-masing dengan RA lain yang akan dihormati.
Jadi jawabannya adalah - pengaturan RA adalah IMHO tidak diwariskan ke rantai perangkat blok, tetapi apa pun pengaturan RA perangkat tingkat atas, akan digunakan untuk mengakses perangkat konstituen
Apakah dm-0 mengalahkan semuanya karena itu adalah perangkat blok tingkat atas yang sebenarnya Anda akses?
Jika yang Anda maksud adalah propagasi mendalam dengan "truf all" - sesuai komentar saya sebelumnya, menurut saya Anda mungkin memiliki RA yang berbeda untuk perangkat yang berbeda dalam sistem.
Apakah lvchange -r berdampak pada perangkat dm-0 dan tidak muncul di sini?
Ya tapi ini kasus khusus. Mari kita asumsikan bahwa kita memiliki /dev/dm0 yang merupakan /dev/vg0/blockdevice LVM. Jika Anda melakukannya:
lvchange -r 512 /dev/vg0/blockdevice
/dev/dm0 juga akan berubah karena /dev/dm0 dan /dev/vg0/blockdevice adalah perangkat blok yang persis sama dalam hal akses kernel.
Tapi mari kita asumsikan /dev/vg0/blockdevice sama dengan /dev/dm0 dan /dev/xvda1 di Xen domU yang menggunakannya. Menyetel RA dari /dev/xvda1 akan berpengaruh tetapi dom0 akan melihat masih memiliki RA-nya sendiri.
Apa yang Anda gunakan, setara dengan ukuran sektor di atas untuk menentukan nilai readahead sebenarnya untuk perangkat virtual:
Saya biasanya menemukan RA dengan bereksperimen dengan nilai yang berbeda dan mengujinya dengan hdparm .
Ukuran strip RAID (untuk md0)?
Sama seperti di atas.
Apakah FS berperan (saya terutama tertarik pada ext4 dan XFS)?
Tentu - ini adalah topik yang sangat besar. Saya sarankan Anda mulai di sini http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
Solusi 2:
Ketahui jawabannya lebih sulit untuk dijelaskan jadi saya akan melakukannya sebagai contoh. Katakan demi ini Anda memiliki 3 perangkat blok dan Anda mengatur RA Anda untuk mengatakan 4 (4 * 512 byte) dengan asumsi sektor standar. Jika Anda mengatakan menggunakan skema RAID-5 menggunakan 3 disk, pembacaan apa pun yang bahkan menyentuh garis pada disk unik akan menambah RA dengan faktor yang awalnya Anda setel ke perangkat blok RA. Jadi, jika pembacaan Anda menjangkau tepat ke-3 disk, maka RA efektif Anda adalah 12*512 byte. Hal ini dapat diperparah dengan pengaturan RA di berbagai tingkatan, misalnya MD atau LVM. Sebagai aturan praktis, jika aplikasi saya mendapat manfaat dari RA, saya menyetelnya pada lapisan setinggi mungkin, jadi saya tidak menambah RA secara tidak perlu. Saya kemudian memulai sistem file pada sektor 2049 dan mengimbangi setiap sektor mulai dengan angka yang habis dibagi 8. Saya mungkin jauh dari apa yang Anda minta tetapi ini adalah 2¢ saya.