Dlaczego pliki do pobrania (przechowywane do pobrania) z Mac App Store zużywają tak dużo procesora?

52

Zauważyłem to często przy dużych pobraniach, takich jak aktualizacje Xcode i aktualizacje OS X i tego typu rzeczy.

Zasadniczo widzimy to przez jak długo trwa pobieranie:

wprowadź opis zdjęcia tutaj

Dzisiaj (obecnie) pobieram Xcode 7.2.1.

Widać, że zapisany downloadd wydaje się ustalać cały rdzeń, a jądro obsługuje około 30% tej pracy.

Zastanawiam się, czym jest ta „praca”? Dlaczego musi to wykonać? Jakiego rodzaju przetwarzanie mogłoby to być możliwe, ponieważ odszyfrowanie strumienia z prędkością kilku megabajtów na sekundę nie wymaga tak dużych zasobów. Mógłbym pobierać taki duży plik za pomocą setek połączeń przez Internet i przeprowadzać na nim kontrole integralności (z protokołem takim jak bittorrent) i nie zbliżyłoby się to do tego, co dzieje się tutaj z wykorzystaniem zasobów.

Steven Lu
źródło
1
Dla każdego, kto nie potrzebuje aktualizacji, aby pobierać automatycznie i chce po prostu zrezygnować z tego procesora, przejdź do Apple Menu -> Preferencje systemowe -> App Store i odznacz opcję „Pobierz nowe dostępne aktualizacje w tle” (El Capitan ), a następnie uruchom ponownie komputer.
rakslice

Odpowiedzi:

30

Napotkałem ten sam problem dzisiaj podczas aktualizacji XCode: storedownloaddunieruchamia rdzeń procesora przez 20 minut.

Próbowałem włamać się do downloaddownloaded za pomocą debuggera i zobaczyłem naprawdę długie ślady stosu i dużo czasu spędzonego w środku Security::CodeSigning.

Podejrzewam, że rekurencyjnie weryfikuje podpisy cyfrowe wielu małych plików jeden po drugim. Nie mam pojęcia, dlaczego miałoby to zrobić, zamiast weryfikować cały pakiet podczas pobierania. Widzę też wiele manipulacji na łańcuchach Security_CodeSigning::RequirementLexer::RequirementLexer.

Cokolwiek storedownloaddrobi, to jest zbyt cholernie wolne!

Navin
źródło
Jak mogłeś zobaczyć zawartość śledzenia stosu? (Czy to na ogół nie wymaga symboli debugowania?) Czy używałeś Xcode do debugowania zapisanych plików do pobrania? Instrumenty? Jak to robisz?
Steven Lu,
@StevenLu Tak, użyłem Xcode. Nie sądzę, że mam symbole debugowania. Nazwy funkcji prawdopodobnie pochodziły z bibliotek współdzielonych, które deklarują te funkcje.
Navin
1
Ale to miłe. Powinienem próbować to robić częściej. Dzięki
Steven Lu,
2
robi to ZANIM rozpocznie się pobieranie ... więc jeśli sprawdzi podpisywanie kodu, zrobi to na lokalnych plikach. może sprawdza integralność całej lokalnej instalacji xcode przed pobraniem?
user2707001 19.09.16
1
robi to dla mnie teraz, gdy są aktualizacje do pobrania, ale jeszcze ich nie pobiera. sprawia, że ​​wszystko na granicy jest bezużyteczne. właśnie zabiłem go w monitorze aktywności i sprawiłem, że moje kompilacje na ten dzień zostały wykonane szybciej.
Lassi Kinnunen
11

Wykorzystanie procesora jest spowodowane zarówno niechlujnym kodowaniem, jak i szyfrowaniem / dekompresją. Inżynierowie stali się bardzo nieostrożni dzięki naszemu procesorowi w dobie czterordzeniowych notebooków z ośmioma rdzeniami wirtualnymi.

Ktoś powinien gonić Apple za optymalizacją storedownloaddrutyny. Biorąc pod uwagę, że musieliśmy znosić złamane sieci przez ponad rok , aż jabłko otrzymuje złamane przez projekt discoverydz mDNSresponder.

Ciemniejsze myśli mogą sugerować, że sklep kompresuje również dane do przesłania i wysłania. Microsoft był przyłapany na robieniu tego wiele razy, ale nie widziałem udokumentowanej sprawy w sprawie Apple.

Foliovision
źródło
1
Myślę, że jedną rzeczą, którą należy rozważyć jest to, że być może storedownloaddjest dekompresowanie dane pakietowe w naprawdę obliczeniowo sposób. W tym momencie nie ma zbyt wielu powodów, by podejrzewać coś szczególnie niegodziwego
Steven Lu,
Przepraszam, że o tym wspomniałeś. więc chcę powiedzieć, że najbardziej prawdopodobne jest to, że ma to coś wspólnego z dekompresją plików.
Steven Lu
1
Steven, nawet dekompresja nie ma sensu w okresie długiego pobierania (dekompresja zwykle ma miejsce po zakończeniu pobierania). Jedynie szyfrowanie ma sens. Myślę, że jest to sytuacja jak odkrycie, w której kod nigdy nie został odpowiednio zoptymalizowany (cytat z Ars Technica wyraźnie pokazuje, jak Apple stoi za naprawą podstawowych procedur OS X, a nawet bardziej zależy na doświadczeniu użytkownika niż pobieranie ze sklepu - co nie powinno być tak dużą częścią całego doświadczenia użytkowników komputerów Mac niebędących testerami).
Foliovision,
Nie ma jednak sensu, aby dawali mu pierwszeństwo przed normalnymi zadaniami użytkownika. Uruchamianie sprawia, że ​​xcode robi, że buduje znacznie wolniej na wolniejszych komputerach Mac. 5 minut zamienia się w 20 minut powoli, nie tylko trochę wolniej.
Lassi Kinnunen
8

właśnie zabiłem go w terminalu ;-) ... biorąc 1,5 MB / s z mojego wolnego łącza szerokopasmowego

killall storedownloadd
Thomas Webb
źródło
Więc nie dostaniesz aktualizacji oprogramowania ... nie brzmi dla mnie jak rozwiązanie.
Calimo