web-dev-qa-db-fra.com

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

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 de fonctionner. 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?

Two of four cores maxed out

27
Svish

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 diffs. 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.

20
magicandre1981

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% CPU usage

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.

4
Arunas Bartisius

Une façon d’atténuer ce problème et d’accélérer un peu la phase "Nettoyage de la mise à jour Windows" du processus "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 voletGestionnaire des tâches"Détails", recherchez TiWorker.exe et cliquez avec le bouton droit de la souris pour afficher un menu contextuel. Pour "Définir la priorité", choisissez "Au-dessus de la normale". Pour moi, l'activité de la CPU TiWorker a été augmentée, passant d'environ 16% en moyenne à son plein potentiel de 25% (sur une machine à 4 cœurs).

enter image description here

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.

Et aussi, sachez que le processus est très probablement pas bloqué et qu’il sera effectivement terminé 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' deResource Monitor(exécutez "resmon.exe" ).

2
Glenn Slayden

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. Laissez cleanmgr faire son travail et notez 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 l'invite de la commande admin (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, sur cleanmgr, je ne compte que le temps écoulé 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 cleanmgr prend plus de huit heures).

Le supprimer lui-même peut aller si vite que l'hôte est un ordinateur 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 RAM et je laisse à Windows 16GiB ne pas utiliser SWAP ni PAGEFILE.SYS; de plus, Linux peut contenir le fichier complet sur RAM (j’ai testé ce fichier sur RAM et supprimer les temps nécessaires, mais cleanmgr fois ne tombe pas).

Oui, si je mets le disque virtuel entièrement sur la RAM, le temps cleanmgr ne baisse pas, mais si je supprime les fichiers, ce temps diminue un peu (le cache en écriture Linux est génial quand vous avez 64GiB de RAM dessus).

Ma configuration pour les tests:

  • Hôte: Linux 64 bits distribuée sur un ordinateur dont les pièces principales sont des disques AMD Deca Core 5 GHz avec 64 Go à RAM et un contrôleur Sata Raid0 avec deux disques durs WD VelociRaptor (capables de supporter une vitesse d'écriture secuentielle combinée voisine de 1 Go/s et une écriture aléatoire 4K de 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: avoir le disque virtuel 24GiB sur les disques durs physiques Test2: avoir le disque virtuel 24GiB sur la RAM de l'hôte Linux

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

Moniteurs j'avais:

  • Utilisation de l'UC sur l'hôte Linux et sur l'invité Windows (la plupart du temps entre 0% et 1%, avec des piques de 5%, sans plus)
  • Utilisation du disque dur sur l'hôte Linux (près de 0% lorsque cleanmgr fonctionnait, avec des piques de 2%), le cache disque Linux est vraiment génial, car il évite 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% lorsque cleanmgr fonctionnait, avec des piques de 28%)

Alors clairement cleanmgr fait beaucoup de travail indétectable, peut-être même 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 cleanmgr le fait pour 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.

Donc, le temps cleanmgr n'est définitivement pas causé par le deletion il-même! Que fait-il d'autre? S'il vous plaît M $ améliorer cette vitesse!

2
Claudio

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 réellement (un espace vide sur un lecteur peut être constitué de bits "parasites"), mais simplement écrase la partie avant qui dit: "Un fichier commence ici" avec un charabia et ensuite, elle écrasera heureusement celle-ci et les parties suivantes plus tard, lorsque vous souhaitez utiliser l'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.

1
liljoshu

Autre mot d'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!

0
JonP