jak całkowicie wyczyścić pamięć podręczną systemu plików w systemie Linux?

9

W teście wydajności chcę pominąć wpływ pamięci podręcznej systemu Linux (w tym pamięci podręcznej strony / pamięci podręcznej i-węzłów itd.).

Próbowałem flagi O_DIRECT, ale okazało się, że bezpośrednie operacje we / wy nadal „cieszą się” efektem pamięci podręcznej.

Czy istnieje dokładny sposób na zamknięcie efektu pamięci podręcznej systemu?


źródło
2
Jaki jest sens takiego „nierealnego” testu wydajności? Próbujesz przetestować coś, na co nigdy nie pozwoliłby współczesny system operacyjny.
Niestety, nie jest to wcale nierealne, tak działa dzisiaj jądro aio. Chciałbym, żeby Mr.T zdał sobie sprawę, że asynchroniczne operacje we / wy i pamięć podręczna nie wykluczają się wzajemnie. Jest to coś, co chłopaki z Microsoftu zdali sobie sprawę już 15 lat temu (choć wprawdzie wydajność przed Vistą może być rozczarowująca, szczególnie w przypadku współbieżności). Pewien Indianin też napisał łatkę lata temu, ale został odrzucony.

Odpowiedzi:

14

(tak naprawdę spada, więc ...) syncnajpierw uruchom

darmowy podgląd strony:

echo 1 > /proc/sys/vm/drop_caches

bezpłatne dentries i i-węzły:

echo 2 > /proc/sys/vm/drop_caches

darmowy pagecache, dentries i i-węzły:

echo 3 > /proc/sys/vm/drop_caches

Następnie możesz zacząć od czystej pamięci podręcznej, ale oczywiście buforowanie nadal będzie działać.

Karoly Horvath
źródło
gdzieś słyszałem o tej metodzie. ale na moim Ubuntu 10.04 nie ma takich plików. więc nie udało mi się wykonać powyższych poleceń.
@tom_cat: Potrzebujesz jądra nowszego niż 2.6.16, a Ubuntu 10.04 przyszedł z 2.6.32, jeśli się nie mylę, więc to powinno działać. Właśnie sprawdziłem, czy jest warta mojej instalacji 11.04, która ma ten wpis proc (niestety nie ma już tutaj 10.04)
@Damon: Tak, masz rację. Dzięki wielkie. Odkryłem, że zalogowałem się na zdalnej maszynie starszego jądra.
0

nie, nie możesz ominąć pamięci podręcznej. Można jednak wymusić synchronizację systemu plików (co oznacza wyczyszczenie pamięci podręcznej i zapisanie danych na dysku) za pomocą dodatkowego wywołania systemowego fsync (3).

Pozdrowienia, CK


źródło