Jak Linux obsługuje współbieżne operacje We / Wy dysku?

12

Gdy serwer Linux obsługuje wiele jednoczesnych żądań odczytu wielu różnych plików, czy robi to:

  1. Przejdź do pliku_1, przeczytaj cały plik, a następnie przejdź do pliku_2, przeczytaj cały plik, a następnie przejdź do pliku_3 itp.

  2. Przejdź do pliku_1, przeczytaj jego część (do wartości readahead?), Następnie przejdź do pliku_2, przeczytaj część, a następnie wróć do pliku_1, w którym zostało przerwane, przeczytaj więcej, a następnie przejdź do pliku_3 itd. itp

Jeśli jest to drugi przypadek, serwer wykonuje o wiele więcej prób niż jest to konieczne, co znacznie spowolniłoby sprawę. W takim razie czy jest coś, co mogę zrobić?

Kontynuacja
źródło

Odpowiedzi:

14

W dyskowym We / Wy znajduje się tak zwana winda. Podsystem dysku stara się unikać przerzucania głowicy dysku po wszystkich talerzach. Zmieni kolejność żądań We / Wy (gdy nie jest to zabronione np. Przez barierę), dzięki czemu głowa będzie się przemieszczać z wnętrza dysku na zewnątrz iz powrotem, wykonując po drodze żądane We / Wy.

Druga sprawa to scalanie żądań we / wy. Jeśli w krótkim czasie pojawi się wiele żądań, które mają dostęp do różnych części pliku, podsystem we / wy spróbuje uzyskać wszystkie dane za jednym razem, zamiast wydawać kilka rozłącznych żądań.

Jeśli chodzi o strojenie. Jeśli jesteś twórcą aplikacji, możesz wiele zrobić. Możesz wydawać duże, sekwencyjne operacje we / wy, ilekroć możesz i użyj fsync () i in. kiedy musisz mieć pewność, że dane są na talerzach.

Jeśli jesteś administratorem systemu i absolutnie wiesz, że żądania danych od 2 aplikacji przeskakują i próbują one odczytywać pliki sekwencyjnie (np. Masz 2 DVD równolegle transkodowane), to tak, zwiększenie readahead powinno pomóc. W przeciwnym razie przed przystąpieniem do strojenia należy przyjrzeć się wzorcom i rozmiarom we / wy, rozważyć poziom RAID (jeśli występuje) i inne czynniki. Spójrz na swoje prawdziwe wąskie gardła, zanim zaczniesz dostrajać, może być trudno zgadnąć, co naprawdę ogranicza Twój system.

Paweł Brodacki
źródło
5

W Linuksie możesz zdefiniować swój własny algorytm planowania, masz różne możliwości, musiałem zrobić coś na ten temat w szkole, a ten artykuł z Red Hat bardzo mi pomógł. Chociaż jest to specjalnie dla Red Hat, możesz znaleźć te harmonogramy w praktycznie każdej dystrybucji Linuksa.

Lucas Kauffman
źródło