This is cpufreq-bench, a microbenchmark for the cpufreq framework.

Purpose
=======

What is this benchmark for:
  - Identify worst case performance loss when doing dynamic frequency
    scaling using Linux kernel governors
  - Identify average reaction time of a governor to CPU load changes
  - (Stress) Testing whether a cpufreq low level driver or governor works
    as expected
  - Identify cpufreq related performance regressions between kernels
  - Possibly Real time priority testing? -> what happens if there are
    processes with a higher prio than the governor's kernel thread
  - ...

What this benchmark does *not* cover:
  - Power saving related regressions (In fact as better the performance
    throughput is, the worse the power savings will be, but the first should
    mostly count more...)
  - Real world (workloads)


Description
===========

cpufreq-bench helps to test the condition of a given cpufreq governor.
For that purpose, it compares the performance governor to a configured
powersave module.


How it works
============
You can specify load (100% CPU load) and sleep (0% CPU load) times in us which
will be run X time in a row (cycles):

         sleep=25000
         load=25000
         cycles=20

This part of the configuration file will create 25ms load/sleep turns,
repeated 20 times.

Adding this:
         sleep_step=25000
         load_step=25000
         rounds=5
Will increase load and sleep time by 25ms 5 times.
Together you get following test:
25ms  load/sleep time repeated 20 times (cycles).
50ms  load/sleep time repeated 20 times (cycles).
..
100ms load/sleep time repeated 20 times (cycles).

First it is calibrated how long a specific CPU intensive calculation
takes on this machine and needs to be run in a loop using the performance
governor.
Then the above test runs are processed using the performance governor
and the governor to test. The time the calculation really needed
with the dynamic freq scaling governor is compared with the time needed
on full performance and you get the overall performance loss.


Example of expected results with ondemand governor:

This shows expected results of the first two test run rounds from
above config, you there have:

100% CPU load (load) | 0 % CPU load (sleep)  | round
   25 ms             |    25 ms              |   1
   50 ms             |    50 ms              |   2

For example if ondemand governor is configured to have a 50ms
sampling rate you get:

In round 1, ondemand should have rather static 50% load and probably
won't ever switch up (as long as up_threshold is above).

In round 2, if the ondemand sampling times exactly match the load/sleep
trigger of the cpufreq-bench, you will see no performance loss (compare with
below possible ondemand sample kick ins (1)):

But if ondemand always kicks in in the middle of the load sleep cycles, it
will always see 50% loads and you get worst performance impact never
switching up (compare with below possible ondemand sample kick ins (2))::

      50     50   50   50ms ->time
load -----|     |-----|     |-----|     |-----|
          |     |     |     |     |     |     |
sleep     |-----|     |-----|     |-----|     |----
    |-----|-----|-----|-----|-----|-----|-----|----  ondemand sampling (1)
         100    0    100    0    100    0    100     load seen by ondemand(%)
       |-----|-----|-----|-----|-----|-----|-----|--   ondemand sampling (2)
      50     50    50    50    50    50    50        load seen by ondemand(%)

You can easily test all kind of load/sleep times and check whether your
governor in average behaves as expected.


ToDo
====

Provide a gnuplot utility script for easy generation of plots to present
the outcome nicely.


cpufreq-bench Command Usage
===========================
-l, --load=<long int>           initial load time in us
-s, --sleep=<long int>          initial sleep time in us
-x, --load-step=<long int>      time to be added to load time, in us
-y, --sleep-step=<long int>     time to be added to sleep time, in us
-c, --cpu=<unsigned int>        CPU Number to use, starting at 0
-p, --prio=<priority>           scheduler priority, HIGH, LOW or DEFAULT
-g, --governor=<governor>       cpufreq governor to test
-n, --cycles=<int>              load/sleep cycles to get an avarage value to compare
-r, --rounds<int>               load/sleep rounds
-f, --file=<configfile>         config file to use
-o, --output=<dir>              output dir, must exist
-v, --verbose                   verbose output on/off

Due to the high priority, the application may not be responsible for some time.
After the benchmark, the logfile is saved in OUTPUTDIR/benchmark_TIMESTAMP.log

