Saat menggunakan perangkat lunak RAID dan LVM di Linux, pengaturan IO scheduler dan readahead mana yang dihormati?

28

Dalam hal beberapa lapisan (drive fisik -> md -> dm -> lvm), bagaimana cara penjadwal, pengaturan readahead, dan pengaturan disk lainnya berinteraksi?

Bayangkan Anda memiliki beberapa disk (/ dev / sda - / dev / sdd) semua bagian dari perangkat RAID perangkat lunak (/ dev / md0) dibuat dengan mdadm. Setiap perangkat (termasuk disk fisik dan / dev / md0) memiliki pengaturannya sendiri untuk IO scheduler ( diubah seperti itu ) dan readahead ( diubah menggunakan blockdev ). Ketika Anda melempar hal-hal seperti dm (crypto) dan LVM Anda menambahkan lebih banyak lapisan dengan pengaturan mereka sendiri.

Sebagai contoh, jika perangkat fisik memiliki read di depan 128 blok dan RAID memiliki readahead 64 blok, yang merasa terhormat ketika saya membaca dari / dev / md0? Apakah driver md mencoba membaca 64 blok yang kemudian diterjemahkan oleh driver perangkat fisik menjadi 128 blok? Atau apakah RAID readahead "pass-through" ke perangkat yang mendasarinya, sehingga blok 64 terbaca?

Jenis pertanyaan yang sama berlaku untuk penjadwal? Apakah saya harus khawatir tentang beberapa lapisan penjadwal IO dan bagaimana mereka berinteraksi, atau apakah / dev / md0 secara efektif mengesampingkan penjadwal yang mendasarinya?

Dalam upaya saya untuk menjawab pertanyaan ini, saya telah menggali beberapa data menarik tentang penjadwal dan alat-alat yang mungkin membantu memecahkan masalah ini:

andrew311
sumber

Jawaban:

7

Jika Anda membaca dari md0 maka readahead untuk md0 digunakan. Jika Anda membaca dari sda yang merupakan komponen md0 maka itu akan menggunakan pengaturan sda. Device mapper hanya membagi I / O menjadi beberapa baca dan tulis untuk melakukan RAID, tapi itu semua di bawah lapisan cache blok di mana readahead terjadi. Tumpukan penyimpanan terlihat seperti:

filesystem - memintas cache saat Anda membuka dengan O_DIRECT

blokir cache - readahead, tulis cache, scheduler

device-mapper - dm, lvm, RAID perangkat lunak, snapshot, dll.

sd - driver disk

SCSI - penanganan kesalahan, perutean perangkat

driver perangkat keras - kartu scsi, kartu FC, ethernet

Perhatikan bahwa ketika Anda melakukannya

dd if=/dev/sda of=foo

Anda membaca sda sebagai file, jadi Anda akan melalui blok cache. Untuk langsung ke disk, lakukan

dd if=/dev/sda of=foo iflag=direct

Adapun penjadwal elevator I / O, itu hanya ada pada driver disk (sd). Tidak ada direktori antrian di bawah / sys / block / md atau / sys / block / dm. Anda hanya perlu melalui jenis elevator disk sekali.

telanjang
sumber
2
Ada /sys/block/md0/queue/schedulerpada sistem saya, tetapi satu-satunya pilihan di sana none.
Peter Eisentraut