¿Por qué Disk Cleanup toma tanto tiempo y CPU?

29

Solo una pregunta de curiosidad. Disk Cleanup ha estado gastando el 100% de uno de mis núcleos durante bastante tiempo y sigue funcionando. Parece estar pasando mucho tiempo, especialmente en Windows Update Cleanup.

No puedo entender por qué eliminar archivos debería ser una actividad tan intensa. Especialmente porque ya pasó mucho tiempo calculando lo que podría eliminar.

¿Por qué Disk Cleanup toma tanto tiempo y CPU? ¿Qué hace que sea tan intenso?

Dos de cuatro núcleos al máximo

Svish
fuente

Respuestas:

20

Windows comprime la carpeta WinSxS mediante la eliminación de actualizaciones reemplazadas y archivos de compresión que no se pueden desinstalar y que no se utilizan en diffs. Esto requiere mucha potencia de la CPU y es por eso que se ve un uso elevado de la CPU.

Puede analizar el uso de la CPU con xperf / WPA para verificar esto.

magicandre1981
fuente
¿No calcula también el espacio ahorrado al comprimir los archivos más antiguos (los que no se abrieron recientemente)?
Justin Goldberg
¡Buen vídeo! Definitivamente verificará esa herramienta: D
Svish
@Svish, ¿has verificado esto? ¿Se responde la pregunta?
magicandre1981
4

Puedo confirmar que Windows Updates Cleanup requiere casi el 100% de uso de la CPU, se trata de la compresión WinSxS y la reintegración de las actualizaciones:

Limpieza de Windows 100% de uso de CPU

Comencé la limpieza la primera vez después de la instalación de Windows y tardé 2 horas en terminar el 50%. En el gráfico se puede ver que en la primera lectura de archivos pequeños del disco (segundo gráfico), y después del 100% de uso de la CPU para la compresión, y así sucesivamente.

Arunas Bartisius
fuente
2

Solo para encender la pregunta, había hecho en una máquina virtual inmutable los siguientes pasos:

  1. Inicie un SystemRescueCD y monte la partición de Windows
  2. Liste todos los archivos en el disco en un archivo de registro (menos de un minuto)
  3. Reiniciar en Windows
  4. Vamos a cleanmgrhacer su trabajo y tomar nota de la hora (más de ocho horas)
  5. Reinicie en SystemRescueCD y monte la partición de Windows
  6. Listar todos los archivos en el disco a otro archivo de registro (menos de un minuto)
  7. Restablecer la máquina virtual inmutable
  8. Reiniciar en Windows
  9. Haga un FOR / F ... para eliminar dichos archivos en un símbolo del sistema de administración (cmd) y tome nota del tiempo (menos de cinco minutos)

Tenga en cuenta que reinicié en Linux SystemRescueCd solo para poder enumerar todos los archivos, también los que Windows buscó y también para hacer esa lista lo más rápido posible (sin verificación de acl, etc.).

También tenga en cuenta que cleanmgrsolo cuento el tiempo después de que finaliza la búsqueda (la búsqueda en sí también lleva más de seis horas).

Por lo tanto, eliminar los archivos no es el cuello de la botella (la eliminación en sí misma solo necesita cinco minutos, pero cleanmgrlleva más de ocho horas).

La eliminación en sí misma puede ir tan rápido ya que el host es un Linux, que la velocidad se debe a que Linux almacena en caché todas las escrituras en el archivo de tamaño fijo que se utiliza como disco en la máquina virtual (24GiB), y dado que tengo 64GiB de RAM y dejo que Windows 16GiB no necesite usar SWAP ni PAGEFILE.SYS; Además, Linux puede mantener el archivo completo en la RAM (lo probé con ese archivo en la RAM y los tiempos de eliminación se realizan mucho, pero el cleanmgrtiempo no se cae).

Sí, si pongo el disco virtual totalmente en RAM, el cleanmgrtiempo no se reduce, pero si elimino los archivos, ese tiempo se reduce un poco (el caché de escritura de Linux es excelente cuando tienes 64GiB de RAM).

Mi configuración para las pruebas:

  • Host: distribución de 64 bits de Linux sobre un hardware cuyas partes principales son AMD Deca Core 5GHz con 64GiB de RAM y un controlador Sata Raid0 con dos discos duros WD VelociRaptor (capaces de mantener una velocidad de escritura secuencial combinada de cerca de 1GiB / sy una escritura aleatoria de 4K 300MiB / s); el costo es> diez mil euros
  • Invitado: Windows 10 Home con 16GiB de RAM y un disco virtual de 24GiB

Prueba1: Tener el disco virtual de 24GiB en los discos duros físicos Prueba2: Tener el disco virtual de 24GiB en la RAM del host Linux

Me temo que cleanmgrestá haciendo algo en el registro de Windows por cada archivo que elimina (el acceso al registro es muy bajo).

Monitores que tuve:

  • Uso de CPU en el host de Linux y en el Guest de Windows (la mayoría del tiempo entre 0% y 1%, con picos del 5%, no más)
  • El uso de HDD en el host de Linux (cerca del 0% cuando cleanmgrfuncionaba, con picos del 2%), el caché de disco de Linux es realmente excelente para evitar que se envíe el dato al disco real
  • Uso de HDD en el invitado de Windows (la mayoría del tiempo entre 2% y 15% cuando cleanmgrestaba trabajando, con picos del 28%)

Claramente, ¿ cleanmgrestá haciendo mucho trabajo indetectable, tal vez horas de sueño? Tal vez no, si está accediendo al registro, la CPU para eso no es contada por los monitores de Windows, el HDD que no se usa (el registro está en la RAM), etc., y cada acceso al registro puede tomar más de un segundo. intente su propio programa para acceder al registro abriendo el registro y cerrándolo por cada acción en lugar de dejar que HK * se abra ... es una gran diferencia.

Entonces, si lo cleanmgrhace para cada archivo:

  1. Registro abierto HK *
  2. Consulte cualquier necesidad y / o haga algunas escrituras en el registro
  3. Cerrar registro HK *

Puede tomar hasta dos o tres segundos por operación, y si hace una operación por archivo, puede tomar cerca de una hora por cada mil archivos ... mi recuento de archivos fue un poco más de 40000 archivos, así que 40000 archivos / 8 horas procesan un archivo cada 1.3 segundos ... por otro lado, eliminarlos en un script (después de saber cuáles) toma menos de cinco minutos, eso es eliminar aproximadamente 133 por segundo ... diferencia.

¡Definitivamente el cleanmgrtiempo no es causado por el deletionmismo! Que mas esta haciendo ¡Por favor, M $ mejora esa velocidad!

Claudio
fuente
1
Esta no es una respuesta a la pregunta original. Si tiene una nueva pregunta, haga su propia pregunta (haciendo referencia a esta para el contexto si le ayuda).
DavidPostill
¿Por qué no usó el monitor de proceso ( docs.microsoft.com/en-us/sysinternals/downloads/procmon ) para analizar las acciones del registro de Windows, etc.
cybernard el
* i estoy sp mutable.
StingyJack
2

Una forma de mitigar este problema y acelerar un poco la fase de "Limpieza de actualizaciones de Windows" de "Limpieza de disco" es establecer temporalmente una mayor prioridad para el proceso TiWorker.exe durante la duración de la llamada actividad de "limpieza".

En el panel 'Detalles' del Administrador de tareas , busque TiWorker.exey haga clic con el botón derecho para mostrar un menú emergente. Para 'Establecer prioridad, "elija" Por encima de lo normal ". Para mí, esto aumentó la TiWorkeractividad de la CPU, desde un promedio de alrededor del 16%, hasta su potencial total del 25% (en una máquina de 4 núcleos).

ingrese la descripción de la imagen aquí

Aparte de la aceleración minúscula, y posiblemente una buena sensación de logro, esto proporciona, hay poco que se pueda hacer, ya que aparentemente "Windows Update Cleanup" está codificado de una manera que, por alguna razón desconocida, procede archivo por archivo, haciendo que el trabajo en general sea horriblemente encuadernado en disco.

Y también, sepa que el proceso probablemente no esté colgado, y de hecho se completará algún día. Para verificar esto (y para distraerse aún más durante este molesto tiempo de espera), puede consultar la sección 'Actividad de disco' del Monitor de recursos (ejecute "resmon.exe").

Glenn Slayden
fuente
Muy buena velocidad!
subjetivista
1

Eliminar 20 archivos de 5mb de tamaño tomará más tiempo para eliminar que 10 archivos de 64mb de tamaño. Esto se debe a que cuando el sistema elimina archivos, realmente no los elimina (ya que el espacio vacío en una unidad puede estar hecho de bits de "ruido"), sino que sobrescribe la parte frontal que dice: "Un archivo comienza aquí" con galimatías y luego felizmente sobrescribirá eso y las siguientes partes más adelante cuando desee usar el espacio. En realidad, borrar es lo mismo que escribir de otra manera.

El problema con la limpieza del disco es que las cosas que limpia generalmente son MUCHOS archivos pequeños (cookies de Internet, archivos temporales, etc.). Como tal, escribe mucho más en el disco que muchas otras cosas, y puede tomar tanto tiempo como instalar algo nuevo, debido al volumen que se escribe en el disco.

liljoshu
fuente
La pregunta original pregunta específicamente sobre la limpieza del disco.
liljoshu
0

Otra palabra de advertencia: parte de lo que lleva tiempo es que, al limpiar WinSxS, Disk Clean-up primero tiene que descomprimir muchos archivos. ¡De modo que el uso del disco aumenta en la primera parte de la limpieza!

JonP
fuente
-2

Otra forma de acelerar el proceso es ejecutar el Liberador de espacio en disco durante aproximadamente 5 minutos. ¡Deténgalo, luego reinícielo y pasará en un santiamén! Además, Desfragmentar u optimizar su HDD / SSD de antemano acelerará las cosas, solo recuerde de-fragmentar / Optz nuevamente después de la limpieza.

Bluesdigital
fuente
No desfragmente su SSD, ya que desgasta los ciclos de lectura y escritura y casi no tiene ganancia.
Nordlys Jeger
@NordlysJeger Windows mismo desfragmenta por SSD por diseño
magicandre1981