gprof GNU Profile tool

GNU Profile (gprof) is a performance analysis tool that helps developers identify code bottlenecks and optimize their programs. It provides detailed information about the execution time and call frequency of functions within a program.

gprof can be used to:

  1. Detect performance bottlenecks in your code

  2. Identify which functions consume the most execution time

  3. Analyze the call graph of your program

  4. Help prioritize optimization efforts

Usage

Build

Enable the following configuration in NuttX:

CONFIG_SYSTEM_GPROF

Using in NuttX

  1. Start profiling:

    nsh> gprof start
    
  2. Stop profiling:

    nsh> gprof stop
    
  3. Dump profiling data:

    nsh> gprof dump /tmp/gmon.out
    

Analyzing on Host

  1. Pull the profiling data to host:

    adb pull /tmp/gmon.out ./gmon.out
    
  2. Analyze the data using gprof tool:

    The saved file format complies with the standard gprof format.
    For detailed instructions on gprof command usage, please refer to the GNU gprof manual:
    https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html
    
    arm-none-eabi-gprof ./nuttx/nuttx gmon.out -b
    
    Example output:
    
    ```
    arm-none-eabi-gprof nuttx/nuttx gmon.out -b
    Flat profile:
    
    Each sample counts as 0.001 seconds.
      %   cumulative   self              self     total
     time   seconds   seconds    calls   s/call   s/call  name
     66.41      3.55     3.55       43     0.08     0.08  sdelay
     33.44      5.34     1.79       44     0.04     0.04  delay
      0.07      5.34     0.00                             up_idle
      0.04      5.34     0.00                             nx_start
      0.02      5.34     0.00                             fdtdump_main
      0.02      5.34     0.00                             nxsem_wait
      0.00      5.34     0.00        1     0.00     5.34  hello_main
      0.00      5.34     0.00        1     0.00     0.00  singal_handler
    
    ```
    
    This output shows the performance profile of the program,
    including execution time and call counts for each function.
    The flat profile table provides a quick overview of where the program spends most of its time.
    In this example, `sdelay` and `delay` functions consume the majority of execution time.
    This information can be used to identify performance bottlenecks and optimize critical parts of the code.