首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同进程的%cpu输出通过从busybox和procps-ng通过顶部

不同进程的%cpu输出通过从busybox和procps-ng通过顶部
EN

Stack Overflow用户
提问于 2016-12-14 03:09:20
回答 1查看 950关注 0票数 1

我在ARM上运行了一个ARM。有一个默认的top来自busybox 1.13.2。我通过交叉编译构建了一个procps-ng 3.3.11,以便在这个Linux上运行。我发现流程的%cpu通过来自busyboxprocps-ngtop输出是不同的。

例如,%cpu的一个进程,procps-ng top显示约30%,而busybox top只显示约10%。来自procps-ng topbusybox top的总procps-ng top是相同的。

然后,我阅读了busyboxprocps-ng的计算源代码。我发现,对于一个进程的%cpu,它们确实有不同的计算公式。

代码语言:javascript
复制
- busybox top:  
    CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks   
    (pcpu is delta of sys+user time between samples)  

- procps-ng top: 
    CPU% = s->pcpu/total_cpu_ticks  

为什么这两个项目选择不同的计算公式?它们是为不同的应用程序设计的吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 05:43:14

已经与procps ng团队讨论了这个问题,以下是重点:

2016年12月28日下午03:12,克雷格·斯莫尔写道: 可能有一种不同的方式来看待这个问题。我要说的第一件事是,busybox应该是在模仿或模仿主程序应该做什么,所以如果busybox和实际程序有什么不同,我会说busybox是错误的。它就像busybox ls打印的文件与实际ls不同。 让我们再看看这个公式:

  • 箱顶: CPU% = s->pcpu/sum(s->pcpu) * busy_cpu_ticks/total_cpu_ticks (pcpu是样品之间sys+user时间的增量)
  • 最上面的程序: CPU% = s->pcpu/total_cpu_ticks

现在让我们重新安排一下:

  • 箱顶: CPU% = s->pcpu/total_cpu_ticks * busy_cpu_ticks/sum(s->pcpu) CPU% = top_CPU% * busy_cpu_ticks/sum(s->pcpu) (pcpu是样品之间sys+user时间的增量)

这就是区别所在。busybox增加了busy_cpu_ticks/sum(s->pcpu)与top计算结果的比率。这一比率可写为:

RATIO = Sum(Usr + Nice + System + Irq + sirq + steal) / Sum(Usr + System)

您可以在busybox源代码的read_cpu_jiffy中看到这种情况。我不明白这个比率是怎么做的,也不明白为什么要这样做。特别是当你试图模仿的程序没有它。

procps说,在这个周期的总可用jiffies中,X%被这个程序所使用。百事箱在里面放了一些奇怪的比例。因此,如果一个进程在其系统和用户部分中使用10%的CPU,则顶部显示10%。如果该过程在用户和系统中的时间为50%,则busybox将显示20% (10% x 100/50)。

我不知道他们为什么这么做。

详情请参阅讨论连结:

讨论:不同进程的%cpu输出通过顶部从busybox和procps-ng

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41134205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档