You copied the Doc URL to your clipboard.

Creating custom performance counters with kernel space gator

In addition to the hardware-specific and Linux performance counters that you can configure using the Counter Configuration dialog, the gator daemon and driver provide hooks that enable you to customize counters.


This topic only applies if you are using kernel space gator. If you are using user space gator, create custom counters using the macros ANNOTATE_ABSOLUTE_COUNTER, ANNOTATE_DELTA_COUNTER, and ANNOTATE_COUNTER_VALUE instead.

Streamline derives its default set of counters from the performance monitoring unit, Linux hooks, and memory-mapped peripherals. You can add your own counters to this list if there is a hardware metric that you want to track which Streamline does not provide by default.

To create your own counters, mimic the methods used in the gator_events_mmapped.c file or any of the other gator_events_x files included with the gator driver source. You can locate all of the files provided by DS-5 by selecting Help > ARM Extras... from the main menu.

Follow these steps to ensure that gatord interacts with your custom source:


  1. Create an empty gator_events_your_custom.c file or duplicate gator_events_mmapped.c.
  2. Update the makefile to build the new gator_events_your_custom.c file.
  3. Add the preprocessor directive #include "gator.h" if you do not use gator_events_mmapped.c as a template.
  4. Implement the following functions in your new source file: gator_events_your_custom_init, gator_events_your_custom_interface, gator_events_your_custom_create_files, gator_events_your_custom_start, gator_events_your_custom_read, and gator_events_your_custom_stop.
  5. Add gator_events_your_custom_init to GATOR_EVENTS_LIST in gator_main.c.
  6. All of your new counters must be added to the events list. To do this:
    1. Create a new XML file in the same directory as the makefile before building gatord. The makefile pulls in any file that begins with events-, so create an XML file called events-YourCustom.xml.
    2. Define how many counters exist in your custom set using the <counter_set name="counter_name" count="x"> tag. Give your counter a unique, descriptive name and enter how many counters are available for the count attribute. For example: <counter_set name="ARM_Cortex-A9_cnt" count="6"/>
    3. For each counter set, you must list each of the possible events. Define the event category using the <category> tag.
    4. Define the individual events for each event category, including all of the necessary attributes.

      A basic event example:

      <event event="0x01" title="Cache" name="Instruction refill" 
      description="Instruction fetch that causes a refill of at least 
      the level of instruction or unified cache closest to the processor"/>

      A fixed event example:

      <event counter="ARM_Cortex-A9_ccnt" title="Clock" name="Cycles" 
      display="hertz" units="Hz" average_selection="yes" 
      description="The number of core clock cycles"/>
  7. Re-build gatord after you create your new XML file.

Related concepts