Android中的dumpsys cpuinfo:解释此命令的结果 [英] dumpsys cpuinfo in Android: Interpreting the results of this command

查看:195
本文介绍了Android中的dumpsys cpuinfo:解释此命令的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在查看以下命令"adb shell dumpsys cpuinfo"的内容,我想知道这些报告的值是否为上次的平均值?

I'm looking at the out of the following command "adb shell dumpsys cpuinfo" where I want to know if these reported values are averages over previous time ?

    D:\Android_Dev\Android_sdk\platform-tools>adb shell dumpsys cpuinfo
Load: 4.03 / 3.43 / 2.44
CPU usage from 23770ms to 16630ms ago:
  58% 1844/logd: 58% user + 0% kernel / faults: 3 minor
  50% 3895/com.google.android.wearable.app:ui: 41% user + 9.3% kernel / faults: 1798 minor
  26% 1864/adbd: 2.8% user + 23% kernel / faults: 1243 minor
  22% 4880/logcat: 7.8% user + 15% kernel
  9.7% 7834/kworker/0:2: 0% user + 9.7% kernel
  4.9% 2198/system_server: 2.6% user + 2.2% kernel / faults: 76 minor

我的问题如下:

  1. 这里的故障代表什么?
  2. 这些百分比值的总和不等于100,代表什么?
  3. 这些百分比值是各个过程的平均值,例如logd的58%吗?
  4. CPU usage from 23770ms to 16630ms ago:是什么意思?这是否意味着这些值是过去23到16秒的平均值?
  1. what does faults represent here ?
  2. what does these percentage values represent because they don't add up to 100 ?
  3. are these percentage values averages of the respective processes such as as 58% for logd?
  4. CPU usage from 23770ms to 16630ms ago: what does this mean ? does it mean that these values are the average from last 23 to 16 seconds ?

推荐答案

adb shell dumpsys cpuinfo

显示来自/proc/stat和/proc/(pid)/stat的信息

shows info from /proc/stat and /proc/(pid)/stat

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

1.what does faults represent here ?

页面错误.
轻微故障为次要".

Page faults.
"minor" for minor faults.

来自ProcessCpuTracker.java

from 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数据[9]和数据[11].

They are /proc/(pid)/stat data[9] and data[11].

2.它们加起来不等于100

2.they don't add up to 100

http://blog.scoutapp.com/articles/2009/07/31/了解平均负载量
(来自解释dumpsys cpuinfo 的链接页面)

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
(Linked page from interpreting dumpsys cpuinfo)

在多处理器系统中,总和可以超过100%.

With multi-processor system, sum can be more than 100%.

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

3.are these percentage values averages of the respective processes

来自ProcessCpuTracker.java

from ProcessCpuTracker.java

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

打印第二个参数(用户+ ...)/第三个参数(总计时间).

2nd parameter(user+...) / 3rd parameter(totalTime) is printed.

4.CPU使用时间从23770毫秒更改为16630毫秒之前

4.CPU usage from 23770ms to 16630ms ago

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

Times are based on times when stat data cached by ProcessCpuTracker is updated.

来自ProcessCpuTracker.java

from 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()=>服务-> dump()


[Related sources]
https://android.googlesource.com/platform/frameworks/native/+/master/cmds/dumpsys/dumpsys.cpp
main() => service->dump()

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

https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/am/ActivityManagerService.java
CpuBinder.dump() is called
mProcessCpuThread updates stat cache. (updateCpuStatsNow() is called)

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

https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad() prints CPU load
printCurrentState() prints per process stats

这篇关于Android中的dumpsys cpuinfo:解释此命令的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆