Introduction
------------

The purpose of idlestat is to measure how long we have been in the different
idle and operating states.

Idlestat uses kernel's FTRACE function to monitor and capture C-state and
P-state transitions of CPUs over a time interval. It extracts the following
information from trace file:
	- Times when CPUs entered and exited a certain C-state
	- Times when CPUs entered and exited a certain P-state
	- Raised IRQs

Following a successful run, idlestat calculates and reports the following
information:
	- Total, average, minimum and maximum time spent in each C-state,
	per-CPU.
	- Total, average, minimum and maximum time spent in each P-state,
	per-CPU.
	- Total, average, minimum and maximum time during which all CPUs in
	a cluster were in the same C-state, per-cluster.
	- Number of times a certain IRQ caused a CPU to exit idle state,
	per-CPU and per-IRQ

Requirements
------------

1. It must be run as root in order to access /sys/kernel/debug.
2. It requires tracing to be enabled in the kernel.

Also, IPI reporting requires appropriate tracepoints in the kernel.
This is available for ARM and ARM64 since v3.17-rc1.  A patch for X86
was submitted but still not merged upstream.  It can be retrieved here:
https://lkml.org/lkml/2014/9/17/745

Help
----
./idlestat -h will show all the options

Example Usage
-------------

Trace mode:
sudo ./idlestat --trace -f /tmp/mytrace -t 10

Reporting mode (/tmp/mytrace already contains traces):
sudo ./idlestat --import -f /tmp/mytrace

Trace mode with workload (e.g. sleep, cyclictest):
sudo ./idlestat --trace -f /tmp/mytrace -t 10 -- /bin/sleep 10
sudo ./idlestat --trace -f /tmp/myoutput -t 10 -- cyclictest -t 4 -i 2000 -q -D 5

Selective trace output
sudo ./idlestat --import -f /tmp/mytrace -w
sudo ./idlestat --import -f /tmp/mytrace -c -p
sudo ./idlestat --import -f /tmp/mytrace -p -w

Bugs
----

If you believe that you have encountered a bug, please file a bug report on
Linaro Bugzilla at https://bugs.linaro.org. You may be prompted to register
for a new account first.

Once you log in, click on
"New" --> "Power Management" --> "Idlestat" as the component. Then fill
in the form.

Helpful tips for filing a bug report:
    1. Provide logs, be verbose as possible
    2. Outline steps to reproduce the bug
    3. Describe the environment you are running idlestat on (e.g. Android,
        OpenEmbedded, Ubuntu, etc.)
    4. What hardware you're using

Contribution
------------

If you wish to submit patches to improve idlestat, please send them to
the Linaro sched-tools mailing list at sched-tools@lists.linaro.org with
"PATCH IDLESTAT" as the subject prefix.

Feedback
--------

Please submit questions and comments to the Linaro sched-tools mailing list at
sched-tools@lists.linaro.org with "idlestat" as part of the subject.
