One of the major categories of events handled by the analysis server is the category of block-enter and block-exit events. They can be used to analyze the run-time behavior of an application on different levels of abstraction like the function level or the loop level. Finer or coarser levels can be achieved depending on the way an application is instrumented.
The analysis of this event type requires a consistent stream of events to
maintain its inherent stack structure. The calculation of function profiles,
call path profiles, timeline views, etc. highly depend on this structure. To
create a degree of parallelism that the server can benefit from, we chose a
two-dimensional task distribution. For relatively short traces, the data is
equally distributed among the workers by means of an interleaved
process/thread ID to worker mapping, which works best for relatively short
traces with a large number of threads. For traces that exceed a certain amount
of events per process/thread, the process/thread to worker mapping needs to be
adopted every events. Hence, we achieve an equal distribution of the data
among all workers, even in the case of many events but few processes/threads.
In general, the analysis types mentioned above generates results in the form of tables, which can be easily transferred over a network link, as their size does not depend on the number of events being analyzed.