Android系统top指令cpu占用分析

Android使用top指令,在多核cpu占用统计中,cpu占用比与linux不一致,其统计的为所有核心占用百分比,非单核平均占用。
比如4核cpu下,top指令统计出的所有进程cpu占用百分比之和是100%,而非400%,具体的分析可从top.c源码中分析:
源码路径:
system/core/toolbox/top.c
读取/proc/stat文件:
file = fopen("/proc/stat", “r”);
fscanf(file, “cpu %lu %lu %lu %lu %lu %lu %lu”, &new_cpu.utime, &new_cpu.ntime, &new_cpu.stime,
&new_cpu.itime, &new_cpu.iowtime, &new_cpu.irqtime, &new_cpu.sirqtime);
上面读取的是4核cpu总共的运行时间,/proc/stat文件内容如下:
cpu 3055548 471585 1702314 676282 4341 22 5840 0 0 0--------------读取的该行内容,为4核心总共的运行时间。
cpu0 717093 93095 488195 157670 837 2 3895 0 0 0
cpu1 800617 139532 431233 153768 898 12 719 0 0 0
cpu2 780953 122609 407102 161474 1373 6 623 0 0 0
cpu3 756885 116349 375784 203370 1233 2 603 0 0 0

将当前时间点读取到的cpu时间存为old_cpu中。
memcpy(&old_cpu, &new_cpu, sizeof(old_cpu));

经过时间段(-d指定)后读取到cpu占用时间减去上一个时间点的时间,注意这里仍然是4核总共的。
total_delta_time = (new_cpu.utime + new_cpu.ntime + new_cpu.stime + new_cpu.itime
+ new_cpu.iowtime + new_cpu.irqtime + new_cpu.sirqtime)
- (old_cpu.utime + old_cpu.ntime + old_cpu.stime + old_cpu.itime
+ old_cpu.iowtime + old_cpu.irqtime + old_cpu.sirqtime);

打印top表头:
printf("%5s %2s %4s %1s %5s %7s %7s %3s %-8s %s\n", “PID”, “PR”, “CPU%”, “S”, “#THR”, “VSS”, “RSS”, “PCY”, “UID”, “Name”);
打印各个进程的信息:
printf("%5d %2d %3" PRIu64 “%% %c %5d %6” PRIu64 “K %6” PRIu64 “K %3s %-8.8s %s\n”,
proc->pid, proc->prs, proc->delta_time * 100 / total_delta_time, proc->state, proc->num_threads,
proc->vss / 1024, proc->rss * getpagesize() / 1024, proc->policy, user_str, proc->name[0] != 0 ? proc->name : proc->tname);

proc->delta_time * 100 / total_delta_time这就是进程占用的cpu值,这个total_delta_time是上面计算的4核总共的时间片占用。proc->delta_time为/proc/pid/stat中,所有的子线程占用的单核心cpu时间片,加和得到。

所以android中的top打印出的数值都是4核心为分母计算的,不是单核的占用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值