Pourquoi le nettoyage de disque prend-il tant de temps et de ressources processeur?

27

Juste une question de curiosité. Le nettoyage de disque a dépensé 100% de l’un de mes cœurs pendant un bon bout de temps et continue. Semble passer beaucoup de temps en particulier sur Windows Update Cleanup.

Je ne comprends pas trop pourquoi la suppression de fichiers devrait être une activité aussi intensive. D'autant plus qu'il a déjà passé pas mal de temps à calculer ce qu'il pourrait supprimer.

Pourquoi le nettoyage de disque prend-il tant de temps et de ressources processeur? Qu'est-ce qu'il fait qui est si intensif?

Deux des quatre noyaux ont atteint leur maximum

Svish
la source

Réponses:

20

Windows compresse le dossier WinSxS en supprimant les mises à jour remplacées et les fichiers de compression qui ne peuvent pas être désinstallés et qui ne sont pas utilisés dans diff. Cela prend beaucoup de puissance de processeur et c'est pourquoi vous voyez une utilisation élevée du processeur.

Vous pouvez analyser l'utilisation du processeur avec xperf / WPA pour le vérifier.

magicandre1981
la source
Ne calcule-t-il pas également l'espace économisé lors de la compression des fichiers les plus anciens (ceux qui n'ont pas été ouverts récemment)?
Justin Goldberg
Bonne vidéo! Va certainement vérifier dans cet outil: D
Svish
@Svish l'avez-vous vérifié? A-t-on répondu à la question?
magicandre1981
4

Je peux confirmer que Windows Updates Cleanup nécessite presque 100% d’utilisation du processeur. Il s’agit de la compression WinSxS et de la réintégration des mises à jour:

Windows Cleanup 100% d'utilisation du processeur

J'ai commencé le nettoyage pour la première fois après l'installation de Windows et il m'a fallu 2 heures pour terminer à 50%. Vous pouvez voir sur le graphique que, dans un premier temps, beaucoup de lecture de petits fichiers sur le disque (deuxième graphique), et après une utilisation de 100% du processeur pour la compression, etc.

Arunas Bartisius
la source
2

Juste pour mettre le feu à la question, j'avais fait sur une machine virtuelle immuable les prochaines étapes:

  1. Démarrer un SystemRescueCD et monter la partition Windows
  2. Lister tous les fichiers sur le disque dans un fichier journal (moins d'une minute)
  3. Redémarrer sur Windows
  4. Laisse cleanmgrfaire son travail et prend note de l'heure (plus de huit heures)
  5. Redémarrez sur SystemRescueCD et montez la partition Windows
  6. Répertorie tous les fichiers du disque dans un autre fichier journal (moins d'une minute)
  7. Réinitialiser la machine virtuelle immuable
  8. Redémarrer sur Windows
  9. Effectuez un FOR / F ... pour supprimer de tels fichiers dans une invite de commande administrateur (cmd) et prenez note de l'heure (moins de cinq minutes)

Veuillez noter que j'ai redémarré sur Linux SystemRescueCd juste pour pouvoir lister tous les fichiers, y compris ceux consultés par Window, ainsi que pour faire cette liste aussi rapidement que possible (pas de vérification, etc.).

Veuillez également noter que cleanmgrje ne compte que le temps après la fin de la recherche (la recherche elle-même a également pris plus de six heures).

La suppression des fichiers n’est donc pas un gâchis (la suppression elle-même ne nécessite que cinq minutes mais cleanmgrprend plus de huit heures).

Le supprimer lui-même peut aller si vite que l'hôte est un Linux, cette vitesse est due au fait que Linux met en cache toutes les écritures dans le fichier de taille fixe utilisé comme disque sur la machine virtuelle (24 Go), et depuis j'ai 64 Go de La RAM et moi laissons au Windows 16GiB il n’a pas besoin d’utiliser SWAP ni PAGEFILE.SYS; de plus, Linux peut contenir le fichier complet dans la RAM (j’ai testé ce fichier dans la RAM et les temps de suppression sont très fréquents, mais le cleanmgrtemps ne s’écoule pas).

Oui, si je mets le disque virtuel entièrement en RAM, le cleanmgrtemps ne baisse pas, mais si je supprime les fichiers, ce temps diminue un peu (le cache en écriture Linux est génial lorsque vous disposez de 64 Go de RAM).

Ma configuration pour les tests:

  • Hôte: Linux 64 bits distribuée sur un matériel dont les pièces principales sont AMD Deca Core 5 GHz avec 64 Go de RAM, un contrôleur Sata Raid0 avec deux disques durs WD VelociRaptor (capable de maintenir une vitesse d’écriture combinée proche de 1 Go / s et une écriture aléatoire de 4 Ko) 300 Mo / s); le coût est> dix mille euros
  • Invité: Windows 10 Home avec 16 Go de RAM et un disque virtuel de 24 Go

Test1: Disque virtuel 24GiB sur les disques durs physiques Test2: Disque virtuel 24GiB sur la RAM de l'hôte Linux

Je crains que cela cleanmgrfasse quelque chose sur le registre Windows pour chaque fichier supprimé (l'accès au registre est très faible).

Les moniteurs que j'avais

  • Utilisation du processeur sur l'hôte Linux et sur l'invité Windows (le temps entre 0% et 1%, avec des piques de 5%, pas plus)
  • Utilisation du disque dur sur l'hôte Linux (près de 0% quand cleanmgrfonctionnait, avec des piques de 2%), le cache disque Linux est vraiment génial, évitant que des données soient envoyées sur un disque réel
  • Utilisation du disque dur sur l'invité Windows (la plupart du temps entre 2% et 15% quand cleanmgrfonctionnait, avec des piques de 28%)

Alors, clairement, cleanmgrfait-il beaucoup de travail indétectable, peut-être des heures de sommeil? Peut-être pas, s’il s’agit d’un registre, le processeur correspondant n’est pas compté par les moniteurs Windows, le disque dur n’est pas utilisé (le registre est sur RAM), etc., et chaque accès au registre peut durer plus d’une seconde. Essayez votre propre programme pour accéder au registre en l’ouvrant et en le fermant à chaque action, au lieu de laisser HK * ouvert… c’est une grande différence.

Donc, si cleanmgrpour chaque fichier:

  1. Registre ouvert HK *
  2. Consultez ce dont vous avez besoin et / ou écrivez sur le registre
  3. Fermer le registre HK *

Cela peut prendre jusqu'à deux ou trois secondes par opération, et si vous effectuez une opération par fichier, cela peut prendre près d'une heure pour chaque millier de fichiers ... mon nombre de fichiers ne représentait qu'un peu plus de 40000 fichiers, donc 40000 fichiers / 8 heures traitent un fichier toutes les 1,3 secondes ... de l’autre côté, leur suppression sur un script (après avoir déterminé lesquelles) a pris moins de cinq minutes, soit environ 133 secondes par seconde ... différence.

Le cleanmgrtemps n'est donc certainement pas causé par le deletionsoi! Que fait-il d'autre? S'il vous plaît M $ améliorer cette vitesse!

Claudio
la source
1
Ce n'est pas une réponse à la question initiale. Si vous avez une nouvelle question, posez votre propre question (en référant celle-ci à un contexte, si cela peut vous aider).
DavidPostill
Pourquoi n'avez-vous pas utilisé le moniteur de processus ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) pour analyser les actions du registre Windows, etc.?
cybernard
* je suis mutable sp.
StingyJack
2

Une façon d'atténuer ce problème et d'accélérer un peu la phase "Nettoyage de Windows Update" de "Nettoyage de disque" consiste à définir temporairement une priorité plus élevée pour le processus TiWorker.exe pendant la durée de l'activité dite de "nettoyage".

Dans le volet "Détails" du gestionnaire de tâches , recherchez TiWorker.exeun menu contextuel et faites un clic droit dessus. Pour "Définir la priorité", choisissez "Au-dessus de la normale". Pour moi, l' TiWorkeractivité du processeur a été augmentée , passant d'environ 16% en moyenne à un potentiel maximum de 25% (sur une machine à 4 cœurs).

entrez la description de l'image ici

Mis à part l'accélération minuscule - et peut-être un bon sentiment d'accomplissement - cela fournit, il y a bien peu à faire car apparemment "Windows Update Cleanup" est codé de manière à ce que, pour une raison inconnue, on procède fichier par fichier, rendant le travail global horriblement lié au disque.

De plus, sachez que le processus n’est probablement pas suspendu et qu’il sera effectivement achevé un jour. Pour le vérifier (et pour vous distraire davantage pendant ce temps d'attente fastidieux ), vous pouvez consulter la section "Activité du disque" de Resource Monitor (exécutez "resmon.exe").

Glenn Slayden
la source
Très belle rapidité!
subjectiviste le
1

La suppression de 20 fichiers de 5 Mo nécessitera plus de temps que celle de 10 fichiers de 64 Mo. En effet, lorsque le système supprime des fichiers, il ne les supprime pas vraiment (car un espace vide sur un lecteur peut être constitué de bits "noise"), mais écrase simplement la partie avant qui dit "Un fichier commence ici" avec du charabia, puis vous écraserez cela plus tard, ainsi que les parties suivantes, lorsque vous souhaiterez utiliser cet espace. En réalité, supprimer équivaut à écrire autrement.

Le problème avec le nettoyage de disque, ce qu’il nettoie, c’est généralement BEAUCOUP de petits fichiers (cookies Internet, fichiers temporaires, etc.). En tant que tel, l'écriture sur le disque est plus importante que beaucoup d'autres choses et peut prendre autant de temps que l'installation de nouvelles fonctionnalités, en raison de l'écriture du volume sur le disque.

Liljoshu
la source
La question initiale concerne spécifiquement le nettoyage de disque.
liljoshu
0

Autre avertissement: une partie de ce qui prend du temps est que, lors du nettoyage de WinSxS, le nettoyage de disque doit d’abord décompresser un grand nombre de fichiers. Donc, l'utilisation du disque augmente réellement pendant la première partie du nettoyage!

JonP
la source
-1

Une autre façon d’accélérer le processus consiste à exécuter le nettoyage du disque pendant environ 5 minutes. Arrêtez-le, puis redémarrez-le, et tout ira très vite! En outre, le défragmentation ou l'optimisation préalable de votre disque dur / SSD accélérera les choses. N'oubliez pas de le défrag / Optz à nouveau après le nettoyage.

Bluesdigital
la source
S'il vous plaît, ne défragmentez pas votre disque SSD, il porte les cycles de lecture et d'écriture et n'a aucun gain.
Nordlys Jeger