为什么 apt-get 不使用 100% (cpu OR disk OR net)?

Kla*_*nDK 22 apt cpu-usage

为什么apt-get 使用100%无论是CPU,磁盘或网络-或者甚至接近呢?即使在慢速系统(Raspberry Pi 2+)上,我也最多只能获得 30% 的 CPU 负载。我只是想,无论它是被人为扼杀,或者它应该最大程度的发挥的东西,而它的工作...或者它应该能够做它的东西比它更快。

编辑:我只是通过面板中的 cpu/disk/net 监视器和 Ubuntu MATE 的系统监视器应用程序进行粗略测量。

请解释为什么我错了。:-)

更新:我知道apt-get需要获取其更新(并且可能受到上游/提供商带宽的限制)。但是一旦它“解包”等等,CPU 使用率至少应该上升(如果不是最大的话)。在我相当不错的家用工作站上,它的主驱动器使用 SSD,/tmp 使用 ramdisk,但情况并非如此。

或者也许我需要仔细看看。

PSk*_*cik 29

如果应用程序受 CPU 限制,应用程序只会最大化CPU。一个应用程序是CPU密集型的,如果它可以迅速得到所有的数据,并等待什么的是处理数据的处理器。

apt-get,另一方面,是IO-bound。这意味着它可以相当快地处理其数据,但加载数据(从磁盘或从网络)需要时间,在此期间处理器可以做其他事情或在没有其他进程需要时闲置。

通常,所有 IO 请求(磁盘、网络)都很慢,每当应用程序线程发出请求时,内核都会将其从处理器中删除,直到数据加载到内核中(=这些 IO 请求称为阻塞请求)。

  • 使用 `apt` 命令,许多文件在同步模式下打开,或者频繁显式刷新到磁盘以确保磁盘上的数据保持一致状态,因为系统崩溃可能会产生严重后果,因此情况更加恶化。使用 `eatmydata` 运行 `apt` 命令通常可以以降低可靠性为代价显着提高性能(更不用说作为包安装的一部分启动的服务将继承eatmydata 设置) (6认同)

A.L*_*A.L 16

即使在慢速系统(Raspberry Pi 2+)上,我也最多只能获得 30% 的 CPU 负载。

Raspberry Pi 2+ 有 4 个内核。对于某些监控工具,100% 的使用率对应于所有内核的使用率为 100%。如果在四码处理器中仅使用一个内核,则 CPU 负载为 25%。您提到的 30% CPU 负载大约是一个内核以 100% 使用,而一些进程正在其他内核上运行:

(100% on one core out of 4 = 100 / 4 = 25%) + some processes ? 30%
Run Code Online (Sandbox Code Playgroud)

由于apt-get不是多线程,它永远不会使用超过一个处理器,占所有 CPU 资源的 25%。


这是我运行 Ubuntu 的8 核(带有超线程的4 核)机器上的示例,我使用该cat /dev/zero > /dev/null命令启动了一个线程,以创建一个完全利用一个内核的无限进程。

现在,如果我们看一下 中的图表htop,我们可以看到平均负载 ( Avgbar) 是12.7%,对应于 100% 使用的一个核心,这也是所有 CPU 资源的 1/8:

(100% = 100 / 8 = 12.5%) + some background processes ? 12.7%.
Run Code Online (Sandbox Code Playgroud)

顶

还可以注意到该命令100%CPU%列中有一个值,这是因为它是相对于一个核心而不是所有核心。