Wyczyść pamięć podręczną plików, aby powtórzyć testy wydajności

106

Jakich narzędzi lub technik mogę użyć do usunięcia zawartości plików z pamięci podręcznej, aby zapobiec wypaczeniu wyników wydajności? Uważam, że muszę całkowicie wyczyścić lub selektywnie usunąć zapisane w pamięci podręcznej informacje o zawartości plików i katalogów.

Aplikacja, którą tworzę, jest wyspecjalizowanym narzędziem do kompresji i oczekuje się, że będzie wykonywać dużo pracy, odczytując i zapisując pliki, których system operacyjny ostatnio nie dotykał i których bloki dysku prawdopodobnie nie zostaną zapisane w pamięci podręcznej.

Chcę usunąć zmienność, którą widzę w czasie IO, kiedy powtarzam zadanie profilowania różnych strategii wykonywania pracy związanej z przetwarzaniem plików.

Interesują mnie przede wszystkim rozwiązania dla systemu Windows XP, ponieważ jest to moja główna maszyna programistyczna, ale mogę też testować na Linuksie, dlatego też interesują mnie odpowiedzi dotyczące tego środowiska.

Wypróbowałem SysInternals CacheSet , ale kliknięcie „Wyczyść” nie powoduje wymiernego wzrostu (przywrócenia czasu po zimnym rozruchu) czasu potrzebnego na ponowne odczytanie plików, które przeczytałem kilka razy.

Stephen Denne
źródło
1
Dlaczego to pytanie zostało usunięte ?
Dan Dascalescu

Odpowiedzi:

82

Użyj aplikacji RAMMap firmy SysInternal .

rammap pusty tryb gotowości

Opcja menu Empty / Empty Standby List powoduje wyczyszczenie pamięci podręcznej plików systemu Windows.

najmniejszy
źródło
2
RAMMap nie działa w systemie Windows XP. Czy te opcje menu działają inaczej niż przycisk „Wyczyść” w aplikacji SysInternals Cacheset?
Stephen Denne
@stephen ta technika działała idealnie dla mnie pod Windows 8! Windows XP ma już 12 lat, czy jest jakiś powód, dla którego nie możesz tego wypróbować w systemie Vista, Windows 7 lub Windows 8?
Jeff Atwood
@Jeff Nie pracuję już z tymi ograniczeniami. Zatem „Empty Standby List” skutkuje następnym odczytem z ostatnio odczytywanego pliku wymagającego IO dysku?
Stephen Denne
2
Naciśnij klawisz F5, aby odświeżyć listę plików po kliknięciu pustej listy gotowości
JoshG,
3
Aby zapoznać się z podejściem programowym, zobacz ten wpis dotyczący SO: stackoverflow.com/a/23085045/430360
snemarch
16

W przypadku systemu Windows XP powinno być możliwe wyczyszczenie pamięci podręcznej określonego pliku, otwierając plik za pomocą funkcji CreateFile z opcjami FILE_FLAG_NO_BUFFERING, a następnie zamykając uchwyt. Nie jest to udokumentowane i nie wiem, czy działa w późniejszych wersjach systemu Windows, ale użyłem tego dawno temu, pisząc kod testowy, aby porównać biblioteki kompresji plików. Nie pamiętam, czy dostęp do odczytu lub zapisu wpłynął na tę sztuczkę.


źródło
U mnie działa idealnie pod Windows 7 SP1, x64. Świetna wskazówka!
cxxl
2
Więc trzeba to powtórzyć dla każdego pliku ? Więc jeśli na przykład kopiujesz katalog zawierający 100 MB, rozłożony na 30 plików w 10 podkatalogach, musisz otwierać każdy z osobna, aby upewnić się, że czytasz rzeczywisty dysk zamiast pamięci podręcznej?
Synetech
Inne odpowiedzi na stronie potwierdzają, że działa to również w Win7 i 8. Przypuszczam, że to działa na Vista. I tak, musisz uruchomić go na każdym pliku, ale nie trwa to długo. Wszystko, co musisz zrobić, to otworzyć i zamknąć każdy plik, a po zamknięciu system Windows wyczyści pamięć podręczną. Po wykonaniu tej czynności, NASTĘPNIE przeprowadź test wydajności.
Mooing Duck,
1
To była doskonała odpowiedź. Prosty w kodowaniu, skuteczny i powinien działać na większości systemów operacyjnych Windows (w tym XP, testowałem tylko na Win7x64). Otworzyłem pliki z uprawnieniami do odczytu i bez udostępniania. Nie wiem, co się liczy.
Rosco
Podobna funkcjonalność w Linuksie (od wersji 2.4.10) z flagą O_DIRECT w wywołaniu syscall open (2). A dokładniej, z tego, co rozumiem, O_DIRECT nie czyści pamięci podręcznej dla tego pliku, stara się go najlepiej ominąć.
kaiwan
14

Szybkie wyszukiwanie w Google daje te opcje dla systemu Linux

  1. Odmontuj i zamontuj partycję zawierającą pliki
  2. sync && echo 1 > /proc/sys/vm/drop_caches
John Nilsson
źródło
2
Dzięki, wygląda to bardzo przydatne, chociaż prawdopodobnie chciałbym powtórzyć 3 zamiast 1. Interesuje mnie przede wszystkim Windows XP, dlatego nie znalazłem tego w Google.
Stephen Denne
Niestety środowisko linuxowe, w którym mogłem to wykorzystać, ma jądro w wersji 2.6.9. drop_caches został dodany w jądrze 2.6.16
Stephen Denne
Wiele innych postów, które przeczytałem, sugeruje, że możesz odmontować i zamontować system plików, aby usunąć wszystkie zbędne elementy. Zakładam, że tak było przed 2.6.16, jak również w nowszych jądrach.
TafT,
12

Narzędzie wiersza poleceń można znaleźć tutaj

ze źródła:

EmptyStandbyList.exe to narzędzie wiersza poleceń dla systemu Windows (Vista i nowsze), które może opróżniać:

  • procesowe zestawy robocze,
  • zmodyfikowana lista stron,
  • listy rezerwowe (priorytety od 0 do 7) lub
  • tylko lista rezerwowa o priorytecie 0.

Stosowanie:

EmptyStandbyList.exe workingsets|modifiedpagelist|standbylist|priority0standbylist
Edwin van Mierlo
źródło
3
Bardzo niedoceniana odpowiedź pośród całego hałasu, proste narzędzie, które wykonuje jedną pracę i robi to dobrze. Prawdopodobnie powinieneś zawrzeć więcej szczegółów w odpowiedzi, aby uzyskać pozytywne głosy, na które zasługujesz.
Prometeusz
3

Znalazłem jedną technikę (inną niż ponowne uruchamianie), która wydaje się działać:

  1. Uruchom kilka kopii MemAlloc
  2. Przy każdym z nich przydziel kilka razy duże porcje pamięci
  3. Użyj Process Explorer, aby obserwować, jak rozmiar pamięci podręcznej systemu zmniejsza się do bardzo niskiego poziomu
  4. Zamknij programy MemAlloc

Nie jest to jednak selektywne. Idealnie chciałbym móc wyczyścić określone części pamięci używane do buforowania bloków dysku z plikami, których nie chcę już buforować.

Stephen Denne
źródło
Ma to efekt uboczny polegający na wypychaniu rzeczy do pliku stronicowania, co spowoduje utratę wydajności przez dłuższy czas. Jeśli masz zamiar uciec się do kludge, równie dobrze możesz po prostu przeczytać inny duży plik; przynajmniej czyści tylko pamięć podręczną dysku i nic więcej.
Synetech
3

Aby uzyskać znacznie lepszy widok pamięci podręcznej systemu plików Windows XP - wypróbuj ATM autorstwa Tima Murgenta - pozwala zobaczyć zarówno rozmiar zestawu roboczego pamięci podręcznej systemu plików, jak i rozmiar listy oczekujących w bardziej szczegółowym i dokładnym widoku. Dla Windows XP - trzeba starą wersję 1 z bankomatu, który jest dostępny do pobrania tutaj ponieważ V2 i V3 wymagają Server 2003, Vista lub wyższy.

Zauważysz, że chociaż Sysinternals Cacheset zredukuje "Cache WS Min" - rzeczywiste dane nadal istnieją w postaci list gotowości, z których można ich używać, dopóki nie zostaną zastąpione czymś innym. Aby następnie zastąpić go czymś innym, użyj narzędzia, takiego jak MemAlloc lub flushmem autorstwa Chada Austina lub Consume.exe z zestawu narzędzi Windows Server 2003 Resource Kit .

robertcollier4
źródło
0

Jako że pytanie zadane również dla systemu Linux, jest powiązany odpowiedź tutaj .

Narzędzie wiersza poleceń vmtouch umożliwia między innymi dodawanie i usuwanie plików i katalogów z systemowej pamięci podręcznej plików.

osoba ubiegająca się o
źródło