Android 中的 dumpsys cpuinfo:解释此命令的结果
dumpsys cpuinfo in Android: Interpreting the results of this command
我正在查看以下命令 "adb shell dumpsys cpuinfo" 的输出,我想知道这些报告的值是否是之前时间的平均值?
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
我的问题如下:
- 故障在这里代表什么?
- 这些百分比值代表什么,因为它们加起来不等于 100?
- 这些百分比值是各个进程的平均值,例如 logd 的 58%?
CPU usage from 23770ms to 16630ms ago:
这是什么意思?这是否意味着这些值是最后 23 到 16 秒的平均值?
adb shell dumpsys cpuinfo
显示来自 /proc/stat 和 /proc/(pid)/stat
的信息
1.what does faults represent here ?
页面错误。
"minor" 小故障。
来自 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.they don't add up to 100
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
(来自 interpreting dumpsys cpuinfo 的链接页面)
多处理器系统,总和可以超过100%。
3.are these percentage values averages of the respective processes
来自 ProcessCpuTracker.java
printProcessCPU(...) {
...
printRatio(pw, user+system+iowait+irq+softIrq, totalTime);
...
}
打印第二个参数(user+...) / 第三个参数(totalTime)。
4.CPU usage from 23770ms to 16630ms ago
时间基于 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 更新统计缓存。 (调用了 updateCpuStatsNow())
https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad() 打印 CPU 负载
printCurrentState() 打印每个进程统计信息
我正在查看以下命令 "adb shell dumpsys cpuinfo" 的输出,我想知道这些报告的值是否是之前时间的平均值?
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
我的问题如下:
- 故障在这里代表什么?
- 这些百分比值代表什么,因为它们加起来不等于 100?
- 这些百分比值是各个进程的平均值,例如 logd 的 58%?
CPU usage from 23770ms to 16630ms ago:
这是什么意思?这是否意味着这些值是最后 23 到 16 秒的平均值?
adb shell dumpsys cpuinfo
显示来自 /proc/stat 和 /proc/(pid)/stat
的信息1.what does faults represent here ?
页面错误。
"minor" 小故障。
来自 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.they don't add up to 100
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
(来自 interpreting dumpsys cpuinfo 的链接页面)
多处理器系统,总和可以超过100%。
3.are these percentage values averages of the respective processes
来自 ProcessCpuTracker.java
printProcessCPU(...) {
...
printRatio(pw, user+system+iowait+irq+softIrq, totalTime);
...
}
打印第二个参数(user+...) / 第三个参数(totalTime)。
4.CPU usage from 23770ms to 16630ms ago
时间基于 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 更新统计缓存。 (调用了 updateCpuStatsNow())
https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad() 打印 CPU 负载
printCurrentState() 打印每个进程统计信息