Dlaczego czyszczenie dysku zajmuje tyle czasu i procesora?

29

Tylko pytanie z ciekawości. Oczyszczanie dysku od dłuższego czasu wydaje 100% jednego z moich rdzeni. Wydaje się, że spędza dużo czasu, szczególnie na czyszczeniu Windows Update.

Nie do końca rozumiem, dlaczego usuwanie plików powinno być tak intensywnym działaniem. Zwłaszcza, że ​​spędził już sporo czasu na obliczaniu tego, co można usunąć.

Dlaczego czyszczenie dysku zajmuje tyle czasu i procesora? Co to robi, że jest tak intensywne?

Maksymalnie dwa z czterech rdzeni

Svish
źródło

Odpowiedzi:

20

System Windows kompresuje folder WinSxS, usuwając zastąpione aktualizacje i pliki kompresji, których nie można odinstalować i które nie są używane w plikach różnic. To wymaga dużej mocy procesora i dlatego widzisz wysokie użycie procesora.

Możesz przeanalizować użycie procesora za pomocą xperf / WPA, aby to sprawdzić.

magicandre1981
źródło
Czy nie oblicza również miejsca zaoszczędzonego podczas kompresji najstarszych plików (ostatnio nie otwieranych)?
Justin Goldberg,
Fajny filmik! Na pewno sprawdzi to narzędzie: D
Svish,
@Svish zweryfikowałeś to? Czy odpowiedź na pytanie?
magicandre1981
4

Mogę potwierdzić, że czyszczenie aktualizacji systemu Windows wymaga prawie 100% użycia procesora, chodzi o kompresję WinSxS i reintegrację aktualizacji:

Oczyszczanie systemu Windows 100% użycie procesora

Rozpocząłem czyszczenie po raz pierwszy po instalacji systemu Windows, a ukończenie 50% zajęło 2 godziny. Z wykresu widać, że na początku dużo odczytu małych plików z dysku (drugi wykres), a po 100% zużyciu procesora do kompresji i tak dalej.

Arunas Bartisius
źródło
2

Żeby tylko podpalić pytanie, wykonałem na niewymownej maszynie wirtualnej następujące kroki:

  1. Uruchom dysk SystemRescueCD i zamontuj partycję Windows
  2. Wyświetl wszystkie pliki na dysku do pliku dziennika (mniej niż minutę)
  3. Uruchom ponownie w systemie Windows
  4. Pozwolić cleanmgrwykonywać swoje zadania i wziąć pod uwagę czas (więcej niż osiem godzin)
  5. Uruchom ponownie na SystemRescueCD i zamontuj partycję Windows
  6. Wyświetl wszystkie pliki na dysku do innego pliku dziennika (mniej niż minuta)
  7. Zresetuj niezmienną maszynę wirtualną
  8. Uruchom ponownie w systemie Windows
  9. Wykonaj FOR / F ..., aby usunąć takie pliki w wierszu polecenia administratora (cmd) i zanotuj czas (mniej niż pięć minut)

Uwaga: Uruchomiłem ponownie na Linux SystemRescueCd tylko po to, aby móc wyświetlić listę wszystkich plików, także tych przeglądanych przez Windowta, a także aby zrobić takie spisanie tak szybko, jak to możliwe (bez sprawdzania acl itp.).

Pamiętaj też, że na cleanmgrliczę tylko czas po zakończeniu wyszukiwania (samo wyszukiwanie również zajmuje więcej niż sześć godzin).

Dlatego usuwanie plików nie jest problemem (samo usuwanie cleanmgrzajmuje tylko pięć minut, ale zajmuje więcej niż osiem godzin).

Samo usuwanie może przebiegać tak szybko, ponieważ hostem jest system Linux, szybkość ta jest spowodowana tylko tym, że Linux buforuje wszystkie zapisy do pliku o stałym rozmiarze, który jest używany jako dysk na maszynie wirtualnej (24GiB), a ponieważ mam 64GiB Pamięć RAM i pozwolę Windows 16GiB nie musi używać SWAP ani PAGEFILE.SYS; ponadto Linux może przechowywać cały plik na pamięci RAM (testowałem z tym plikiem na pamięci RAM i czasy usuwania są dużo robione, ale cleanmgrczas nie spada).

Tak, jeśli wrzucę dysk wirtualny całkowicie do pamięci RAM, cleanmgrczas nie mija, ale jeśli ręcznie usuwam pliki, czas ten maleje nieco (pamięć podręczna zapisu w systemie Linux jest świetna, gdy masz na niej 64 GB pamięci RAM).

Moja konfiguracja do testów:

  • Host: dystrybucja Linux 64 bity na sprzęcie, którego głównymi częściami są AMD Deca Core 5GHz z 64GiB pamięci RAM i kontroler Sata Raid0 z dwoma dyskami twardymi WD VelociRaptor (zdolne do utrzymania łącznej prędkości zapisu sekwencyjnego blisko 1GiB / si losowego zapisu 4K 300 Mb / s); koszt to> dziesięć tysięcy euro
  • Gość: Windows 10 Home z 16 GB pamięci RAM i wirtualny dysk 24 GB

Test1: Posiadanie dysku wirtualnego 24GiB na fizycznych dyskach twardych Test2: Posiadanie dysku wirtualnego 24GiB na pamięci RAM hosta Linux

Obawiam się, że cleanmgrrobi coś w rejestrze systemu Windows dla każdego usuwanego pliku (dostęp do rejestru jest bardzo niski).

Monitory, które miałem:

  • Zużycie procesora na hoście Linux i na gościu Windows (większość czasu od 0% do 1%, z pikami 5%, nie więcej)
  • Wykorzystanie dysku twardego na hoście Linux (prawie 0% podczas cleanmgrpracy, z pikami 2%), pamięć podręczna dysku Linux jest naprawdę świetna, unikając przesyłania danych na prawdziwy dysk
  • Wykorzystanie dysku twardego przez gościa Windows (większość czasu między 2% a 15%, gdy cleanmgrpracował, z pikami 28%)

Czy cleanmgrto oczywiste, że wykonuje dużo niewykrywalnej pracy, może czasy snu? Może nie, jeśli uzyskuje dostęp do rejestru, procesor na to nie jest liczony przez monitory Windows, dysk twardy na nim nie jest używany (rejestr znajduje się w pamięci RAM) itp., A każdy dostęp do rejestru może zająć więcej niż sekundę. . wypróbuj swój własny program, aby uzyskać dostęp do rejestru, otwierając rejestr i zamykając go dla każdej akcji w porównaniu do otwarcia HK * ... to wielka różnica.

Jeśli cleanmgrtak, dla każdego pliku:

  1. Otwórz rejestr HK *
  2. Skonsultuj się z wszelkimi potrzebami i / lub zrób kilka zapisów w rejestrze
  3. Zamknij rejestr HK *

Może to zająć nawet dwie lub trzy sekundy na operację, a jeśli wykona jedną operację na plik, może zająć prawie godzinę na każdy tysiąc plików ... moja liczba plików wynosiła niewiele ponad 40000 plików, więc 40000 plików / 8 godzin przetwarza jeden plik co 1,3 sekundy ... z drugiej strony, usuwanie ich w skrypcie (po poznaniu, które z nich) zajmuje mniej niż pięć minut, czyli usuwanie około 133 na sekundę ... hufe różnica.

cleanmgrCzas zdecydowanie nie jest powodowany przez deletionto ja! Co jeszcze robi? Proszę M $ poprawić tę prędkość!

Claudio
źródło
1
To nie jest odpowiedź na pierwotne pytanie. Jeśli masz nowe pytanie, zadaj własne pytanie (w razie potrzeby skorzystaj z kontekstu).
DavidPostill
Dlaczego nie użyłeś monitora procesu ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) do analizy działań rejestru systemu Windows itp.?
cybernard
* I m zmienny Sp.
StingyJack
2

Jednym ze sposobów złagodzenia tego problemu i przyspieszenia nieco fazy „Windows Update Cleanup” „Oczyszczania dysku” jest tymczasowe ustawienie wyższego priorytetu dla procesu TiWorker.exe na czas tak zwanej czynności „czyszczenia”.

w okienku „Szczegóły” Menedżera zadań znajdź TiWorker.exei kliknij prawym przyciskiem myszy, aby wyświetlić menu podręczne. W „Set Priority” wybierz „Above Normal”. Dla mnie zwiększyło to TiWorkeraktywność procesora - od średnio około 16% - do jego pełnego potencjału 25% (na maszynie 4-rdzeniowej).

wprowadź opis zdjęcia tutaj

Oprócz drobnego przyspieszenia - i prawdopodobnie dobrego poczucia spełnienia - zapewnia to niewiele do zrobienia, ponieważ najwyraźniej „Windows Update Cleanup” jest zakodowany w sposób, który z nieznanych przyczyn przebiega plik po pliku, czyniąc całą pracę okropnie powiązaną z dyskiem.

A także wiedz, że proces najprawdopodobniej nie został zawieszony i pewnego dnia rzeczywiście się zakończy. Aby to zweryfikować (i jeszcze bardziej odwrócić uwagę podczas irytującego czasu oczekiwania), możesz sprawdzić sekcję „Aktywność dysku” Monitora zasobów (uruchom „resmon.exe”).

Glenn Slayden
źródło
Bardzo fajnie przyspieszyć!
subiektywista
1

Usunięcie 20 plików o rozmiarze 5 MB zajmuje więcej czasu niż 10 plików o rozmiarze 64 MB. Wynika to z faktu, że kiedy system usuwa pliki, nie robi tego naprawdę ich usuwa (ponieważ puste miejsce na dysku może być zrobione z „szumów”), ale po prostu nadpisuje przednią część, która mówi „Plik zaczyna się tutaj” bełkotem, a następnie chętnie zastąpi tę i kolejne części później, gdy będziesz chciał skorzystać z tego miejsca. W rzeczywistości usuwanie jest równoznaczne z pisaniem w inny sposób.

Oczyszczanie dysku polega na tym, że to, co czyści, to zwykle DUŻO małych plików (pliki cookie, pliki tymczasowe itp.). W związku z tym zapisuje na dysku o wiele więcej niż wiele innych rzeczy i może zająć tyle samo czasu, co instalacja czegoś nowego, z powodu zapisywania woluminu na dysku.

liljoshu
źródło
Pierwotne pytanie dotyczy konkretnie czyszczenia dysku.
liljoshu,
0

Kolejne słowo ostrzeżenia: część czasu zajmuje to, że podczas czyszczenia WinSxS, Oczyszczanie dysku musi najpierw rozpakować wiele plików. Tak więc użycie dysku faktycznie wzrasta w pierwszej części czyszczenia!

JonP
źródło
-2

Innym sposobem na przyspieszenie procesu jest uruchomienie czyszczenia dysku przez około 5 minut. Zatrzymaj go, a następnie uruchom ponownie, a on przeleci przez chwilę! Ponadto wcześniejsze usuwanie fragmentów lub optymalizacja dysku twardego / SSD przyspieszy sprawę, pamiętaj tylko, aby po czyszczeniu usunąć fragment / optz ponownie.

Bluesdigital
źródło
Proszę nie defragmentować dysku SSD, który zużywa cykle odczytu i zapisu i prawie nie zyskuje.
Nordlys Jeger