vmprof / vmprof-python

vmprof - a statistical program profiler
http://vmprof.com
Other
433 stars 54 forks source link

Broadcast SIGPROF, rather than SIGALRM, when doing real time profiling #207

Closed timpalpant closed 5 years ago

timpalpant commented 5 years ago

Real-time profiling uses a signal broadcast mechanism to capture all registered threads, since the SIGALRM delivered by ITIMER_REAL is only sent to the main thread.

This change updates the broadcasting logic to send SIGPROF to trigger the actual stack sampling handler, rather than SIGALRM. This separates the logic for handling the broadcast (SIGALRM handler) from handling the stack collection (always SIGPROF handler). It also helps mitigate #159, since the threads will be receiving SIGPROF rather than SIGALRM, which disrupts time.sleep (It is not a perfect fix because the main thread may still be disrupted, but this seems to be a limitation of setitimer). This also fixes the real_time_threaded test, which is currently marked xfail.

Ref #153 and #204.

timpalpant commented 5 years ago

Actually this doesn't help, SIGPROF still interrupts time.sleep with EINTR. Abandoning since there is not much benefit to separating this out.