计算Android中进程的CPU使用情况

我正在试图计算Android中的一个进程的CPU使用情况如下,但我不知道,如果它的权利,由于产量产生。

从jiffie转换为seconds:jiffie / hertz

第一步:使用/proc/uptime文件的第一个参数获取正常/proc/uptime

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

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

第四步:在Linux 2.6之后,从/proc/[pid]/stat获得进程的启动时间(22),该值用时钟滴答表示(除以sysconf(_SC_CLK_TCK))。

第5步:获取自启动以来的进程总(uptime - (starttime / hertz) (因为运行时间以秒为(uptime - (starttime / hertz) ,启动(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 0 -1 1077952832 8971 0 1 0 38 32 0 0 20 0 25 0 13137 983830528 14330 4294967295 1 1 0 0 0 0 4612 0 38136 4294967295 0 0 17 5 0 0 0 0 0 0 0 0 0 0 0 0 0

参考: 如何从/ proc / pid / stat获取应用程序的总CPU使用率?

Solutions Collecting From Web of "计算Android中进程的CPU使用情况"

错误的解释

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

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

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

获取数据

  • 正常运行时间226.06
  • 上午38时钟滴答
  • stime32时钟滴答
  • 开始时间13137时钟刻度
  • 赫兹100 (Linux内核USER_HZ常量)
    • 这是在未经修改的Android系统的假设之下。

计算

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使用率通常较低。

虽然在大多数Android设备上的价值是100,但在某些设备上它可能是不同的价值。 那是因为这个值取决于CPU的架构。 对于USER_HZ常量值, ARM CPU将有100个 CPU,但是如您在这里可以看到的那样, x86 CPU将有1000个 CPU。