Messages in this thread | | | Date | Wed, 31 Jan 2001 15:17:20 +0100 | From | Kurt Roeckx <> | Subject | Re: gprof cannot profile multi-threaded programs |
| |
On Tue, Jan 30, 2001 at 11:31:13PM -0600, Mohit Aron wrote: > I analyzed the problem to be the following. Linux uses periodic SIGPROF signals > for profiling (Linux doesn't use the profil system call used in other OS's like > Solaris where the kernel does the profiling on behalf of the process). All > profile information is collected in the context of the signal handler for the > SIGPROF signal in Linux. Unfortunately, any thread that's created using > pthread_create() does not get these periodic SIGPROF signals. Hence any thread > other than the first thread is not profiled. The fix is to use setitimer() > system call immediately in the thread startup function for any new thread to > make the SIGPROF signal to be delivered at the designated interrupt frequency > (every 10ms). With this fix, the profile produced by gprof reflects the overall > computation done by all threads in the process. A more general fix would be > to fix the kernel to make any new threads inherit the setitimer() settings > for the parent thread.
You have the same problem when doing fork(). Only the parent will get cpu usage info. I have to call setitimer() too, to make it work properly.
I complained about it a few days ago, but didn't get a reply yet.
Kurt
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
| |