platform_system_core/bootstat
Mark Salyzyn afd66f2fd3 llkd: bootstat: propagate detailed livelock canonical boot reason
Report kernel_panic,sysrq,livelock,<state> reboot reason via last
dmesg (pstore console).  Add ro.llk.killtest property, which will
allow reliable ABA platforms to drop kill test and go directly
to kernel panic.  This should also allow some manual unit testing
of the canonical boot reason report.

New canonical boot reasons from llkd are:
- kernel_panic,sysrq,livelock,alarm llkd itself locked up (Hail Mary)
- kernel_panic,sysrq,livelock,driver uninterrruptible D state
- kernel_panic,sysrq,livelock,zombie uninterrruptible Z state

Manual test assumptions:
- llkd is built by the platform and landed on system partition
- unit test is built and landed in /data/nativetest (could
  land in /data/nativetest64, adjust test correspondingly)
- llkd not enabled, ro.llk.enable and ro.llk.killtest
  are not set by platform allowing test to adjust all the
  configuration properties and start llkd.
- or, llkd is enabled, ro.llk.enable is true, and killtest is
  disabled, ro.llk.killtest is false, setup by the platform.
  This breaks the go/apct generic operations of the unit test
  for llk.zombie and llk.driver as kernel panic results
  requiring manual intervention otherwise.  If test moves to
  go/apct, then we will be forced to bypass these tests under
  this condition (but allow them to run if ro.llk.killtest
  is "off" so specific testing above/below can be run).

for i in driver zombie; do
        adb shell su root setprop ro.llk.killtest off
        adb shell /data/nativetest/llkd_unit_test/llkd_unit_test --gtest_filter=llkd.${i}
        adb wait-for-device
        adb shell su root setprop ro.llk.killtest off
        sleep 60
        adb shell getprop sys.boot.reason
        adb shell /data/nativetest/llkd_unit_test/llkd_unit_test --gtest_filter=llkd.${i}
done

Test: llkd_unit_test (see test assumptions)
Bug: 33808187
Bug: 72838192
Change-Id: I2b24875376ddfdbc282ba3da5c5b3567de85dbc0
2018-04-18 14:02:16 -07:00
..
.clang-format bootstat: Set up clang-format-2 for bootstat. 2017-05-24 10:19:25 -07:00
Android.bp Fix PDK build 2018-02-14 03:03:28 +00:00
AndroidTest.xml Add test config to bootstat_tests 2017-04-05 14:49:47 +00:00
OWNERS Add OWNERS. 2017-12-07 13:30:03 -08:00
README.md bootstat: Record the time since factory reset on init. 2016-02-24 11:01:03 -08:00
boot_event_record_store.cpp bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_event_record_store.h bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_event_record_store_test.cpp bootstat: clang-format rebase 2017-09-20 11:27:56 -07:00
boot_reason_test.sh bootstat: refine "Kernel panic - not syncing" 2018-03-22 13:57:31 -07:00
bootstat-debug.rc bootstat: test: inject ro.boot.bootreason values 2017-10-11 13:48:33 -07:00
bootstat.cpp llkd: bootstat: propagate detailed livelock canonical boot reason 2018-04-18 14:02:16 -07:00
bootstat.rc bootstat: reduce overall boot time 2017-09-19 07:36:34 -07:00
testrunner.cpp bootstat: Fix the base includes to be AOSP-friendly. 2016-01-20 01:28:48 +00:00

README.md

bootstat

The bootstat command records boot events (e.g., firmware_loaded, boot_complete) and the relative time at which these events occurred. The command also aggregates boot event metrics locally and logs the metrics for analysis.

Usage: bootstat [options]
options include:
  -h, --help            Show this help
  -l, --log             Log all metrics to logstorage
  -p, --print           Dump the boot event records to the console
  -r, --record          Record the timestamp of a named boot event
  --record_boot_reason  Record the reason why the device booted
  --record_time_since_factory_reset Record the time since the device was reset

Relative time

The timestamp recorded by bootstat is the uptime of the system, i.e., the number of seconds since the system booted.

Recording boot events

To record the relative time of an event during the boot phase, call bootstat with the -r option and the name of the boot event.

$ bootstat -r boot_complete

The relative time at which the command runs is recorded along with the name of the boot event to be persisted.

Logging boot events

To log the persisted boot events, call bootstat with the -l option.

$ bootstat -l

bootstat logs all boot events recorded using the -r option to the EventLog using the Tron histogram. These logs may be uploaded by interested parties for aggregation and analysis of boot time across different devices and versions.

Printing boot events

To print the set of persisted boot events, call bootstat with the -p option.

$ bootstat -p
Boot events:
------------
boot_complete   71