dumpsys cpuinfo в Android: интерпретация результатов этой команды

Я смотрю на следующую команду «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

Мои вопросы заключаются в следующем:

  1. при чем тут ошибки?
  2. что представляют собой эти процентные значения, потому что они не составляют в сумме 100?
  3. являются ли эти процентные значения средними для соответствующих процессов, например 58% для logd?
  4. CPU usage from 23770ms to 16630ms ago: что это значит? означает ли это, что эти значения являются средними за последние 23–16 секунд?

person utengr    schedule 21.10.2016    source источник
comment
Возможный дубликат интерпретации dumpsys cpuinfo   -  person Toris    schedule 22.10.2016
comment
@Toris Это не дубликат этого вопроса. у меня это уже есть. Там нет никакого объяснения для всех этих 4 вопросов. Я тщательно просмотрел упомянутые там ссылки. Вот почему я удалил часть загрузки, как это объяснено там.   -  person utengr    schedule 22.10.2016


Ответы (1)


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);
  ...
}

Печатается 2-й параметр (пользователь+...) / 3-й параметр (общее время).


4. Использование ЦП с 23770 мс до 16630 мс назад

Время основано на времени обновления статистических данных, кэшированных 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() => 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/core/java/com/android/internal/os/ProcessCpuTracker.java
printCurrentLoad() выводит загрузку ЦП
printCurrentState() выводит статистику по процессам

person Toris    schedule 22.10.2016
comment
Большое спасибо Торис. Это то, что я искал. - person utengr; 24.10.2016
comment
Мне все еще интересно, могу ли я как-то изменить время этих состояний, таких как последние дампси за последние 5 минут и т. Д. - person utengr; 24.10.2016
comment
@ zub12 zub12, если у dumpsys есть такая опция, это лучше всего, но я думаю, что на данный момент ответом является расчет на основе выходных данных или получение информации из / proc / (pid) / stat. - person Toris; 24.10.2016