Почему загрузки (storeownloadd) из Mac App Store потребляют так много ресурсов процессора?

52

Я часто замечал это при больших загрузках, таких как обновления XCode и OS X, и тому подобное.

По сути, мы видим это в течение того времени, которое требуется для продолжения загрузки:

введите описание изображения здесь

Сегодня (в настоящее время) я загружаю Xcode 7.2.1.

Вы можете видеть, что сохраненный файл loadownloadd выполняет привязку всего ядра, и около 30% этой работы выполняется ядром.

Что меня озадачивает, что это за «работа»? Почему это нужно сделать эту работу? Какой объем обработки он может выполнять, потому что дешифрование потока со скоростью несколько мегабайт в секунду не требует такого большого количества ресурсов. Я мог бы скачать такой большой файл, используя сотни соединений через Интернет и выполняя проверку целостности (с протоколом, подобным bittorrent), и он не приблизился бы к тому, что происходит здесь с использованием ресурсов.

Стивен Лу
источник
1
Для тех, кто не нуждается в обновлениях для автоматической загрузки и просто хочет прекратить использование этого процессора, перейдите в меню Apple -> Системные настройки -> App Store и снимите флажок «Загружать новые доступные обновления в фоновом режиме» (El Capitan ), а затем перезагрузите компьютер.
Ракслице

Ответы:

30

Сегодня столкнулся с той же проблемой при обновлении XCode: storedownloaddпривязывает ядро ​​процессора на 20 минут.

Я попытался взломать storeownloadd с помощью отладчика и увидел несколько действительно длинных трассировок стека и много времени, проведенного внутри Security::CodeSigning.

Я подозреваю, что он рекурсивно проверяет цифровые подписи множества крошечных файлов один за другим. Я понятия не имею, почему он будет делать это вместо проверки всего пакета во время его загрузки. Я также вижу много строковых манипуляций внутри Security_CodeSigning::RequirementLexer::RequirementLexer.

Что бы ни storedownloaddделало, это слишком чертовски медленно!

Navin
источник
Как вы смогли увидеть содержимое трассировки стека? (Разве для этого обычно не требуются символы отладки?) Использовали ли вы Xcode для отладки хранимой загрузки? Инструменты? Как ты это делаешь?
Стивен Лу
@ StevenLu Да, я использовал Xcode. Я не думаю, что у меня есть символы отладки. Имена функций, вероятно, пришли из разделяемых библиотек, которые объявляют эти функции.
Навин
1
Это аккуратно, хотя. Я должен попытаться сделать это чаще. Спасибо
Стивен Лу
2
он делает это ДО начала загрузки ... поэтому, если он проверяет подпись кода, он делает это в локальных файлах. может быть, это проверка целостности всей локальной установки xcode перед загрузкой?
user2707001
1
он делает это для меня сейчас, когда есть загружаемые обновления, но пока не загружает их. делает все границы непригодными. просто убил его в мониторе активности и сделал мои сборки за день быстрее.
Ласси Киннунен
11

Загрузка процессора вызвана как небрежным кодированием, так и шифрованием / распаковкой. Инженеры стали очень небрежными с нашим процессором в эпоху четырехъядерных ноутбуков с восемью виртуальными ядрами.

Кто-то должен преследовать Apple вокруг оптимизации storedownloaddрутины. Учитывая, что нам пришлось мириться с неисправной сетью более года, пока Apple не заменила сломанную по дизайну discoverydна mDNSresponder.

Темные мысли могут предположить, что магазин также сжимает данные для загрузки и отправки. Microsoft была поймана, делая это много раз, но я не видел документированного случая в случае Apple.

Foliovision
источник
1
Я думаю, что одну вещь, которую мы должны рассмотреть, это то, что, возможно storedownloadd, распаковывает данные пакета по-настоящему вычислительно интенсивным способом. На данный момент нет особых оснований подозревать что-либо особенно гнусное
Стивен Лу
Извините, что вы на самом деле упоминали это. поэтому я хочу сказать, что я думаю, что наиболее правдоподобным является то, что это как-то связано с распаковкой файлов.
Стивен Лу
1
Стивен, даже декомпрессия не имеет смысла в течение долгой загрузки (декомпрессия обычно происходит в конце загрузки). Только шифрование имеет смысл. Я думаю, что это ситуация, подобная обнаружению, когда код никогда не был должным образом оптимизирован (цитата из Ars Technica ясно показывает, насколько отстает Apple в исправлении подпрограмм ядра OS X, даже гораздо важнее для пользователя, чем загрузка из магазина - что не должно быть настолько большой частью общего опыта Mac любого пользователя, не являющегося тестером).
Foliovision
Нет никакого смысла в том, что они дали ему приоритет над обычными пользовательскими задачами. Это работает заставляет XCode делать это гораздо медленнее на медленных Mac. 5 минут превращаются в 20 минут медленнее, а не только немного медленнее.
Ласси Киннунен
8

просто убил его в терминале ;-) ... принимая 1,5 МБ / с от моей медленной широкополосной связи

killall storedownloadd
Томас Уэбб
источник
Так что вы не получите обновления программного обеспечения ... не похоже на решение для меня.
Calimo