Perché i download (storedownloadd) dal Mac App Store consumano così tanta CPU?


52

L'ho notato spesso con download di grandi dimensioni come aggiornamenti Xcode e aggiornamenti OS X e cose del genere.

Fondamentalmente vediamo questo per quanto tempo ci vuole per il download per procedere:

inserisci qui la descrizione dell'immagine

Oggi (attualmente) sto scaricando Xcode 7.2.1.

Puoi vedere storedownloadd che sembra agganciare un intero core e circa il 30% di questo lavoro è gestito dal kernel.

Ciò di cui sono perplesso è cos'è questo "lavoro"? Perché ha bisogno di fare questo lavoro? Quanta quantità di elaborazione potrebbe eventualmente fare, perché la decrittografia di un flusso a pochi megabyte al secondo non richiede così tante risorse. Potrei scaricare un file di grandi dimensioni come questo usando centinaia di connessioni su Internet e eseguendo controlli di integrità su di esso (con un protocollo come bittorrent) e non si avvicinerebbe in alcun modo vicino a ciò che sta accadendo qui con l'uso delle risorse.


1
Per tutti coloro che non hanno bisogno di aggiornamenti per il download automatico e vogliono semplicemente eliminare questo utilizzo della CPU, vai al menu Apple -> Preferenze di Sistema -> App Store e deseleziona l'opzione "Scarica gli aggiornamenti disponibili di recente in background" (El Capitan ), quindi riavviare il computer.
Rakslice,

Risposte:


30

Ho riscontrato lo stesso problema oggi durante l'aggiornamento di XCode: storedownloaddcollega un core della CPU per 20 minuti.

Ho provato a entrare in un archivio scaricato con un debugger e ho visto alcune tracce dello stack molto lunghe e molto tempo trascorso all'interno Security::CodeSigning.

Sospetto che stia verificando ricorsivamente le firme digitali di molti piccoli file uno per uno. Non ho idea del perché lo farebbe invece di verificare l'intero pacchetto mentre viene scaricato. Vedo anche molta manipolazione delle stringhe all'interno Security_CodeSigning::RequirementLexer::RequirementLexer.

Qualunque cosa storedownloaddfaccia, è troppo dannatamente lento!


Come hai potuto vedere il contenuto della traccia dello stack? (In genere questo non richiede simboli di debug?) Hai usato Xcode per eseguire il debug di storedownloadd? Strumenti? Come si fa a farlo?
Steven Lu,

@StevenLu Sì, ho usato Xcode. Non credo di avere simboli di debug. I nomi delle funzioni probabilmente derivano dalle librerie condivise che dichiarano tali funzioni.
Navin,

1
È pulito, però. Dovrei provare a farlo più spesso. Grazie
Steven Lu

2
lo sta facendo PRIMA che il download inizi ... quindi se controlla la firma del codice, lo fa su file locali. forse sta controllando l'integrità dell'intera installazione di xcode locale prima del download?
user2707001,

1
lo sta facendo per me ora quando ci sono aggiornamenti da scaricare, ma non li sta ancora scaricando. rende inutilizzabile ogni limite. L'ho appena ucciso nel monitor delle attività e ho fatto in modo che le mie build per il giorno fossero fatte più velocemente.
Lassi Kinnunen,

11

L'utilizzo della CPU è causato sia dalla codifica sciatta che dalla crittografia / decompressione. Gli ingegneri sono diventati molto disattenti con la nostra CPU nell'era dei notebook quad core con otto core virtuali.

Qualcuno dovrebbe inseguire Apple sull'ottimizzazione della storedownloaddroutine. Considerando che abbiamo dovuto fare i conti con rotta di rete per più di un anno fino a quando Apple ha sostituito il rotto da disegno discoverydcon mDNSresponder.

Pensieri più oscuri potrebbero suggerire che il negozio comprime anche i dati per il caricamento e l'invio. Microsoft è stata sorpresa a farlo molte volte, ma non ho visto un caso documentato nel caso di Apple.


1
Penso che una cosa che dovremmo considerare è che forse storedownloaddè decomprimere i dati del pacchetto in un modo davvero intensivo dal punto di vista computazionale. Non c'è molto motivo a questo punto di sospettare qualcosa di particolarmente malvagio
Steven Lu

Mi dispiace che tu l'abbia detto. quindi intendo dire che penso che la cosa più plausibile sia che ciò abbia a che fare con la decompressione dei file.
Steven Lu

1
Steven, anche la decompressione non ha senso durante il periodo di un lungo download (la decompressione di solito avviene alla fine di un download). Solo la crittografia ha senso. Penso che sia una situazione come discoveryd in cui il codice non è mai stato adeguatamente ottimizzato (la citazione di Ars Technica mostra chiaramente quanto dietro Apple ci sia nel sistemare le routine OS X di base, anche se uno è molto più centrale per l'esperienza utente rispetto al download in negozio - che non dovrebbe essere così grande parte dell'esperienza Mac totale di qualsiasi utente non tester).
Foliovision,

Non ha senso però che gli abbiano dato la priorità rispetto alle normali attività dell'utente. Funzionando rende xcode fare si costruisce molto più lentamente sui mac più lenti. 5 minuti che passano a 20 minuti lenti, non solo un po 'più lenti.
Lassi Kinnunen,

8

l'ho appena ucciso nel terminale ;-) ... prendendo 1,5 MB / s dalla mia banda larga lenta

killall storedownloadd

Quindi non otterrai gli aggiornamenti del software ... non mi sembra una soluzione.
Calimo,
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.