¿Por qué las descargas (storedownloadd) de Mac App Store consumen tanta CPU?

52

He notado esto a menudo con grandes descargas como actualizaciones de Xcode y actualizaciones de OS X y ese tipo de cosas.

Básicamente, vemos esto por el tiempo que tarde en continuar la descarga:

ingrese la descripción de la imagen aquí

Hoy (actualmente) estoy descargando Xcode 7.2.1.

Puede ver que storedownloadd parece estar vinculando un núcleo completo, y el núcleo maneja alrededor del 30% de este trabajo.

Lo que me sorprende es qué es este "trabajo". ¿Por qué necesita hacer este trabajo? ¿Qué cantidad de procesamiento podría estar haciendo? Porque descifrar un flujo a unos pocos megabytes por segundo no requiere tantos recursos. Podría estar descargando un archivo grande como este usando cientos de conexiones a través de Internet y ejecutando verificaciones de integridad (con un protocolo como bittorrent) y no se acercaría a lo que sucede aquí con el uso de recursos.

Steven Lu
fuente
1
Para cualquiera que no necesite actualizaciones para descargar automáticamente y solo quiera hacer que este uso de CPU desaparezca, vaya al Menú Apple -> Preferencias del sistema -> App Store y desactive la opción "Descargar actualizaciones recientemente disponibles en segundo plano" (El Capitan ) y luego reinicie la computadora.
rakslice

Respuestas:

30

Se encontró con el mismo problema hoy al actualizar XCode: storedownloaddvincula un núcleo de CPU durante 20 minutos.

Traté de entrar a storedownloadd con un depurador y vi algunos rastros de pila realmente largos y mucho tiempo dentro Security::CodeSigning.

Sospecho que está verificando recursivamente las firmas digitales de muchos archivos pequeños uno por uno. No tengo idea de por qué haría eso en lugar de verificar todo el paquete mientras se está descargando. También veo mucha manipulación de cadenas dentro Security_CodeSigning::RequirementLexer::RequirementLexer.

Lo storedownloaddque sea ​​que haga, ¡es demasiado lento!

Navin
fuente
¿Cómo pudiste ver el contenido de seguimiento de la pila? (¿No requiere generalmente símbolos de depuración?) ¿Usó Xcode para depurar storedownloadd? Instrumentos? ¿Cómo haces eso?
Steven Lu
@StevenLu Sí, usé Xcode. No creo que tenga símbolos de depuración. Los nombres de las funciones probablemente provienen de las bibliotecas compartidas que declaran esas funciones.
Navin
1
Eso está bien, sin embargo. Debería intentar hacer eso más a menudo. Gracias
Steven Lu
2
está haciendo eso ANTES de que comience la descarga ... así que si verifica la firma del código, lo hace en los archivos locales. ¿Tal vez está comprobando la integridad de toda la instalación de xcode local antes de la descarga?
user2707001
1
lo está haciendo por mí ahora cuando hay actualizaciones para descargar, pero aún no las está descargando. hace que todo esté casi inutilizable. simplemente lo maté en el monitor de actividad y conseguí mis compilaciones para el día más rápido.
Lassi Kinnunen
11

El uso de la CPU es causado tanto por la codificación descuidada como por el cifrado / descompresión. Los ingenieros se han vuelto muy descuidados con nuestra CPU en la era de los portátiles de cuatro núcleos con ocho núcleos virtuales.

Alguien debería perseguir a Apple para optimizar la storedownloaddrutina. Teniendo en cuenta que tuvimos que aguantar a la red no funciona desde hace más de un año hasta que Apple reemplazó el roto por el diseño discoverydcon mDNSresponder.

Pensamientos más oscuros podrían sugerir que la tienda también está comprimiendo datos para cargarlos y enviarlos. Microsoft fue sorprendido haciendo esto muchas veces, pero no he visto un caso documentado en el caso de Apple.

Foliovision
fuente
1
Creo que una cosa que deberíamos considerar es que tal vez storedownloaddes descomprimir los datos del paquete de una manera computacionalmente intensiva. No hay muchas razones en este momento para sospechar algo particularmente nefasto
Steven Lu
Lamento que realmente lo hayas mencionado. así que quiero decir que creo que lo más plausible es que esto tiene algo que ver con la descompresión de archivos.
Steven Lu
1
Steven, incluso la descompresión no tiene sentido durante el período de una descarga larga (la descompresión generalmente ocurre al final de una descarga). Solo el cifrado tiene sentido. Creo que es una situación como el descubrimiento donde el código nunca se ha optimizado correctamente (la cita de Ars Technica muestra claramente qué tan atrás está Apple en la fijación de las rutinas centrales de OS X, incluso la más central para la experiencia del usuario que la descarga de la tienda, lo que no debería ser una gran parte de la experiencia total de Mac de cualquier usuario que no sea probador).
Foliovision
Sin embargo, no tiene sentido que le hayan dado prioridad sobre las tareas normales del usuario. Su ejecución hace que xcode haga su construcción mucho más lenta en las Mac más lentas. 5 minutos girando a 20 minutos más lento, no solo un poco más lento.
Lassi Kinnunen
8

acabo de matarlo en la terminal ;-) ... tomando 1.5MB / s de mi banda ancha lenta

killall storedownloadd
Thomas Webb
fuente
Por lo tanto, no recibirá las actualizaciones de software ... no me parece una solución.
Calimo