aosp12/system/extras/perf2cfg
hcl 7be3fd486c init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
..
doc init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
perf2cfg init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
tests init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
.style.yapf init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
Android.bp init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
OWNERS init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
README.md init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
perf2cfg.py init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
perf2cfg_test.py init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
pylintrc init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00

README.md

perf2cfg

perf2cfg annotates a control-flow graph (CFG) file with profiling information from simpleperf data files. A CFG file can be generated by the Android Runtime compiler using the --dump-cfg=<cfg-file> option. The tool outputs an annotated CFG file with the following added information:

  • Methods are annotated with their contribution relative to the total profile.
  • Basic blocks and assembly instructions are annotated with their contribution relative to the method profile.
  • Basic blocks are colored according to their contribution to the method profile.

The tool does not modify any input files and assumes the input CFG file can be parsed by c1visualizer. The input files must have all been generated for the same architecture.

Usage

usage: perf2cfg [-h|--help] --cfg CFG --perf-data PERF_DATA [PERF_DATA ...]
                [--output-file OUTPUT_FILE] [-e|--events EVENTS]
                [--primary-event PRIMARY_EVENT]

Annotates a CFG file with profiling information from simpleperf data files.

optional arguments:
  -h, --help            Show this help message and exit.
  --output-file OUTPUT_FILE
                        A path to the output CFG file.
  -e EVENTS, --events EVENTS
                        A comma-separated list of events only to use for
                        annotating a CFG (default: use all events found in
                        perf data). An error is reported if the events are not
                        present in perf data.
  --primary-event PRIMARY_EVENT
                        The event to be used for basic blocks hotness analysis
                        (default: cpu-cycles). Basic blocks are color
                        highlighted according to their hotness. An error is
                        reported if the primary event is not present in perf
                        data.

required arguments:
  --cfg CFG             The CFG file to annotate.
  --perf-data PERF_DATA [PERF_DATA ...]
                        The perf data files to extract information from.

Examples

Annotate a CFG file:

perf2cfg --cfg art.cfg --perf-data perf.data

Annotate a CFG file with multiple simpleperf data files:

perf2cfg --cfg art.cfg \
    --perf-data perf_event1.data perf_event2.data perf_event3.data

Color basic blocks according to cache-misses events:

perf2cfg --cfg art.cfg --perf-data perf.data \
    --primary-event cache-misses

Display a subset of events from the simpleperf data file:

perf2cfg --cfg art.cfg --perf-data perf.data \
    --events cpu-cycles,cache-misses

Method annotations

Once the annotated CFG file has been opened in c1visualizer, method annotations can be seen by enabling the "Show Package Names" and "Sort List of Compilations" options in the top-left "Compiled Methods" panel.

Basic block coloring

perf2cfg implements basic block coloring by adding specific flags to the output CFG file. These flags have the following names and meanings:

  • LO (low): the basic block is responsible for 1 to 10% of its method primary event.
  • MO (moderate): for 10 to 30%.
  • CO (considerable): for 30 to 50%
  • HI (high): for 50 to 100%.

To use this feature, custom flags have to be defined in c1visualizer:

  1. Open c1visualizer.
  2. Click on the "Tools" menu entry and "Options" to open the options window.
  3. Click on the "Control Flow Graph" button if it isn't already selected.
  4. On the right of the "Flags" list, click on the "New" button.
  5. Enter "LO" in the text field and press "OK".
  6. Select the newly created flag in the list and click on the color picker button.
  7. Select an appropriate color and press "OK".
  8. Repeat steps 4 to 7 for the remaining flags (MO, CO, and HI).

Alternatively, flags can be defined by editing a properties file located at: ~/.c1visualizer/dev/config/Preferences/at/ssw/visualizer/cfg/options/CfgPreferences.properties. The directory hierarchy and the file itself might have to be created.

Replace the file contents with the following line to use a yellow to red gradient:

flagsPreference=LO(255,210,0);MO(253,155,5);CO(253,100,5);HI(245,40,5)

For colorblind people, this green gradient can be used as an alternative:

flagsPreference=LO(235,235,50);MO(210,210,40);CO(185,185,25);HI(155,155,15)

Hacking

A diagram of the finite state machine used to parse the input CFG file can be generated with the following command (requires Graphviz):

dot -Tpng doc/FSM.dot -o doc/FSM.png