Por que os downloads (storedownloadd) da Mac App Store consomem tanta CPU?

52

Eu notei isso frequentemente com downloads grandes, como atualizações do Xcode e atualizações do OS X e esse tipo de coisa.

Basicamente, vemos isso por quanto tempo leva para o download prosseguir:

insira a descrição da imagem aqui

Hoje (atualmente) estou baixando o Xcode 7.2.1.

Você pode ver o storagedownloadd parece estar atrelando a um núcleo inteiro, e cerca de 30% deste trabalho é tratado pelo kernel.

O que me deixa intrigado é o que é esse "trabalho"? Por que ele precisa fazer esse trabalho? Qual a quantidade de processamento que ele poderia estar fazendo, porque descriptografar um fluxo a poucos megabytes por segundo não requer tantos recursos. Eu poderia estar baixando um arquivo grande como esse usando centenas de conexões pela Internet e executando verificações de integridade (com um protocolo como o bittorrent) e ele não chegaria nem perto do que está acontecendo aqui com o uso de recursos.

Steven Lu
fonte
11
Para quem não precisa de atualizações para baixar automaticamente e quer apenas diminuir o uso da CPU, vá para Apple Menu -> Preferências do sistema -> App Store e desmarque a opção "Baixar as novas atualizações disponíveis em segundo plano" (El Capitan ) e, em seguida, reinicie o computador.
rakslice

Respostas:

30

Hoje ocorreu o mesmo problema ao atualizar o XCode: storedownloaddatribui um núcleo de CPU por 20 minutos.

Tentei invadir o arquivo armazenadosdownloadd com um depurador e vi alguns rastreamentos de pilha muito longos e muito tempo gasto lá dentro Security::CodeSigning.

Suspeito que esteja verificando recursivamente as assinaturas digitais de muitos arquivos minúsculos, um por um. Não faço ideia por que isso faria isso em vez de verificar o pacote inteiro enquanto ele está sendo baixado. Eu também vejo muita manipulação de cordas por dentro Security_CodeSigning::RequirementLexer::RequirementLexer.

O storedownloaddque quer que seja , é muito lento!

Navin
fonte
Como você conseguiu ver o conteúdo do rastreamento de pilha? (Isso geralmente não requer símbolos de depuração?) Você usou o Xcode para depurar o arquivo armazenadosdownloadd? Instrumentos? Como você faz isso?
Steven Lu
@StevenLu Sim, eu usei o Xcode. Eu não acho que tenho símbolos de depuração. Os nomes das funções provavelmente vieram das bibliotecas compartilhadas que declaram essas funções.
Navin
11
Isso é legal, no entanto. Eu deveria tentar fazer isso com mais frequência. Obrigado
Steven Lu
2
está fazendo isso ANTES do início do download ... por isso, se verificar a assinatura do código, ele fará isso nos arquivos locais. talvez esteja verificando a integridade de toda a instalação local do xcode antes do download?
user2707001
11
está fazendo isso por mim agora quando há atualizações para serem baixadas, mas ainda não as está baixando. torna tudo limítrofe inutilizável. acabei de matá-lo no monitor de atividades e concluí minhas compilações para o dia mais rapidamente.
Lassi Kinnunen
11

O uso da CPU é causado tanto pela codificação superficial quanto pela criptografia / descompactação. Os engenheiros tornaram-se muito descuidados com nossa CPU na era dos notebooks quad core com oito núcleos virtuais.

Alguém deve perseguir a Apple para otimizar a storedownloaddrotina. Considerando que nós tivemos que colocar-se com a rede quebrada por mais um ano até que a Apple substituiu o quebrado por design discoverydcom mDNSresponder.

Pensamentos mais sombrios podem sugerir que a loja também está compactando dados para upload e envio. A Microsoft foi flagrada fazendo isso muitas vezes, mas não vi um caso documentado no caso da Apple.

Foliovision
fonte
11
Eu acho que uma coisa que devemos considerar é que talvez storedownloaddesteja descompactando os dados do pacote de uma maneira realmente computacional. Não há muito motivo, neste momento, nada suspeito particularmente nefasto
Steven Lu
Desculpe, você realmente mencionou. então quero dizer que acho que a coisa mais plausível é que isso tem algo a ver com descompactação de arquivos.
Steven Lu
11
Steven, mesmo a descompressão não faz sentido durante o período de um download longo (a descompressão geralmente ocorre no final de um download). Somente criptografia faz sentido. Eu acho que é uma situação como o discoveryd, em que o código nunca foi otimizado adequadamente (a citação da Ars Technica mostra claramente como a Apple está por trás da correção de rotinas principais do OS X, até a mais importante para a experiência do usuário do que o download da loja - o que não deveria fazer parte da experiência total de Mac de qualquer usuário que não seja testador).
Foliovision 16/03/19
Não faz sentido que eles tenham priorizado as tarefas normais do usuário. A execução faz com que o xcode construa muito mais lentamente nos macs mais lentos. 5 minutos passando para 20 minutos devagar, não apenas um pouco mais lento.
Lassi Kinnunen
8

acabei de matar no terminal ;-) ... tirando 1.5MB / s da minha banda larga lenta

killall storedownloadd
Thomas Webb
fonte
Então você não receberá as atualizações de software ... não me parece uma solução.
Calimo