Android中的dumpsys cpuinfo:解释此命令的结果

时间:2016-10-21 22:35:34

标签: android performance adb ddms dumpsys

我正在查看以下命令“adb shell dumpsys cpuinfo”,我想知道这些报告的值是否是之前的平均值?

CPU usage from 23770ms to 16630ms ago:

我的问题如下:

  1. 故障在这里代表什么?
  2. 这些百分比值代表什么,因为它们不加100?
  3. 是各个过程的平均值的百分比,例如logd的58%?
  4. applicationHost.config这是什么意思?这是否意味着这些值是过去23到16秒的平均值?

1 个答案:

答案 0 :(得分:5)

adb shell dumpsys cpuinfo

显示来自/ proc / stat和/ proc /(pid)/ stat

的信息
  

1.故障在这里代表什么?

页面错误。
对于小故障,“轻微”。

来自ProcessCpuTracker.java的

collectStats(...) {
  ...
  final long[] procStats = mProcessStatsData;
  if (!Process.readProcFile(st.statFile.toString(),
  PROCESS_STATS_FORMAT, null, procStats, null)) {
  continue;
  }
  ...
  final long minfaults = procStats[PROCESS_STAT_MINOR_FAULTS];
  final long majfaults = procStats[PROCESS_STAT_MAJOR_FAULTS];
}

private static final int[] PROCESS_STATS_FORMAT = new int[] {
  ...
  PROC_SPACE_TERM|PROC_OUT_LONG,                  // 10: minor faults
  ...
  PROC_SPACE_TERM|PROC_OUT_LONG,                  // 12: major faults
  ...
};

它们是/ proc /(pid)/ stat data [9]和data [11]。

  

2.他们不加100个

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
(来自interpreting dumpsys cpuinfo的链接页面)

使用多处理器系统,总和可以超过100%。

  

3.这些百分比值是各个过程的平均值

来自ProcessCpuTracker.java的

printProcessCPU(...) {
  ...
  printRatio(pw, user+system+iowait+irq+softIrq, totalTime);
  ...
}

打印第二个参数(用户+ ...)/第三个参数(totalTime)。

  

4.CPU使用从23770ms到16630ms前

时间基于ProcessCpuTracker缓存的统计数据更新的时间。

来自ProcessCpuTracker.java的

update() {
  final long nowUptime = SystemClock.uptimeMillis();
  ...
  mLastSampleTime = mCurrentSampleTime;
  mCurrentSampleTime = nowUptime;
  ...
}

[相关来源]
https://android.googlesource.com/platform/frameworks/native/+/master/cmds/dumpsys/dumpsys.cpp
main()=>服务 - >转储()

https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/am/ActivityManagerService.java
CpuBinder.dump()被称为
mProcessCpuThread更新stat缓存。 (调用updateCpuStatsNow())

https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad()打印CPU负载
printCurrentState()打印每个进程统计信息