Mój 64-bitowy komputer z systemem Windows 7 jest bardzo powolny. Zauważyłem w Menedżerze zadań, że moje użycie pamięci wynosi prawie 100% - jednak użycie zgłoszone dla każdego procesu nie sumuje się do 6 GB (Firefox pokazuje około 500 MB, a reszta znacznie mniej). Pobrałem RAMMap i stwierdził, że strona Spis jest podejmowanie znaczną ilość pamięci (2,5 GB).
Poszukałem go i nie znalazłem nigdzie - najwyraźniej tablica stron może ulec fragmentacji. Oczywiście zrestartuję komputer i zobaczę, czy to pomoże. Ale czy jest lepszy sposób, aby to naprawić?
EDYCJA: uruchomiono ponownie, a tabela stron jest zmniejszona do 30 MB.
EDYCJA 2: Po kilku dniach bezczynności użycie tabeli stron ponownie się zwiększa. Postępowałem zgodnie z instrukcjami @ magicandre1981 w tej odpowiedzi, aby znaleźć źródło użycia tablicy stron. Niestety narysowałem puste miejsce - tabela stron jest używana przez „Nieznany”!
Czy ktoś ma jakieś jasne pomysły?
Odpowiedzi:
Muszę skomentować komentarze do pytania, w szczególności zamieszanie między „tabelą stron” i „plikiem strony”. To nie jest odpowiedź, ale nie zmieści się w miejscu przeznaczonym na komentarze.
„Tabela stron” jest rzeczywiście czymś zupełnie innym niż plik stronicowania. Posiadanie n MB pamięci RAM na tabele stron nie oznacza, że używasz n MB miejsca na plik stronicowania. I chociaż niektóre wpisy tabeli stron (PTE, z których składają się tabele stron) odnoszą się do zawartości pliku strony, nie wszystkie.
Tabele stron są strukturami w pamięci, które są używane przez MMU procesora do translacji adresów z adresów wirtualnych (znowu nie pliku stronicowania) na adresy fizyczne, a także przez system operacyjny do śledzenia wirtualnej przestrzeni adresowej i pomagania w usuwaniu błędów stron. Tabele stron składają się z pozycji tablicy stron (PTE). Każdy PTE zajmuje 8 bajtów i określa 4K bajtów wirtualnej przestrzeni adresowej - tj. Jedną wirtualną stronę. Z grubsza jest jeden PTE na każdą nie-wolną stronę wirtualnej przestrzeni adresowej.
Nawiasem mówiąc, chociaż plik stronicowania może doświadczać fragmentacji zarówno zewnętrznej, jak i wewnętrznej (ten pierwszy zwykle nie stanowi większego problemu; ten drugi można poprawić, czyniąc go około czterokrotnie większym, niż powinien), tabele stron nie mogą. Są już trochę rozdrobnione i nie ma to najmniejszego znaczenia.
Każdy PTE ma „ważny” bit. W przypadku stron „ważnych”, czyli „rezydentnych”, PTE zawiera fizyczny numer strony, który odpowiada numerowi wirtualnej strony powiązanej z PTE; jest to wykorzystywane bezpośrednio przez MMU.
W przypadku „nieprawidłowych” stron MMU podnosi błąd strony, a PTE ma wtedy wiele możliwych formatów i interpretacji.
Uwaga: Wszystkie powyższe dotyczą dowolnego systemu operacyjnego, który umożliwia stronicowanie na x86 / x64. Poniższe informacje są w dużej mierze specyficzne dla systemu Windows, ale wiele koncepcji dotyczy innych systemów operacyjnych, z różnicami w szczegółach implementacji.
W przypadku strony w pamięci podręcznej strony PTE nadal zawiera fizyczny numer strony. W przypadku stron, które zostały utracone z pamięci RAM i zapisane w pliku strony, PTE zawiera numer pliku strony i przesunięcie w pliku strony, w którym zapisano zawartość strony. Inne możliwe treści PTE to odwołania do wirtualnych deskryptorów adresów , odniesienia do „prototypowych PTE”, odniesienia do zerowych stron itp., Do których nie zamierzam wchodzić. Wystarczy powiedzieć, że tylko niektóre PTE odnoszą się do lokalizacji w plikach stron.
Wspominam o tym wszystkim, aby pokazać, że plik strony i tabele stron, mimo że są powiązane, zdecydowanie nie są tym samym.
Tabele stron są zorganizowane w strukturę drzewa. Dla każdego procesu istnieje inne takie drzewo lub zbiór tabel stron - dzięki temu każdy proces może zdefiniować własne wystąpienie wirtualnej przestrzeni adresowej. Tabela stron w katalogu głównym drzewa musi zawsze znajdować się w pamięci RAM. Pozostałe są stronowalne; nie istnieją nawet tam, gdzie odpowiadałyby dużym (minimum 2 MB) regionom niezdefiniowanej lub wolnej wirtualnej przestrzeni adresowej.
Pozycje tabeli stron w tabelach „liści” drzewa odpowiadają stronom wirtualnej przestrzeni adresowej. PTE w tabelach wyższego poziomu - tych bliższych do katalogu głównego (i samego katalogu głównego) - informują, gdzie znajdują się kolejne tabele niższego poziomu (jeśli w ogóle istnieją).
Liczba pokazywana przez RAMmap to pamięć fizyczna (RAM) zajmowana przez wszystkie tabele stron rezydentnych (in-RAM) dla wszystkich procesów plus system operacyjny.
Ważne jest tutaj to, że system w OQ miał 2,5 GB pamięci RAM związanej z tabelami stron. Oznacza to, że zdefiniowano co najmniej 2,5 GB tabel stron. Ponieważ tabele stron same w sobie można ustawiać na stronach, rozmiar wirtualny może być znacznie większy niż rozmiar fizyczny, co pokazuje nam cała pamięć RAM. Ale załóżmy, że to „tylko” 2,5 GB. Przy ośmiu bajtach na PTE, co stanowi około 320 milionów PTE. Ponieważ każda PTE definiuje jedną stronę - 4 bajty - wirtualnej przestrzeni adresowej, oznacza to, że ponad 1,2 terabajtów wirtualnej przestrzeni adresowej jest definiowanych przez tabele stron w pamięci .
To nie jest niemożliwe, ale raczej dużo.
Dla porównania, w mojej bankomacie systemowym mam około 125 MB pamięci RAM w tabelach stron. Oznaczałoby to tylko około 65 GB wirtualnej przestrzeni adresowej. Moje rzeczywiste użycie wirtualne jest znacznie wyższe (125 TB tylko dla procesów), ale dzieje się tak, ponieważ większość tabel stron nie ma pamięci RAM. „Duże strony”, kolejna rzecz, o której nie powinienem się tutaj zajmować, mogą również pomóc w uwzględnieniu różnych proporcji między wielkościami tabel stron a wielkością używanej wirtualnej przestrzeni adresowej.
Tak więc: aby znaleźć winowajcę, najpierw szukałem w Monitorze wydajności w kategorii Proces procesów o wysokiej wartości licznika „Wirtualne bajty”.
źródło
Winowajcą był dla mnie „RapidBoot Shield” firmy Lenovo .
Po tygodniu bez restartu moja „Tabela stron” używała 4 GB +. Okazało się, że każdy zakończony proces blokował się przy użyciu 20K RAM (prywatna 4K, 16K Page Table), jak pokazano w zakładce „Procesy” w RamMap, a było ich około 200 000!
Ponowne uruchomienie zmniejszyło listę, ale znów zaczęła rosnąć. Powtarzalne było otwieranie notatnika, zabijanie go i obserwowanie, że pozostaje na liście procesów RamMap.
W oparciu o sugestie dotyczące tego wątku technet odinstalowałem program „RapidBoot Sheild”, ponownie uruchomiłem maszynę, a następnie procesy nie pozostały w miejscu po zabiciu. Problem rozwiązany!
źródło
W moim przypadku były to sterowniki filtrów Aksdf.sys i Hardlock.sys od sterowników Aladdin Knowledge Systems Aladdin . Udało mi się również znaleźć tę odpowiedź za pomocą RAMMap. Wyświetlał pamięć zajętą przez zakończony proces. Procesy zostały usunięte z listy procesów systemu Windows, ale zachowały się na mapie pamięci. Wydaje się, że sterowniki uniemożliwiają całkowite zakończenie procesów.
źródło
Zapytałem o to mojego działu IT, a oni byli podobnie zbzikowani. Skończyłem używać DriverEasy do aktualizacji sterowników. Co dziwne, wydawało się, że to robi różnicę, to sterowniki monitora. Wcześniej miałem standardowe sterowniki Windows „Generic PnP Monitor”. Ale kiedy zaktualizowałem je do poprawnej marki i modelu moich monitorów, problem wydawał się zniknąć.
źródło
Otwórz zakładkę „Procesy” w RamMap i sortuj według nazwy. Poszukaj podejrzanie dużej liczby tego samego procesu. Na moim komputerze winowajcą był „SynTPEnh.exe” (część sterownika touchpada). Po tygodniu nieprzerwanej pracy zgromadził dziesiątki tysięcy wpisów w tabeli stron o wielkości 32kb.
Rozmiar mojej tabeli stron wynosił 1 GB, po ponownym uruchomieniu to tylko 50 MB.
źródło