Warum nimmt die Datenträgerbereinigung so viel Zeit und CPU?

29

Nur eine Frage der Neugier. Die Datenträgerbereinigung hat eine ganze Weile lang 100% von einem meiner Kerne ausgegeben und läuft noch. Scheint viel Zeit zu verbringen, insbesondere mit der Windows Update-Bereinigung.

Kann nicht ganz verstehen, warum das Löschen von Dateien eine so intensive Aktivität sein sollte. Zumal es schon ziemlich viel Zeit damit verbracht hat zu berechnen, was es löschen könnte.

Warum nimmt die Datenträgerbereinigung so viel Zeit und CPU? Was macht es so intensiv?

Zwei von vier Kernen sind voll

Svish
quelle

Antworten:

20

Windows komprimiert den WinSxS-Ordner, indem ersetzte Aktualisierungen und komprimierende Dateien entfernt werden, die nicht deinstalliert werden können und nicht in Diffs verwendet werden. Dies erfordert viel CPU-Leistung, weshalb Sie eine hohe CPU-Auslastung feststellen.

Sie können die CPU-Auslastung mit xperf / WPA analysieren , um dies zu überprüfen.

magicandre1981
quelle
Berechnet es nicht auch den Speicherplatz, der beim Komprimieren der ältesten Dateien (der zuletzt nicht geöffneten) eingespart wird?
Justin Goldberg
Nettes Video! Werde definitiv in dieses Tool einchecken: D
Svish
@Svish hast du das überprüft? Ist die Frage beantwortet?
magicandre1981
4

Ich kann bestätigen, dass die Windows Updates-Bereinigung fast 100% der CPU-Auslastung beansprucht. Alles dreht sich um die WinSxS-Komprimierung und die Wiedereingliederung von Updates:

Windows Cleanup 100% CPU-Auslastung

Ich habe das erste Mal nach der Windows-Installation mit der Bereinigung begonnen und es dauerte 2 Stunden, bis 50% fertig waren. Aus dem Diagramm können Sie ersehen, dass zuerst viele kleine Dateien von der Festplatte gelesen wurden (zweites Diagramm), und nach 100% CPU-Auslastung für die Komprimierung und so weiter.

Arunas Bartisius
quelle
2

Um die Frage in Brand zu setzen, hatte ich die nächsten Schritte auf einer unveränderlichen virtuellen Maschine ausgeführt:

  1. Booten Sie eine SystemRescueCD und hängen Sie die Windows-Partition ein
  2. Alle Dateien auf der Festplatte in einer Protokolldatei auflisten (weniger als eine Minute)
  3. Starten Sie Windows neu
  4. Lassen Sie es cleanmgrmachen und notieren Sie sich die Zeit (mehr als acht Stunden)
  5. Starten Sie auf SystemRescueCD neu und hängen Sie die Windows-Partition ein
  6. Alle Dateien auf der Festplatte in einer anderen Protokolldatei auflisten (weniger als eine Minute)
  7. Setzen Sie die inmutable virtuelle Maschine zurück
  8. Starten Sie Windows neu
  9. Führen Sie ein FOR / F aus, um solche Dateien in einer Admin-Eingabeaufforderung (cmd) zu löschen, und notieren Sie sich die Zeit (weniger als fünf Minuten).

Bitte beachten Sie, dass ich auf Linux SystemRescueCd neu gestartet habe, um alle Dateien aufzulisten, auch die, die von Windows angezeigt wurden, und um eine solche Auflistung so schnell wie möglich durchzuführen (keine Acl-Prüfung usw.).

Beachten Sie auch, dass cleanmgrich nur die Zeit zähle, die nach dem Ende der Suche verstrichen ist (die Suche selbst dauerte ebenfalls mehr als sechs Stunden).

Das Löschen der Dateien ist also kein Problem (das Löschen selbst cleanmgrdauert nur fünf Minuten, dauert aber mehr als acht Stunden).

Das Löschen selbst kann so schnell gehen, da der Host ein Linux ist, dass die Geschwindigkeit nur dadurch verursacht wird, dass Linux alle Schreibvorgänge in die Datei mit fester Größe zwischenspeichert, die als Festplatte auf der virtuellen Maschine (24 GB) verwendet wird, und da ich 64 GB habe RAM und ich lasse zu dem Windows 16GiB, das es weder PAGEFILE.SYS noch SWAP verwenden muss; Außerdem kann Linux die gesamte Datei im RAM speichern (ich habe mit dieser Datei im RAM getestet und die Löschzeiten sind sehr hoch, aber die cleanmgrZeit vergeht nicht).

Ja, wenn ich die virtuelle Festplatte vollständig in den Arbeitsspeicher cleanmgrstelle, sinkt die Zeit nicht, aber wenn ich die Dateien manuell lösche, sinkt die Zeit nur geringfügig (Linux-Schreibcache ist großartig, wenn Sie über 64 GB Arbeitsspeicher verfügen).

Meine Konfiguration für die Tests:

  • Host: Linux 64-Bit-Distribution über eine Hardware, deren Hauptbestandteile AMD Deca Core 5GHz mit 64GiB RAM und ein Sata Raid0-Controller mit zwei WD VelociRaptor HDDs sind (die eine kombinierte sekutive Schreibgeschwindigkeit von nahezu 1GiB / s und ein zufälliges Schreiben von 4K unterstützen können) 300MiB / s); Kosten sind> zehntausend Euro
  • Gast: Windows 10 Home mit 16 GB RAM und einer virtuellen Festplatte mit 24 GB

Test1: Die virtuelle 24-GB-Festplatte befindet sich auf den physischen Festplatten. Test2: Die virtuelle 24-GB-Festplatte befindet sich auf dem Linux-Host-RAM

Ich befürchte, dass cleanmgrdie Windows-Registrierung für jede gelöschte Datei geändert wird (der Zugriff auf die Registrierung ist sehr gering).

Monitore, die ich hatte:

  • CPU-Auslastung auf dem Linux-Host und auf dem Windows-Gast (meist zwischen 0% und 1%, mit Pikes von 5%, nicht mehr)
  • Die Festplattenauslastung auf dem Linux-Host (fast 0%, wenn gearbeitet cleanmgrwurde, mit Spitzen von 2%), der Linux-Festplatten-Cache ist wirklich großartig, um zu vermeiden, dass Daten an die reale Festplatte gesendet werden
  • Festplattenauslastung auf dem Windows-Gast (die meiste Zeit zwischen 2% und 15%, wenn gearbeitet cleanmgrwurde, mit Hechten von 28%)

Ist es also klar cleanmgr, dass Sie eine Menge nicht nachweisbarer Arbeit verrichten, vielleicht Schlafzeiten? Möglicherweise nicht, wenn es sich um eine zugreifende Registrierung handelt, die CPU für diese nicht von Windows-Monitoren gezählt wird, die Festplatte nicht verwendet wird (die Registrierung befindet sich im RAM) usw. Jeder Zugriff auf die Registrierung kann mehr als eine Sekunde dauern. versuchen Sie Ihr eigenes Programm, um auf die Registrierung zuzugreifen, indem Sie die Registrierung öffnen und für jede Aktion schließen, anstatt die HK * öffnen zu lassen ... das ist ein großer Unterschied.

Also wenn cleanmgrja für jede Datei:

  1. Offene Registrierung HK *
  2. Konsultieren Sie die Anforderungen und / oder führen Sie einige Schreibvorgänge in der Registrierung durch
  3. Registry schließen HK *

Es kann bis zu zwei oder drei Sekunden pro Vorgang dauern, und wenn es einen Vorgang pro Datei ausführt, kann es fast eine Stunde pro tausend Dateien dauern ... Meine Anzahl von Dateien betrug nur etwas mehr als 40000 Dateien. 40000 Dateien / 8 Stunden verarbeiten also jede 1,3 Sekunden eine Datei ... auf der anderen Seite dauerte das Löschen in einem Skript (nachdem bekannt war, welche) weniger als fünf Minuten, was ungefähr 133 pro Sekunde entspricht ... eine Hufe Unterschied.

cleanmgrZeit wird also definitiv nicht vom deletionEs-Selbst verursacht! Was macht es sonst noch? Bitte verbessern Sie diese Geschwindigkeit!

Claudio
quelle
1
Dies ist keine Antwort auf die ursprüngliche Frage. Wenn Sie eine neue Frage haben, stellen Sie bitte Ihre eigene Frage (wenn dies hilfreich ist, beziehen Sie sich auf diese Frage für den Kontext).
DavidPostill
Warum haben Sie den Prozessmonitor ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) nicht verwendet, um die Aktionen der Windows-Registrierung usw. zu analysieren?
Cybernard
* i bin wandelbar sp.
StingyJack
2

Eine Möglichkeit, dieses Problem zu beheben und die "Windows Update Cleanup" -Phase von "Disk Cleanup" etwas zu beschleunigen, besteht darin, für die Dauer der sogenannten "Cleanup" -Aktivität vorübergehend eine höhere Priorität für den TiWorker.exe- Prozess festzulegen .

Suchen Sie im Bereich "Details" des Task-ManagersTiWorker.exe nach einem Popup-Menü und klicken Sie mit der rechten Maustaste darauf. Wählen Sie für "Priorität festlegen" die Option "Über Normal". Für mich erhöhte sich die TiWorkerCPU-Aktivität von durchschnittlich 16% auf das volle Potenzial von 25% (auf einem 4-Core-Computer).

Bildbeschreibung hier eingeben

Abgesehen von der winzigen Beschleunigung - und dem möglicherweise guten Erfolgserlebnis - ist nur wenig zu tun, da die Windows Update-Bereinigung anscheinend so codiert ist, dass sie aus unbekannten Gründen Datei für Datei abläuft. die Arbeit insgesamt schrecklich festplattengebunden machen.

Und wissen Sie auch, dass der Prozess höchstwahrscheinlich nicht aufgehängt ist und tatsächlich eines Tages abgeschlossen wird. Um dies zu überprüfen (und sich während dieser lästigen Wartezeit noch weiter abzulenken), können Sie den Abschnitt "Festplattenaktivität" des Ressourcenmonitors überprüfen (führen Sie "resmon.exe" aus).

Glenn Slayden
quelle
Sehr schöne Beschleunigung!
Subjektivist
1

Das Löschen von 20 Dateien mit einer Größe von 5 MB dauert länger als das Löschen von 10 Dateien mit einer Größe von 64 MB. Dies liegt daran, dass das System beim Löschen von Dateien diese nicht wirklich löscht (da der leere Speicherplatz auf einem Laufwerk aus Rauschbits bestehen kann), sondern nur den vorderen Teil überschreibt, der sagt: "Eine Datei beginnt hier", und zwar mit Kauderwelsch Dies und die folgenden Teile werden später gerne überschrieben, wenn Sie den Platz nutzen möchten. In Wirklichkeit ist das Löschen dasselbe wie das andere Schreiben.

Bei der Datenträgerbereinigung handelt es sich in der Regel um VIELE kleine Dateien (Internet-Cookies, temporäre Dateien usw.). Als solches schreibt es viel mehr auf die Festplatte als viele andere Dinge und kann aufgrund des Volumes, das auf die Festplatte geschrieben wird, so viel Zeit wie das Installieren von etwas Neuem in Anspruch nehmen.

liljoshu
quelle
In der ursprünglichen Frage wird speziell nach der Datenträgerbereinigung gefragt.
Liljoshu
0

Ein weiteres Wort der Warnung: Ein Teil dessen, was die Zeit in Anspruch nimmt, ist, dass beim Bereinigen von WinSxS die Datenträgerbereinigung zuerst viele Dateien dekomprimieren muss. Die Festplattenbelegung steigt also tatsächlich für den ersten Teil der Bereinigung!

JonP
quelle
-2

Eine andere Möglichkeit, den Vorgang zu beschleunigen, besteht darin, die Datenträgerbereinigung etwa 5 Minuten lang auszuführen. Hören Sie auf, starten Sie es erneut, und es wird im Handumdrehen durchgehen! Das vorherige De-Fragging oder Optimieren Ihrer HDD / SSD beschleunigt die Dinge. Denken Sie jedoch daran, sie nach der Bereinigung erneut zu de-fraggen / optzieren.

Bluesdigital
quelle
Bitte defragmentieren Sie Ihre SSD nicht, da sie Lese- und Schreibzyklen verschleißt und fast keinen Gewinn hat.
Nordlys Jeger
@ NordlysJeger Windows selbst defragmentiert SSDs von
vornherein