Saya telah mencoba untuk menemukan jawaban langsung untuk yang satu ini, dan itu terbukti sulit dipahami. Pertanyaan ini dan jawabannya sudah dekat, tetapi tidak benar-benar memberi saya spesifik yang saya inginkan. Mari kita mulai dengan apa yang saya pikir saya tahu.
Jika Anda memiliki perangkat blok standar dan Anda menjalankan sudo blockdev --report
Anda akan mendapatkan sesuatu seperti ini:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
rw 256 512 4096 2048 399999238144 /dev/sda1
rw 256 512 1024 781252606 1024 /dev/sda2
Sekarang, Anda memutuskan untuk mengubah default 256 menjadi 128 menggunakan --setra
salah satu partisi dan itu terjadi pada seluruh perangkat blok, seperti:
sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 128 512 4096 0 500107862016 /dev/sda
rw 128 512 4096 2048 399999238144 /dev/sda1
rw 128 512 1024 781252606 1024 /dev/sda2
Ini masuk akal bagi saya - perangkat tingkat blok adalah tempat pengaturan, bukan partisi, jadi semuanya berubah. Juga hubungan default antara pengaturan RA dan perangkat masuk akal bagi saya, umumnya:
RA * sector size (default = 512 bytes)
Oleh karena itu, perubahan yang saya buat di atas, dengan ukuran sektor default akan turun readahead dari 128k ke 64k. Semua baik dan bagus sejauh ini.
Namun, apa yang terjadi ketika kita menambahkan RAID perangkat lunak, atau LVM dan device-mapper? Bayangkan laporan Anda terlihat seperti ini sebagai gantinya:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 10737418240 /dev/xvda1
rw 256 512 4096 0 901875499008 /dev/xvdb
rw 256 512 4096 0 108447924224 /dev/xvdj
rw 256 512 4096 0 108447924224 /dev/xvdi
rw 256 512 4096 0 108447924224 /dev/xvdh
rw 256 512 4096 0 108447924224 /dev/xvdg
rw 4096 512 4096 0 433787502592 /dev/md0
rw 4096 512 512 0 429496729600 /dev/dm-0
Dalam hal ini kami memiliki perangkat LVM yang dipetakan perangkat di atas md0 yang dibuat oleh mdadm, yang sebenarnya merupakan garis RAID0 di keempat perangkat xvdg-j.
Baik md0 dan dm-0 memiliki pengaturan 4096 untuk RA, jauh lebih tinggi daripada perangkat blok. Jadi, beberapa pertanyaan di sini:
- Bagaimana pengaturan RA diturunkan dari rantai perangkat blok virtual?
- Apakah dm-0 mengalahkan semua karena itu adalah perangkat blok tingkat atas yang sebenarnya Anda akses?
- Akan
lvchange -r
berdampak pada perangkat dm-0 dan tidak muncul di sini?
Jika sesederhana, pengaturan RA dari perangkat blok virtual yang Anda gunakan diteruskan, apakah itu berarti bahwa pembacaan dari dm-0 (atau md0) akan diterjemahkan menjadi 4 x 4096 RA dibaca? (satu di setiap perangkat blok). Jika demikian, itu berarti bahwa pengaturan ini meledak ukuran readahead dalam skenario di atas.
Kemudian dalam hal mencari tahu apa yang sebenarnya dilakukan pengaturan readahead:
Apa yang Anda gunakan, setara dengan ukuran sektor di atas untuk menentukan nilai readahead sebenarnya untuk perangkat virtual:
- Ukuran garis RAID (untuk md0)?
- Beberapa ukuran sektor lain yang setara?
- Apakah bisa dikonfigurasi, dan bagaimana?
- Apakah FS berperan (saya terutama tertarik pada ext4 dan XFS)?
- Atau, jika baru saja diteruskan, apakah itu hanya pengaturan RA dari perangkat tingkat atas dikalikan dengan ukuran sektor dari perangkat blok nyata?
Akhirnya, apakah akan ada hubungan yang disukai antara ukuran garis dan pengaturan RA (misalnya)? Di sini saya berpikir bahwa jika strip adalah elemen terkecil yang akan ditarik dari perangkat RAID, Anda idealnya tidak ingin harus ada 2 akses disk ke layanan unit data minimum dan ingin membuat RA cukup besar untuk memenuhi permintaan dengan satu akses.
sumber
Jawaban:
Tergantung. Mari kita asumsikan Anda berada di dalam dom Xen dan memiliki RA = 256. / Dev / xvda1 Anda adalah LV aktual pada 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 dom0 kernel akan mengakses / dev / dm1 dengan RA lain daripada kernel domU. Sederhana seperti itu.
Sittutation lain akan terjadi jika kita menganggap sittuation / dev / md0 (/ dev / sda1, / dev / sda2).
Pengaturan / dev / md0 RA tidak akan mempengaruhi / dev / sdX blockdevices.
Jadi secara umum menurut saya kernel mengakses blockdevice dengan cara yang sebenarnya diatur. Satu volume logis dapat diakses melalui RAID (bagian dari itu) atau perangkat devicemapper dan masing-masing dengan RA lain yang akan dihormati.
Jadi jawabannya adalah - pengaturan RA adalah IMHO tidak diturunkan rantai blockdevice, tetapi apa pun perangkat RA tingkat atas, akan digunakan untuk mengakses perangkat konstituen
Jika Anda maksud propagasi mendalam dengan "trump all" - sesuai komentar saya sebelumnya saya pikir Anda mungkin memiliki RA yang berbeda untuk perangkat yang berbeda dalam sistem.
Ya tapi ini adalah kasus khusus. Mari kita asumsikan bahwa kita memiliki / dev / dm0 yang merupakan LVM / dev / vg0 / blockdevice. Jika kamu melakukan:
/ dev / dm0 juga akan berubah karena / dev / dm0 dan / dev / vg0 / blockdevice sama persis dengan perangkat blok ketika menyangkut akses kernel.
Tetapi mari kita asumsikan bahwa / dev / vg0 / blockdevice sama dengan / dev / dm0 dan / dev / xvda1 di Xen domU yang menggunakannya. Pengaturan RA dari / dev / xvda1 akan berlaku tetapi dom0 akan melihat masih memiliki RA itu sendiri.
Saya biasanya menemukan RA dengan bereksperimen dengan nilai-nilai yang berbeda dan mengujinya dengan hdparm.
Sama seperti di atas.
Tentu - ini adalah topik yang sangat besar. Saya sarankan Anda mulai di sini http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php
sumber
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, bacaan apa pun yang menyentuh garis pada disk unik akan menambah RA dengan faktor yang awalnya Anda atur perangkat blokir RA. Jadi jika Anda membaca persis semua 3 disk maka RA efektif Anda akan menjadi 12 * 512 byte. Ini dapat diperparah dengan menetapkan RA di berbagai tingkatan, misalnya MD atau LVM. Sebagai aturan praktis, jika aplikasi saya mendapat manfaat dari RA, saya mengaturnya di lapisan tertinggi sehingga saya tidak perlu menambah RA dengan tidak perlu. Saya kemudian memulai sistem file pada sektor 2049 dan mengimbangi setiap sektor mulai pada angka yang dapat dibagi dengan 8. Saya mungkin jauh dari apa yang Anda minta tetapi ini adalah 2 ¢ saya.
sumber
Itu untuk penjelasannya. Saya membuat beberapa tes dengan pengaturan RAID dan LVM untuk membuktikan Anda benar:
https://fatalfailure.wordpress.com/2017/05/13/where-to-set-readahead-lvm-raid-devices-device-mapper-block-devices
Yang penting adalah yang digunakan OS
sumber