Do testowania wydajności muszę wyczyścić pamięć podręczną odczytu dysku systemu Windows. Próbowałem googlować, ale nie mogłem znaleźć nic innego niż ponowne uruchomienie lub inne ręczne czynności. Zanim się poddam i zrobię to, chciałbym się dowiedzieć, czy ktoś zna sposób na wyczyszczenie pamięci podręcznej odczytu dysku systemu Windows. Testuję na Windows 7, ale interesują mnie również rozwiązania Windows XP.
windows-xp
windows-7
Sebastiaan M.
źródło
źródło
Zadałem to samo pytanie na temat przepełnienia stosu
/programming/478340/clear-file-cache-to-repeat-performance-testing
Korzystałem z Win XP, ale najlepszym rozwiązaniem, jakie wymyśliłem, było:
źródło
Aby uzyskać znacznie lepszy widok pamięci podręcznej systemu plików Windows XP - wypróbuj ATM firmy Tim Murgent - pozwala zobaczyć zarówno rozmiar zestawu roboczego bufora systemu operacyjnego, jak i rozmiar listy rezerwowej w bardziej szczegółowym i dokładnym widoku. W przypadku systemu Windows XP - potrzebujesz starej wersji 1 bankomatu, którą można pobrać tutaj, ponieważ wersje V2 i V3 wymagają serwera 2003, Vista lub nowszego.
Zauważysz, że chociaż Cacheset zmniejszy „Cache WS Min” - rzeczywiste dane nadal istnieją w postaci list Standby, z których można ich używać, dopóki nie zostaną zastąpione czymś innym. Aby następnie zastąpić go innym narzędziem, użyj narzędzia takiego jak MemAlloc, flushmem autorstwa Chada Austina lub Consume.exe z narzędzi systemu Windows Server 2003 Resource Kit.
źródło
Użyłem RAMMap . Ma możliwość zwolnienia pamięci kilku rodzajów alokacji.
Zawartość pamięci podręcznej plików można obserwować na karcie „Podsumowanie plików”, a wybranie „Opróżnij listę rezerwową” z menu „Puste” powinno wyczyścić pamięć podręczną.
źródło
Uruchom ponownie maszynę.
źródło
Najlepszą praktyką jest upewnienie się, że wszystkie pliki testowe, z którymi przeprowadzany jest test porównawczy, są 2x większe niż pamięć podręczna kontrolera macierzy (lub pamięć systemu Windows, jeśli testowanie porównawcze u gościa vm), z co najmniej 1 GB pliku testowego. To gwarantuje, że wszelkie buforowanie zostanie zanegowane. Używamy SQLIO do testowania dysku; w dołączonej dokumentacji znajduje się wiele informacji.
źródło
Nawiązując do Grega, sposobem obejścia tego problemu jest upewnienie się, że zestaw danych, z którym pracujesz, znacznie przekracza ilość dostępnej pamięci RAM. Jeśli wykonujesz testy na platformie sprzętowej, która zawiera również znaczną ilość pamięci podręcznych kontrolerów i dysków, będziesz chciał upewnić się, że przekraczasz te kwoty. Zapewni to, że wydajność, którą widzisz, jest bardziej związana z prawdziwą wydajnością sprzętową niż optymalizacje oprogramowania wprowadzone przez wszystkie te warstwy pamięci podręcznej.
To powiedziawszy, jeśli naprawdę chcesz po prostu wyczyścić pamięć podręczną odczytu przydatnych danych przed uruchomieniem testów porównawczych, które CHCESZ użyć pamięci podręcznej odczytu, sposobem na to jest odczyt w jednym pliku o wielkości tuż pod pamięcią pamięci podręcznej odczytu i wykonaj kilka operacji na plikach. Spowoduje to wyczyszczenie pamięci podręcznej i wypełnienie go jednym dużym plikiem. Po zamknięciu pamięć podręczna jest skutecznie usuwana z danych, na których Ci zależy . Trudną częścią jest ustalenie, jak duży musi być ten plik, który w dzisiejszych czasach może być wielkości 3 GB; w tym momencie możesz potrzebować kilku niepotrzebnych plików 1 GB, aby działało.
źródło
Myślę, że większość opcji to „rzeczy ręczne”. W systemie UNIX dość normalnym jest odmontowywanie / ponowne podłączanie urządzenia przed każdym uruchomieniem testu porównawczego, często z dodaniem „newfs”. Nie wiem, czy możesz użyć narzędzi wiersza polecenia w systemie Windows do odmontowania / zamontowania urządzeń, ale jeśli Twoim celem jest automatyzacja, warto poszukać takich narzędzi.
źródło
sync; echo 3 > /proc/sys/vm/drop_caches
- chociaż wpływa to na wszystkie pamięci podręczne / bufory, nie tylko te odnoszące się do określonego woluminu. Wcześniej szukałem podobnej sztuczki dla systemu Windows, ale jej nie znalazłem.Spójrz na tę odpowiedź, którą właśnie zamieściłem na własne pytanie na StackOverflow.
Zasadniczo: jeśli spróbujesz
CreateFile
obsłużyć bez dostępu do udziału w zapisie, opróżni to, a następnie unieważni pamięć podręczną, nawet jeśli zwróci błąd.Mam nadzieję że to pomoże!
źródło