Perché Disk Cleanup richiede così tanto tempo e CPU?


29

Solo una domanda di curiosità. Disk Cleanup ha speso il 100% di uno dei miei core per un bel po 'e continua ancora. Sembra passare molto tempo, in particolare per la pulizia di Windows Update.

Non riesco a capire perché l'eliminazione dei file dovrebbe essere un'attività così intensa. Soprattutto perché ha già speso parecchio tempo a calcolare ciò che poteva cancellare.

Perché Disk Cleanup richiede così tanto tempo e CPU? Cosa fa di così intenso?

Due dei quattro core sono stati esauriti

Risposte:


20

Windows comprime la cartella WinSxS rimuovendo gli aggiornamenti sostituiti e i file di compressione degli annunci che non possono essere disinstallati e che non vengono utilizzati in diff. Ciò richiede molta potenza della CPU ed è per questo che si vede un elevato utilizzo della CPU.

È possibile analizzare l'utilizzo della CPU con xperf / WPA per verificarlo.


Non calcola anche lo spazio risparmiato durante la compressione dei file più vecchi (quelli non aperti di recente)?
Justin Goldberg,

Bel video! Sicuramente controllerà quello strumento: D
Svish

@Svish l'hai verificato? La domanda ha una risposta?
magicandre1981,

4

Posso confermare che Windows Update Cleanup richiede quasi il 100% di utilizzo della CPU, tutto dipende dalla compressione WinSxS e dalla reintegrazione degli aggiornamenti:

Pulizia Windows 100% di utilizzo della CPU

Ho iniziato la pulizia la prima volta dopo l'installazione di Windows e ci sono volute 2 ore per finire il 50%. Dal grafico puoi vedere che al primo lotto di lettura di piccoli file dal disco (secondo grafico) e dopo un utilizzo della CPU del 100% per la compressione, e così via.


2

Giusto per dare fuoco alla domanda, avevo fatto su una macchina virtuale immutabile i seguenti passi:

  1. Avviare un SystemRescueCD e montare la partizione di Windows
  2. Elenca tutti i file sul disco in un file di registro (meno di un minuto)
  3. Riavvia su Windows
  4. Lascia cleanmgrfare il suo lavoro e prendi nota del tempo (più di otto ore)
  5. Riavviare su SystemRescueCD e montare la partizione di Windows
  6. Elenca tutti i file sul disco in un altro file di registro (meno di un minuto)
  7. Ripristina la macchina virtuale immutabile
  8. Riavvia su Windows
  9. Eseguire un FOR / F ... per eliminare tali file in un prompt dei comandi di amministrazione (cmd) e prendere nota del tempo (meno di cinque minuti)

Nota che ho riavviato Linux SystemRescueCd solo per essere in grado di elencare tutti i file, anche quelli cercati da Window e anche per fare tale elenco il più velocemente possibile (nessun controllo acl, ecc.).

Si noti inoltre che cleanmgrconto solo il tempo trascorso al termine della ricerca (la ricerca stessa ha richiesto anche più di sei ore).

Quindi eliminare i file non è il collo del botle (l'eliminazione stessa richiede solo cinque minuti ma cleanmgrrichiede più di otto ore).

L'eliminazione stessa può andare così veloce poiché l'host è un Linux, che la velocità è causata solo dal fatto che Linux memorizza nella cache tutte le scritture nel file di dimensioni fisse che viene utilizzato come disco sulla macchina virtuale (24GiB) e poiché ho 64GiB di RAM e ho lasciato a Windows 16GiB non è necessario utilizzare SWAP né PAGEFILE.SYS; inoltre, Linux può contenere l'intero file su RAM (ho testato con quel file su RAM e i tempi di eliminazione vanno molto, ma il cleanmgrtempo non diminuisce).

Sì, se metto il disco virtuale totalmente su RAM, il cleanmgrtempo non diminuisce, ma se elimino manualmente i file, quel tempo si riduce solo un po '(la cache di scrittura di Linux è grande quando hai 64GiB di RAM).

La mia configurazione per i test:

  • Host: distro Linux a 64 bit su un hardware le cui parti principali sono AMD Deca Core 5GHz con 64GiB di RAM e un controller Sata Raid0 con due HDD WD VelociRaptor (in grado di sostenere una velocità di scrittura secuential combinata di circa 1GiB / se una scrittura casuale 4K di 300MiB / s); il costo è> diecimila euro
  • Ospite: Windows 10 Home con 16GiB di RAM e un disco virtuale di 24GiB

Test1: Avere il disco virtuale 24GiB sui dischi rigidi fisici Test2: Avere il disco virtuale 24GiB sulla RAM dell'host Linux

Temo che cleanmgrstia facendo qualcosa nel registro di Windows per ogni file che elimina (l'accesso al registro è molto basso).

Monitor che ho avuto:

  • Utilizzo della CPU sull'host Linux e sul guest Windows (il più delle volte tra lo 0% e l'1%, con picchi del 5%, non di più)
  • Utilizzo dell'HDD sull'host Linux (vicino allo 0% quando cleanmgrfunzionava, con picchi del 2%), la cache del disco Linux è davvero eccezionale evitando che venga inviato al disco reale
  • Utilizzo dell'HDD sul guest Windows (il più delle volte tra il 2% e il 15% quando cleanmgrfunzionava, con picche del 28%)

Quindi chiaramente cleanmgrsta facendo un sacco di lavoro non rilevabile, forse i periodi di sonno? Forse no, se si sta accedendo al registro, la CPU non viene conteggiata dai monitor di Windows, l'HDD non utilizzato (il registro è su RAM), ecc. E ogni accesso al registro può richiedere più di un secondo. prova il tuo programma per accedere al registro aprendo il registro e chiudendolo per ogni azione, anziché lasciare che l'HK * sia aperto ... è una grande differenza.

Quindi se lo cleanmgrfa per ogni file:

  1. Apri registro HK *
  2. Consultare qualunque necessità e / o scrivere sul registro
  3. Chiudi registro HK *

Possono essere necessari fino a due o tre secondi per operazione e, se esegue un'operazione per file, può richiedere quasi un'ora per ogni mille file ... il mio conteggio dei file era poco più di 40000 file, quindi 40000 file / 8 ore stanno elaborando un file ogni 1,3 secondi ... dall'altro lato, eliminarli su uno script (dopo aver saputo quali) hanno richiesto meno di cinque minuti, ovvero circa 133 al secondo ... un hufe differenza.

Quindi sicuramente il cleanmgrtempo non è causato dal deletionsé stesso! Cos'altro sta facendo? Per favore M $ migliora quella velocità!


1
Questa non è una risposta alla domanda originale. Se hai una nuova domanda, ti preghiamo di porre la tua domanda (facendo riferimento a questa per un contesto se aiuta).
DavidPostill

Perché non hai utilizzato il monitor di processo ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) per analizzare le azioni del registro di Windows, ecc.?
cybernard,

* i m mutable sp.
StingyJack

2

Un modo per mitigare questo problema e accelerare un po 'la fase di "Pulizia disco di Windows Update" di "Pulizia disco" è quello di impostare temporaneamente una priorità più alta per il processo TiWorker.exe per la durata della cosiddetta attività di "pulizia".

Nel riquadro "Dettagli" di Task Manager , trova TiWorker.exee fai clic con il pulsante destro del mouse per visualizzare un menu a comparsa. Per "Imposta priorità", "scegli" Superiore al normale ". Per me, ciò ha aumentato l' TiWorkerattività della CPU - dalla media di circa il 16% - fino al suo pieno potenziale del 25% (su una macchina a 4 core).

inserisci qui la descrizione dell'immagine

A parte la minuscola accelerazione (e forse la buona sensazione di realizzazione) ciò fornisce, c'è poco che si può fare poiché apparentemente "Windows Update Cleanup" è codificato in un modo che, per qualche ragione sconosciuta, procede file per file, rendendo il lavoro complessivo orribilmente legato al disco.

Inoltre, sappi che molto probabilmente il processo non viene sospeso e un giorno si completerà davvero. Per verificarlo (e per distrarti ulteriormente durante questo fastidioso tempo di attesa), puoi controllare la sezione "Attività disco" di Resource Monitor (esegui "resmon.exe").


Molto bella la velocità!
soggettivista il

1

L'eliminazione di 20 file di dimensioni di 5 MB richiederà più tempo per l'eliminazione di 10 file di dimensioni di 64 MB. Questo perché quando il sistema elimina i file, non realmente eliminarli (come lo spazio vuoto su un disco può essere fatto di "rumore" bit), ma solo sovrascrive la parte anteriore che dice: "Un file inizia da qui" con parole senza senso e poi sovrascriverà felicemente quella e le parti seguenti in seguito quando si desidera utilizzare lo spazio. In realtà, cancellare è uguale a scrivere altrimenti.

La cosa con la pulizia del disco, è che le cose che pulisce sono di solito MOLTI file di piccole dimensioni (cookie di Internet, file temporanei, ecc.). In quanto tale, scrive molto di più sul disco di molte altre cose e può richiedere tanto tempo quanto installare qualcosa di nuovo, a causa del volume che viene scritto sul disco.


La domanda originale pone in particolare domande sulla pulizia del disco.
liljoshu,

0

Un'altra avvertenza: parte di ciò che richiede tempo è che, durante la pulizia di WinSxS, Disk Clean-up deve prima decomprimere molti file. Quindi l'utilizzo del disco in realtà aumenta per la prima parte della pulizia!


-2

Un altro modo per accelerare il processo è eseguire la pulizia del disco per circa 5 minuti. Smettila, poi riavviala e si muoverà in un batter d'occhio! Inoltre, la deframmentazione o l'ottimizzazione dell'HDD / SSD in anticipo accelererà le cose, ricorda di de-frammentare / Optz di nuovo dopo la pulizia.


Si prega di non deframmentare il SSD che consuma cicli di lettura e scrittura e non ha quasi alcun guadagno.
Nordlys Jeger,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.