W przypadku korzystania z oprogramowania RAID i LVM w systemie Linux, które ustawienia harmonogramu we / wy i readahead są honorowane?

28

W przypadku wielu warstw (dyski fizyczne -> md -> dm -> lvm), w jaki sposób współdziałają harmonogramy, ustawienia readahead i inne ustawienia dysku?

Wyobraź sobie, że masz kilka dysków (/ dev / sda - / dev / sdd), które są częścią programowego urządzenia RAID (/ dev / md0) utworzonego za pomocą mdadm. Każde urządzenie (w tym dyski fizyczne i / dev / md0) ma swoje własne ustawienia dla harmonogramu we / wy ( tak zmienione ) i readahead ( zmienione za pomocą blockdev ). Kiedy dodajesz takie rzeczy jak dm (krypto) i LVM, dodajesz jeszcze więcej warstw z ich własnymi ustawieniami.

Na przykład, jeśli urządzenie fizyczne ma odczyt przed 128 blokami, a RAID ma readahead 64 bloków, co jest honorowane, gdy wykonuję odczyt z / dev / md0? Czy sterownik MD próbuje odczytać 64 bloki, które sterownik fizyczny przekłada następnie na odczyt 128 bloków? Czy może RAID „przepuszcza” do urządzenia bazowego, co powoduje odczyt 64 bloków?

Ten sam rodzaj pytania dotyczy harmonogramów? Czy muszę się martwić wieloma warstwami harmonogramów IO i ich interakcją, czy też / dev / md0 skutecznie zastępuje bazowe harmonogramy?

Próbując odpowiedzieć na to pytanie, wykopałem kilka interesujących danych na temat harmonogramów i narzędzi, które mogą pomóc to rozwiązać:

andrew311
źródło

Odpowiedzi:

7

Jeśli zrobisz odczyt z md0, to użyjesz readahead dla md0. Jeśli zrobiłeś odczyt z sda, który jest składnikiem md0, użyłby ustawienia sda. Narzędzie mapowania urządzeń dzieli tylko operacje we / wy na wiele odczytów i zapisów w celu wykonania RAID, ale wszystko to znajduje się poniżej warstwy pamięci podręcznej bloków, w której odbywa się readahead. Stos magazynu wygląda następująco:

system plików - pomija pamięć podręczną po otwarciu za pomocą O_DIRECT

block cache - readahead, write cache, harmonogram

mapowanie urządzeń - dm, lvm, programowa macierz RAID, migawka itp.

sd - sterownik dysku

SCSI - obsługa błędów, routing urządzeń

sterownik sprzętowy - karta SCSI, karta FC, Ethernet

Pamiętaj, że kiedy to zrobisz

dd if=/dev/sda of=foo

czytasz sda jako plik, więc przechodzisz przez pamięć podręczną bloków. Aby przejść bezpośrednio na dysk, wykonaj

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

Jeśli chodzi o harmonogramy elewatora we / wy, istnieją one tylko w sterowniku dysku (sd). W katalogu / sys / block / md lub / sys / block / dm nie ma katalogu kolejek. Przechodzisz przez sortowanie dysków dyskowych tylko raz.

sztywny
źródło
2
Jest /sys/block/md0/queue/schedulerw moich systemach, ale jest tam jedyny wybór none.
Peter Eisentraut