2011-08-12 22 views
6

Prowadzę pewne eksperymenty z aplikacjami intensywnymi I/O i próbuję zrozumieć skutki zmiany rozmiaru bufora i/o jądra, różne algorytmy windy, i tak dalej.Jak zmienić rozmiar bufora i/o jądra

Skąd mogę wiedzieć, jaki jest bieżący rozmiar bufora i/o w jądrze? Czy jądro używa więcej niż jednego bufora w razie potrzeby? Jak mogę zmienić rozmiar tego bufora? Czy istnieje plik konfiguracyjny, który przechowuje te informacje?

(Aby było jasne, nie mówię o pamięciach procesora lub dysku, mówię o buforze używanym przez jądro wewnętrznie, które bufory czytają/zapisują przed wypłukaniem ich na dysk od czasu do czasu).

Z góry dziękuję.

Odpowiedz

9

Jądro nie buforuje czyta i pisze tak, jak myślisz ... Zachowuje "pamięć podręczną strony", która przechowuje strony z dysku. Nie możesz manipulować jego rozmiarem (no, właściwie nie bezpośrednio); jądro zawsze będzie używało wolnej pamięci dla pamięci podręcznej strony.

Musisz wyjaśnić, co naprawdę chcesz zrobić. Jeśli chcesz mieć kontrolę nad ilością danych pobieranych z jądra z dysku, spróbuj wyszukać "linux readahead". (Podpowiedź: blockdev --setra XXX)

Jeśli chcesz uzyskać kontrolę nad tym, jak długo kernel będzie trzymał brudne strony przed opróżnieniem ich na dysk, spróbuj wyszukać "linux dirty_ratio".

Konkretny Aplikacja może także ominąć cache strony całkowicie za pomocą O_DIRECT, a to może sprawować pewną kontrolę nad nim za pomocą fsync, sync_file_range, posix_fadvise i posix_madvise. (O_DIRECT i sync_file_range są specyficzne dla Linuksa; reszta to POSIX.)

Będziesz mógł zadać pytanie, czy lepiej najpierw kształcić się na temat podsystemu Linux VM, zwłaszcza cache strony.

3

Myślę, że masz na myśli kolejkę IO w kolejce. Na przykład:

$ cat /sys/block/sda/queue/nr_requests 
128 

Sposób korzystania z tej kolejki zależy od używanego harmonogramu IO.

$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

cfq jest najczęstszym wyborem, chociaż na systemach z zaawansowanych kontrolerów dyskowych i wirtualnych systemów gości noop to również bardzo dobry wybór.

Nie ma pliku konfiguracyjnego dla tych informacji, o których mi wiadomo. W systemach, w których muszę zmienić ustawienia kolejki, umieszczam zmiany w /etc/rc.local, chociaż zamiast tego można użyć pełnego skryptu startowego i umieścić go na RPM lub DEB w celu dystrybucji masowej do wielu systemów.

+0

To nie jest dokładnie to, czego szukałem, ale to też pomogło. – jitihsk