June 24, 2023

Hello,
I have followed these steps to generate a profiling data from gprof:

  1. -pg flag added for both compiler and linker while compiling.
    Also added compiler flags like -fno-inline-functions, -fno-builtin,
    -no-pie as suggested in many online forums.
  2. Executed the program and got the gmon.out file generated.
  3. Using gprof to read the profiling data:
    gprof app_name gmon.out > analysis.txt

Note:
My embedded application is multithreaded running on Linux platform. It has infinite 'for' loop to keep the main thread alive. But I am limiting this 'for' loop to few thousands of iterations and returning from the main() function to get the gmon.out file generated.

The below points made me doubt the correctness of the profiling data:

*) main() function and its details is not shown in the gprof output file.

*) There is a function that gets called inside the 'for' loop in my application which I know is taking a lot of time(as it is using ioctl() calls everytime and confirmed that it takes too much time with testing). But gprof output file shows that it is taking very less time to get executed.

  1. Please let me know where I'm going wrong or should I do anything more to get correct profiling data from gprof.
  2. The default sampling rate of gprof is 0.01 seconds. Is there a way to increase this sampling rate of gprof? I want to try by increasing the sampling rate because 0.01 seconds seems to be very less.