2011-02-08 14 views
6

Na komputerze z systemem CentOS 5.5 z jądrem Linux w wersji 2.6.18-194.26.1.el5 zauważyłem, że posix_fadvise (WILLNEED) sprawia, że ​​czytanie plików 60K jest znacznie wolniejsze niż zwykłe IO o prawie 200%.posix_fadvise (WILLNEED) spowalnia działanie IO?

Wygląda na to, że faktyczne wywołanie fadvise jest synchroniczne, a także opóźnia planowanie innych wątków w aplikacji, które używają danych odczytywanych z plików.

Czy to możliwe, że jądro jest zajęte przez pobieranie danych z dysków z powodu wywołania funkcji fadvise i kończy opóźnianie innego zaplanowanego zadania? Wygląda to wbrew oczekiwanemu asynchronicznemu zachowaniu wstępnemu, którego oczekujemy od wykonania wywołania fadvise.

Moje pytanie brzmi: czy są jakieś dostrajalne parametry jądra, które mogłyby zostać użyte do wymuszenia asynchronicznego zachowania dla posix_fadvise (WILLNEED)? Jak zwiększenie wątków IO jądra, pamięć podręczna stron?

Odpowiedz

7

To było niedawno asked on LKML. Tak właśnie zostało zaprojektowane. Jeśli potrzebujesz niezablokowanego fadvise, zrób to w innym wątku.

+0

Dzięki za odpowiedź. Odpowiedź podana w odsyłaczu nawiązuje do liczby żądań IO obsługiwanych w jądrze. Czy to konfigurowalny numer? Jeśli system ma dużo zasobów, zwiększenie tej kolejki może pomóc zredukować efekt synchronicznego zachowania ... – Specksynder

+0

['nr_requests' na kolejkę, aby można było go dostroić] (https://www.kernel.org/doc/Documentation /block/queue-sysfs.txt). Nie jestem pewien, od czego to się zaczęło. – sourcejedi

Powiązane problemy