Por que a limpeza de disco leva tanto tempo e CPU?


29

Apenas uma pergunta de curiosidade. A Limpeza de disco gasta 100% de um dos meus núcleos há um bom tempo e continua funcionando. Parece estar gastando muito tempo, especialmente na Limpeza do Windows Update.

Não consigo entender por que a exclusão de arquivos deve ser uma atividade tão intensa. Especialmente porque ele já passou bastante tempo calculando o que poderia excluir.

Por que a limpeza de disco leva tanto tempo e CPU? O que faz isso é tão intensivo?

Dois dos quatro núcleos no máximo

Respostas:


20

O Windows compacta a pasta WinSxS removendo os arquivos de compactação de anúncios de atualizações substituídas que não podem ser desinstalados e que não são usados ​​em diffs. Isso requer muita energia 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.


Também não calcula o espaço economizado ao compactar os arquivos mais antigos (aqueles que não foram abertos recentemente)?
Justin Goldberg

Video legal! Definitivamente verificará nessa ferramenta: D
Svish

@Svish você verificou isso? A pergunta está respondida?
magicandre1981

4

Posso confirmar que a Limpeza de Atualizações do Windows leva quase 100% do uso da CPU, trata-se da compactação e reintegração de atualizações do WinSxS:

Limpeza do Windows: 100% de uso da CPU

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


2

Apenas para colocar fogo na questão, eu havia feito em uma máquina virtual imutá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. Vamos cleanmgrfazer o seu trabalho e tomar nota do 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 imutável
  8. Reinicie no Windows
  9. Execute um FOR / F ... para excluir esses arquivos em um prompt de comando do administrador (cmd) e anote o tempo (menos de cinco minutos)

Observe que eu reiniciei no Linux SystemRescueCd apenas para poder listar todos os arquivos, também os que foram vistos pelo Windows, e também para fazer essa listagem o mais rápido possível (sem verificação de ACL, etc.).

Observe também que cleanmgrsó conto 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 gargalo (a exclusão em si só precisa de cinco minutos, mas cleanmgrleva mais de oito horas).

A exclusão por si só pode ser tão rápida, 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 que é usado como disco na máquina virtual (24GiB) e desde que eu tenha 64GiB de RAM e eu deixo para o Windows 16GiB ele não precisa usar SWAP nem PAGEFILE.SYS; Além disso, o Linux pode armazenar o arquivo completo na RAM (eu testei com esse arquivo na RAM e os tempos de exclusão são muitos, mas o cleanmgrtempo não diminui).

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

Minha configuração para os testes:

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

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

Receio que cleanmgresteja 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 (na maioria das vezes entre 0% e 1%, com piques de 5%, não mais)
  • Uso de HDD no host Linux (quase 0% quando cleanmgrestava trabalhando, com piques 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 (na maioria das vezes entre 2% e 15% quando cleanmgrestava trabalhando, com picos de 28%)

Tão claramente cleanmgrestá fazendo muito trabalho indetectável, talvez horas de sono? Talvez não, se estiver acessando o registro, a CPU não é contada pelos monitores do Windows, o HDD não é usado (o registro está na RAM), etc., e cada acesso ao registro pode levar mais de um segundo. tente seu próprio programa para acessar o registro abrindo-o e fechando-o a cada ação versus deixando o HK * aberto ... é uma grande diferença.

Então, se cleanmgrfaz para cada arquivo:

  1. Registro aberto HK *
  2. Consulte as necessidades e / ou faça algumas gravações no registro
  3. Fechar registro HK *

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

Então, definitivamente, o cleanmgrtempo não é causado pelo deletionpróprio eu! O que mais está fazendo? Por favor, M $ melhore essa velocidade!


1
Esta não é uma resposta para a pergunta original. Se você tiver uma nova pergunta, faça sua própria pergunta (fazendo referência a esta para contextualizar, se ajudar).
DavidPostill

Por que você não usou o monitor de processo ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) para analisar as ações do registro do Windows, etc.?
cybernard

* i m sp mutável.
StingyJack

2

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

No painel 'Detalhes' do Gerenciador de tarefas , localize TiWorker.exee clique com o botão direito do mouse para mostrar um menu pop-up. Para "Definir prioridade", escolha "Acima do normal". Para mim, isso aumentou a TiWorkeratividade da CPU - de uma média de 16% - até seu potencial total de 25% (em uma máquina de 4 núcleos).

insira a descrição da imagem aqui

Além da minúscula aceleração - e possivelmente da boa sensação de realização -, isso fornece muito pouco, pois aparentemente a "Limpeza do Windows Update" é codificada de uma maneira que, por algum motivo desconhecido, prossegue arquivo por arquivo, tornando o trabalho geral horrivelmente ligado ao disco.

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


Muito bom acelerar!
subjectivist

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 exclui os arquivos, ele não realmente excluí-los (como espaço vazio em uma unidade pode ser feita de "ruído" bits), mas apenas substitui a parte da frente que diz: "Um arquivo começa aqui" com rabiscos e depois substituirá felizmente isso e as partes a seguir mais tarde, quando você desejar usar o espaço. Na realidade, excluir é o mesmo que escrever de outra forma.

O que ocorre com a limpeza de disco é o que ele 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 que está sendo gravado no disco.


A pergunta original pergunta especificamente sobre a Limpeza de disco.
liljoshu

0

Outra palavra de advertência: parte do que leva tempo é que, ao limpar o WinSxS, a Limpeza de disco deve primeiro descompactar muitos arquivos. Portanto, o uso do disco aumenta na primeira parte da limpeza!


-2

Outra maneira de acelerar o processo é executar a Limpeza de Disco por cerca de 5 min. Pare e, em seguida, reinicie-o, e ele passará rapidamente! Além disso, a desagregação ou otimização do seu HDD / SSD antecipadamente acelerará as coisas, lembre-se de desagregar / Optz novamente após a limpeza.


Por favor, não desfragmente o seu SSD, ele gasta ciclos de leitura e gravação e quase não tem ganho.
Nordlys Jeger

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.