============================= ``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.