blob: f151a3b603d856a25dca18ea75f55d8fca41ea06 [file] [log] [blame] [view] [edit]
# CrOS bootstat
This is the Chromium OS 'bootstat' utility. The utility is used
to generate timestamps and other performance statistics during
system boot.
## CLI Specification
### bootstat
```sh
bootstat <event-name>
```
This command gathers and records the contents of `/proc/uptime` and disk
statistics for the boot disk (the full disk, not the boot partition), and
associates the data with the passed in `<event-name>`.
### bootstat_get_last
```sh
bootstat_get_last <event-name> [ <stat> [before <value>] ... ]
```
Print on standard output the value of the selected statistics recorded when
the specified event occurred. These are the available statistics:
* `time`: Total time since kernel startup at the time of the event.
* `time-ms`: Total time since kernel startup at the time of the event
converted to milliseconds.
* `read-sectors`: Total sectors read from any partition of the boot device
since kernel startup.
* `write-sectors`: Total sectors written to any partition of the boot device
since kernel startup.
If multiple statistics are requested, they are reported in order, one
per line. If no statistics are listed on the command line, the
default is to report `time`.
If an event has occurred more than once since kernel startup, only
the statistics from the last occurrence are reported.
If the `before` <value> option is specified after the statistics name the
reported event will be from the last occurrence having value less than the
specified `before` value. This way for time events it returns the last event
happened before the specified time. For the sectors count statistics it will
return values that are strictly less than the value specified.
## API Specification
The C and C++ API is defined in [`bootstat.h`](./bootstat.h).
See that header for specification details.
## Design and Implementation Details
Uptime data are stored in a file named `/run/bootstat/uptime-<event-name>`;
disk statistics are stored in a file named `/run/bootstat/disk-<event-name>`.
This convention is a concession to pre-existing code that depends on
these files existing with these specific names, including the
[platform.BootPerf] test, the boot-complete upstart job,
and the Chrome code to report boot time on the login screen.
New code should treat the file names as an implementation detail,
not as the interface. You should not add new code that depends on
the file names; instead, you should enhance the bootstat command
and/or library to provide access to the data you need.
[platform.BootPerf]: https://chromium.googlesource.com/chromiumos/platform/tast-tests/+/HEAD/src/chromiumos/tast/remote/bundles/cros/platform/boot_perf.go