首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算Android中进程的CPU使用量

计算Android中进程的CPU使用量
EN

Stack Overflow用户
提问于 2015-07-04 19:15:30
回答 2查看 4.1K关注 0票数 2

我试图按以下方式计算Android中进程的CPU使用情况,但是我不确定它是否正确,这是由于所产生的输出。

从抖动转换为秒:跳频/赫兹

第一步:使用/proc/uptime文件的第一个参数获得正常运行时间。

第二步:/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq获取每秒的时钟滴答数。

第三步:/proc/[pid]/stat获取流程(utime(14) +stime(15))参数所花费的总时间

第4步:/proc/[pid]/stat获得进程的启动时间(22),值在Linux2.6之后以时钟刻度表示(除以sysconf(_SC_CLK_TCK))。

第5步:获得自启动(uptime - (starttime / hertz)以来进程的总运行时间(因为正常运行时间以秒为单位,而启动时间为时钟滴答)。

第6步:获得CPU使用率百分比((totaltime / hertz) / elapsedTime) * 100

计算后的输出约为5.702244483458246E-6,约等于~0.000005702244483。

编辑

输出

步骤1: 226.06 1211.19

步骤2: 1000000

步骤3: 9347 (example.com) S 3573 3573 0 -1 1077952832 8971 0 1 0 38 0 0 2 0 0 25 0 13137 983830528 4294967295 1 0 0 0 4612 0 38136 429496 7295 0 0 17 5 0 0 0

参考资料:如何从/proc/pid/stat获得应用程序的CPU总使用量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 16:41:16

错误解释

我怀疑您使用/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq中的值作为hertz值。这是不正确的,因为该文件给出了CPU硬件时钟频率,但您必须使用Linux内核时钟频率作为hertz值。

CPU硬件时钟和Linux内核时钟是不同的。安卓运行的Linux内核有自己的定时器(时钟),它以一定的频率更新;这个定时器更新的频率是内核赫兹(HZ)值。

对于历史原因,Linux和sys文件中列出的时钟滴答值通过Linux内核USER_HZ常量从内核HZ频率缩放到公共频率。这是一个USER_HZ常数,我们在计算中必须使用它作为hertz值。

数据的获取

  • 正常运行时间226.06
  • utime38时钟滴答
  • stime32时钟滴答
  • starttime13137时钟滴答声
  • Hertz100 (Linux内核USER_HZ常量)

计算

total_time = utime + stime = 38 + 32 = 70

seconds = uptime - (starttime / Hertz) = 226.06 - (13137 / 100) = 94.69

cpu_usage = 100 * ((total_time / Hertz) / seconds) = 100 * ((70 / 100) / 94.69) = 0.7392...

解决方案

您的进程的总CPU使用量约为0.739%。如果这看起来很小,请记住,您的进程与系统上的所有其他进程共享CPU :大多数正常进程在其生命的大部分时间内都处于空闲状态,因此任何一个进程的CPU使用率通常都很低。

票数 6
EN

Stack Overflow用户

发布于 2016-11-02 20:53:24

虽然在大多数Android设备上,这个值确实是100,但在某些设备上它可能是一个不同的值。这是因为这个值取决于CPU的体系结构。ARM CPU将有100作为USER_HZ常量值,但是x86 CPU将有1000,正如您可以看到的这里

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

https://stackoverflow.com/questions/31224313

复制
相关文章

相似问题

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