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.
źródło
Odpowiedzi:
Użyj aplikacji RAMMap firmy SysInternal .
Opcja menu Empty / Empty Standby List powoduje wyczyszczenie pamięci podręcznej plików systemu Windows.
źródło
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
Szybkie wyszukiwanie w Google daje te opcje dla systemu Linux
sync && echo 1 > /proc/sys/vm/drop_caches
źródło
Narzędzie wiersza poleceń można znaleźć tutaj
ze źródła:
źródło
z opcją porady
POSIX_FADV_DONTNEED
:określone dane nie będą dostępne w najbliższej przyszłości.
źródło
Znalazłem jedną technikę (inną niż ponowne uruchamianie), która wydaje się działać:
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ć.
źródło
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 .
źródło
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.
źródło
Istnieje wywołanie interfejsu API systemu Windows https://docs.microsoft.com/en-us/windows/desktop/api/memoryapi/nf-memoryapi-setsystemfilecachesize, którego można użyć do opróżnienia pamięci podręcznej systemu plików. Można go również użyć do ograniczenia rozmiaru pamięci podręcznej do bardzo małej wartości. Wygląda idealnie do tego rodzaju testów.
źródło