Warum verbrauchen Downloads (savedownloadd) aus dem Mac App Store so viel CPU?

52

Ich habe dies oft bei großen Downloads wie Xcode-Updates und OS X-Updates und dergleichen bemerkt.

Grundsätzlich sehen wir, wie lange es dauert, bis der Download abgeschlossen ist:

Bildbeschreibung hier eingeben

Heute (zur Zeit) lade ich Xcode 7.2.1 herunter.

Sie können sehen, dass Storedownloadd anscheinend einen ganzen Kern blockiert, und ungefähr 30% dieser Arbeit wird vom Kernel erledigt.

Was mich verwirrt ist, was ist diese "Arbeit"? Warum muss es diese Arbeit machen? Welchen Verarbeitungsaufwand könnte es möglicherweise verursachen, da das Entschlüsseln eines Streams mit wenigen Megabyte pro Sekunde nicht so viele Ressourcen erfordert. Ich könnte eine große Datei wie diese mit Hunderten von Verbindungen über das Internet herunterladen und Integritätsprüfungen durchführen (mit einem Protokoll wie bittorrent), und sie würde sich nicht annähern, was hier mit der Ressourcennutzung geschieht.

Steven Lu
quelle
1
Wenn Sie keine Updates zum automatischen Herunterladen benötigen und nur die CPU-Auslastung verringern möchten, gehen Sie zu Apple Menu -> Systemeinstellungen -> App Store und deaktivieren Sie die Option "Neu verfügbare Updates im Hintergrund herunterladen" (El Capitan ) und starten Sie den Computer neu.
Rakslice

Antworten:

30

Stieß heute beim Aktualisieren von XCode auf dasselbe Problem: storedownloaddSteckt einen CPU-Kern für 20 Minuten fest.

Ich habe versucht, mit einem Debugger in Storedownloadd einzudringen, und habe einige wirklich lange Stack-Spuren und viel Zeit im Inneren gesehen Security::CodeSigning.

Ich vermute, dass die digitalen Signaturen vieler winziger Dateien einzeln rekursiv überprüft werden. Ich habe keine Ahnung, warum es das tun würde, anstatt das gesamte Paket beim Herunterladen zu überprüfen. Ich sehe auch viel Saitenmanipulation im Inneren Security_CodeSigning::RequirementLexer::RequirementLexer.

Was storedownloaddauch immer tut, es ist zu langsam!

Navin
quelle
Wie konnten Sie Stack-Trace-Inhalte sehen? (Erfordert das im Allgemeinen keine Debugsymbole?) Haben Sie Xcode zum Debuggen von gespeichertem Download verwendet? Instrumente? Wie machst du das?
Steven Lu
@StevenLu Ja, ich habe Xcode verwendet. Ich glaube nicht, dass ich Debugsymbole habe. Die Funktionsnamen stammen wahrscheinlich aus den gemeinsam genutzten Bibliotheken, die diese Funktionen deklarieren.
Navin
1
Das ist aber ordentlich. Ich sollte das öfter versuchen. Vielen Dank
Steven Lu
2
Dies geschieht, BEVOR der Download beginnt. Wenn also die Codesignatur überprüft wird, erfolgt dies bei lokalen Dateien. Vielleicht wird die Integrität der gesamten lokalen Xcode-Installation vor dem Download überprüft?
user2707001
1
Es erledigt das jetzt für mich, wenn Updates heruntergeladen werden müssen, aber es lädt sie noch nicht herunter. macht alles borderline unbrauchbar. Habe es gerade in der Aktivitätsüberwachung getötet und meine Builds für den Tag schneller erledigt.
Lassi Kinnunen
11

Die CPU-Auslastung wird sowohl durch fehlerhafte Codierung als auch durch Verschlüsselung / Dekomprimierung verursacht. Ingenieure sind im Zeitalter von Quad-Core-Notebooks mit acht virtuellen Kernen sehr nachlässig mit unserer CPU umgegangen.

Jemand sollte Apple hinterherjagen, um die storedownloaddRoutine zu optimieren . In Anbetracht dessen, dass wir uns über ein Jahr lang mit defekten Netzwerken herumschlagen mussten, bis Apple das defekte Design discoveryddurch ersetzt hat mDNSresponder.

Dunkle Gedanken könnten darauf hindeuten, dass der Speicher auch Daten zum Hochladen und Senden komprimiert. Microsoft wurde dabei oft erwischt, aber ich habe keinen dokumentierten Fall in Apples Fall gesehen.

Foliovision
quelle
1
Ich denke , eine Sache , die wir in Betracht ziehen sollten , ist , dass vielleicht storedownloaddsind Dekomprimieren Paketdaten in eine wirklich rechenintensive Art und Weise. Es gibt an dieser Stelle nicht viel Grund, etwas besonders Schändliches zu vermuten
Steven Lu
Tut mir leid, dass du es tatsächlich erwähnt hast. Das plausibelste ist meiner Meinung nach, dass dies mit der Dekomprimierung von Dateien zu tun hat.
Steven Lu
1
Steven, selbst Dekomprimierung macht über den Zeitraum eines langen Downloads keinen Sinn (Dekomprimierung erfolgt normalerweise am Ende eines Downloads). Nur Verschlüsselung macht Sinn. Ich denke, es ist eine Situation, in der der Code nie richtig optimiert wurde (das Ars Technica-Zitat zeigt deutlich, wie weit Apple bei der Behebung von OS X-Kernroutinen zurücksteht, selbst wenn die Benutzererfahrung weitaus zentraler ist als das Herunterladen im Laden - was nicht der Fall sein sollte ein so großer Teil der gesamten Mac-Erfahrung eines Nicht-Testers sein).
Foliovision
Es macht jedoch keinen Sinn, dass sie Vorrang vor normalen Benutzeraufgaben haben. Wenn xcode läuft, wird es auf den langsameren Macs viel langsamer gebaut. 5 Minuten drehen bis 20 Minuten langsam, nicht nur ein bisschen langsamer.
Lassi Kinnunen
8

Habe es gerade im Terminal gekillt ;-) ... nehme 1,5 MB / s von meinem langsamen Breitband

killall storedownloadd
Thomas Webb
quelle
Sie werden also keine Software-Updates erhalten ... hört sich für mich nicht nach einer Lösung an.
Calimo,