Por que o Disk Cleanup leva tanto tempo e cpu?

20

Apenas uma pergunta de curiosidade. A Limpeza de Disco tem gasto 100% de um dos meus núcleos por um bom tempo e ainda continua. Parece estar gastando muito tempo, especialmente na Limpeza do Windows Update.

Não consigo entender por que excluir arquivos deve ser uma atividade tão intensa. Especialmente porque já gastou bastante tempo calculando o que poderia deletar.

Por que o Disk Cleanup leva tanto tempo e CPU? O que isso faz tão intensivo?

    
por Svish 02.12.2014 / 14:46

7 respostas

16

O Windows compacta a pasta WinSxS removendo as atualizações substituídas e compactando os arquivos que não podem ser desinstalados e que não são usados em diffs. Isso demanda muito poder da CPU e é por isso que você vê um alto uso da CPU.

Você pode analisar o uso da CPU com xperf / WPA para verificar isso.

    
por 02.12.2014 / 18:14
4

Posso confirmar que o Windows Update Cleanup usa quase 100% do uso da CPU, é tudo sobre compactação WinSxS e reintegração de atualizações:

Comecei a limpeza pela primeira vez depois da instalação do Windows e demorou 2 horas para terminar 50%. Do gráfico você pode ver que, no primeiro lote de leitura de pequenos arquivos do disco (segundo gráfico), e após 100% de uso da CPU para compactação, e assim por diante.

    
por 04.12.2015 / 21:05
2

Apenas para colocar fogo na questão, eu fiz em uma máquina virtual inmutável os próximos passos:

  1. Inicialize um SystemRescueCD e monte a partição do Windows
  2. Listar todos os arquivos no disco em um arquivo de log (menos de um minuto)
  3. Reinicie no Windows
  4. Deixe o cleanmgr fazer seu trabalho e anote o tempo (mais de oito horas)
  5. Reinicie no SystemRescueCD e monte a partição do Windows
  6. Listar todos os arquivos no disco para outro arquivo de log (menos de um minuto)
  7. Redefinir a máquina virtual inmutável
  8. Reinicie no Windows
  9. Faça um FOR / F ... para excluir esses arquivos em um prompt de comando do administrador (cmd) e anote o tempo (menos de cinco minutos)

Por favor, note que eu reiniciei no Linux SystemRescueCd apenas para poder listar todos os arquivos, também os que são visualizados pelo Windows e também para listar o mais rápido possível (sem verificação de acl, etc).

Observe também que, em cleanmgr i, conta apenas o tempo após o término da pesquisa (a pesquisa em si também leva mais de seis horas).

Portanto, excluir os arquivos não é o botle neck (a exclusão em si só precisa de cinco minutos, mas cleanmgr leva mais de oito horas).

O delete self pode ir tão rápido, já que o host é um Linux, que a velocidade é causada apenas porque o Linux armazena em cache todas as gravações no arquivo de tamanho fixo usado como disco na máquina virtual (24GiB) e tenho 64GiB de RAM e deixo para o Windows 16GiB ele não precisa usar SWAP nem PAGEFILE.SYS; Além disso, o Linux pode conter o arquivo completo na RAM (eu testei com esse arquivo na RAM e os tempos de exclusão foram muito reduzidos, mas cleanmgr time não caiu).

Sim, se eu colocar o disco virtual totalmente na RAM, cleanmgr tempo não cai, mas se eu manualmente excluir os arquivos, esse tempo cai um pouco (cache de gravação do Linux é ótimo quando você tem 64GiB de RAM isso.

Minha configuração para os testes:

  • Anfitrião: Distribuição de 64bits do Linux sobre um hardware cujas principais partes são o AMD Deca Core 5GHz com 64GiB de RAM e um controlador Sata Raid0 com dois WD VelociRaptor HDDs (capazes de sustentar uma velocidade de gravação secundária próxima de 1GiB / se 4K gravação aleatória de 300MiB / s); custo é > dez mil euros
  • Convidado: Windows 10 Home com 16GiB de RAM e um disco virtual de 24GiB

Test1: Tendo o disco virtual de 24GiB nos discos rígidos físicos Test2: Tendo o disco virtual 24GiB na RAM do host Linux

Eu tenho medo que cleanmgr esteja fazendo algo no registro do Windows por cada arquivo excluído (acessar o registro é muito baixo).

Monitores que eu tinha:

  • Uso da CPU no host Linux e no Windows Guest (a maior parte do tempo entre 0% e 1%, com piques de 5%, não mais)
  • Uso de HDD no host Linux (perto de 0% quando cleanmgr estava funcionando, com picos de 2%), o cache de disco do Linux é realmente ótimo evitando que o dato seja enviado para o disco real
  • Uso de HDD no convidado do Windows (a maior parte do tempo entre 2% e 15% quando cleanmgr estava funcionando, com piques de 28%)

Então, claramente, cleanmgr está fazendo muito trabalho indetectável, talvez horas de sono? Talvez não, se é cadastro, a CPU para isso não é contada por monitores do Windows, HDD em que não é usado (registro está em RAM), etc., e cada acesso ao registro pode levar mais de um segundo. tente seu próprio programa para acessar o registro abrindo o registro e fechando-o para cada ação, em vez de deixar o HK * aberto ... é uma grande diferença.

Então, se cleanmgr for para cada arquivo:

  1. Abrir registro HK *
  2. Consultar quaisquer necessidades e / ou fazer algumas gravações no registro
  3. Fechar registro HK *

Pode demorar até dois ou três segundos por operação, e se fizer uma operação por arquivo, pode levar cerca de uma hora por cada mil arquivos ... minha contagem de arquivos era um pouco mais do que 40000 arquivos, então 40000 arquivos / 8 horas está processando um arquivo a cada 1,3 segundo ... do outro lado, deletá-los em um script (depois de saber quais) demorou menos de cinco minutos, ou seja, apagando cerca de 133 por segundo. uma grande diferença.

Definitivamente cleanmgr time não é causado pelo deletion auto! O que mais está fazendo? Por favor M $ melhore essa velocidade!

    
por 27.02.2017 / 10:27
1

A exclusão de 20 arquivos de 5 MB de tamanho levará mais tempo para excluir do que 10 arquivos de 64 MB de tamanho. Isso ocorre porque quando o sistema apaga arquivos, ele não realmente os elimina (como o espaço vazio em uma unidade pode ser feito de bits "ruído"), mas sobrescreve a parte frontal que diz: "Um arquivo começa aqui "com rabiscos e, em seguida, ele vai alegremente substituir isso e as partes a seguir mais tarde, quando você quiser usar o espaço. Na realidade, excluir é o mesmo que escrever de outra forma.

A coisa com limpeza de disco, é que as coisas que limpa geralmente são MUITOS arquivos pequenos (cookies da internet, arquivos temporários, etc.). Como tal, ele grava muito mais no disco do que muitas outras coisas, e pode levar tanto tempo quanto instalar algo novo, devido ao volume ser gravado no disco.

    
por 02.12.2014 / 14:53
1

Uma maneira de atenuar esse problema e acelerar a fase de "Limpeza do Windows Update" de "Limpeza de disco" é definir temporariamente uma prioridade mais alta para o processo TiWorker.exe durante a duração de a chamada atividade de 'limpeza'.

No painel Gerenciador de tarefas 'Detalhes', localize TiWorker.exe e clique com o botão direito do mouse para mostrar um menu pop-up. Para "Set Priority", escolha "Above Normal". Para mim, isso aumentou a atividade da CPU TiWorker - da média em torno de 16% - até seu potencial máximo de 25% (em uma máquina de 4 núcleos). / p>

Alémdaaceleraçãominúscula-epossivelmenteboasensaçãoderealização-issooferece,hápoucoquepodeserfeitojáqueaparentemente"Windows Update Cleanup" é codificado de uma forma que, por alguma razão desconhecida, prossegue file-by -file, fazendo o trabalho geral terrivelmente disco-bound.

E também, saiba que o processo provavelmente não está pendurado e, de fato, será concluído algum dia. Para verificar isso (e para se distrair ainda mais durante este tempo de espera irritante), você pode verificar a seção 'Atividade de Disco' do Monitor de Recursos (execute "resmon.exe").

    
por 11.04.2018 / 02:55
0

Outra palavra de aviso: parte do que ocupa o tempo é que, ao limpar o WinSxS, a Limpeza de Disco precisa primeiro descompactar muitos arquivos. Portanto, o uso do disco aumenta na primeira parte da limpeza!

    
por 24.09.2018 / 14:06
-1

Outra maneira de acelerar o processo é executar a Limpeza de Disco por cerca de 5 min. Pare com isso, então reinicie-o, e ele vai passar em um instante! Além disso, De-Fragging ou Otimizando seu HDD / SSD antecipadamente acelerará as coisas, apenas lembre-se de defrag / Optz novamente após a limpeza.

    
por 06.11.2018 / 11:35