为什么从Mac App Store下载(商店下载)会消耗大量CPU?


52

我经常在大型下载(例如Xcode更新和OS X更新)中注意到这一点。

基本上,无论下载多少时间,我们都会看到这一点:

在此处输入图片说明

今天(当前)我正在下载Xcode 7.2.1。

您可以看到storedownloadd似乎钉住了整个内核,其中约30%的工作由内核处理。

我不知道的是什么是“工作”?为什么需要这项工作?它可能要进行多少处理,因为以每秒几兆字节的速度解密流并不需要那么多资源。我可能会使用数百个通过Internet的连接下载像这样的大文件,并对其进行完整性检查(使用诸如bittorrent之类的协议),并且它不会接近资源使用情况。


1
对于不需要更新来自动下载并且只想减少CPU使用量的任何人,请转到Apple菜单->系统偏好设置-> App Store,然后取消选中“在后台下载新的可用更新”选项(El Capitan ),然后重新启动计算机。
rakslice

Answers:


30

今天在更新XCode时遇到相同的问题:storedownloadd将CPU核心钉住20分钟。

我尝试使用调试器闯入storedownloadd,看到了一些非常长的堆栈跟踪,并在其中花费了大量时间Security::CodeSigning

我怀疑它正在递归地验证许多小文件的数字签名。我不知道为什么要这么做而不是在下载整个程序包时对其进行验证。我还看到里面有很多字符串操作Security_CodeSigning::RequirementLexer::RequirementLexer

无论如何storedownloadd,这太慢了!


您如何查看堆栈跟踪内容?(这通常不需要调试符号吗?)您是否使用Xcode调试storedownloadd?仪器?你是怎样做的?
史蒂文·卢

@StevenLu是的,我用过Xcode。我认为我没有调试符号。函数名称可能来自声明这些函数的共享库。
纳文

1
不过,这很整洁。我应该尝试更多地这样做。谢谢
史蒂文·卢

2
它是在下载开始之前执行的操作...因此,如果它检查代码签名,则会在本地文件上执行此操作。也许是在下载之前检查整个本地xcode安装的完整性?
user2707001 2016年

1
现在有更新要下载时,它正在为我做,但尚未下载它们。使一切都无法使用。刚刚在活动监视器中将其杀死,从而更快地完成了一天的构建。
Lassi Kinnunen

11

CPU使用率是由草率编码和加密/解压缩引起的。在具有八个虚拟核的四核笔记本电脑时代,工程师对我们的CPU变得非常粗心。

有人应该追随苹果,以优化storedownloadd例程。考虑到我们必须忍受损坏的网络超过一年的时间,直到苹果discoverydmDNSresponder

更黑暗的想法可能表明该商店还在压缩数据以进行上传和发送。微软多次被捕,但是我还没有看到苹果案中有案可查的案子。


1
我认为我们应该考虑的一件事是,也许storedownloadd正在以一种计算密集型的方式解压缩包数据。此时没有太多理由怀疑任何特别有害的东西
史蒂芬·卢

抱歉,您确实提到了它。所以我的意思是说我认为最合理的事情是与文件解压缩有关。
史蒂文·卢

1
史蒂文(Steven),在长时间的下载过程中,即使解压缩也没有意义(解压缩通常发生在下载结束时)。只有加密才有意义。我认为这是一种发现情况,其中的代码从未得到过适当的优化(Ars Technica的引文清楚地表明了苹果在修复核心OS X例程方面的背后是什么,甚至在用户体验方面比存储下载更重要-这不应该在所有非测试用户的Mac体验中占很大的比例)。
Foliovision '16

但是,他们将其优先于普通用户任务没有任何意义。它的运行使xcode能够在较慢的Mac上构建得慢得多。5分钟变成20分钟慢,而不仅仅是慢一点。
Lassi Kinnunen

8

刚刚在终端将其杀死;-) ...从我的慢速宽带中获取1.5MB / s

killall storedownloadd

这样您就不会得到软件更新...对我来说听起来不像是一个解决方案。
Calimo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.