From: Maynard J. <may...@us...> - 2013-04-25 16:08:33
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "oprofile". The branch, master has been updated via a39d413cbb280c0305574c60e34144cb3bbd686e (commit) from 60c572b9bfa0287e07c570f0435bfc28ae03fbe0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit a39d413cbb280c0305574c60e34144cb3bbd686e Author: Maynard Johnson <may...@us...> Date: Thu Apr 25 10:53:37 2013 -0500 Fix holes in operf system-wide profiling of forked processes Using operf to do system-wide profiling of the specjbb benchmark exposed some holes in how operf was processing the perf_events data coming from the kernel. Some of the events we can get from the kernel are: - PERF_RECORD_COMM - PERF_RECORD_FORK - PERF_RECORD_MMAP - PERF_RECORD_SAMPLE The "COMM" event is to notify us of the start of an executable application. The "FORK" event tells us when a process forks another process. The "MMAP" event informs us when a shared library (or executable anonymous memory, or the executable file itself, etc.) has been mmap'ed into a process's address space. A "SAMPLE" event occurs each time the kernel takes a sample for a process. There is no guarantee in what order these events may arrive from the kernel, and when a large system (say, 64 CPUs) is running the specjbb benchmark full bore, with all processors pegged to 100%, you can get some very strange out-of-order looking sequence of events. Things get even stranger when using Java7 versus Java6 since Java7 spawns many more threads. The operf code had several issues where such out-of-order events were not handled properly, so some major changes were required in the code. Signed-off-by: Maynard Johnson <may...@us...> ----------------------------------------------------------------------- Summary of changes: libperf_events/operf_process_info.cpp | 340 +++++++++++++++++++++------------ libperf_events/operf_process_info.h | 68 +++---- libperf_events/operf_utils.cpp | 244 ++++++++++++------------ 3 files changed, 367 insertions(+), 285 deletions(-) hooks/post-receive -- oprofile |