PEBIL: binary instrumentation for practical data-intensive program analysis
In order to achieve a high level of performance, data intensive programs such as the real-time processing of surveillance feeds from unmanned aerial vehicles, genomics sequence comparison or large graph traversal require the strategic application of multi/many-core processors and co-processors using a hybrid of inter-process message passing (e.g. MPI and SHMEM) and intra-process threading (e.g. pthreads and OpenMP). To facilitate program and system design decisions, program runtime behavior gathered through binary instrumentation is useful because it enables inspection of the low-level interactions between a data intensive program and a multi-core processor or many-core co-processor. This work details two novel mechanisms in the PEBIL binary instrumentation platform that make it well-suited for analyzing data-intensive programs by providing (1)support for fast lookup of instrumentation thread-local storage (ITLS) and (2)support for the fast enabling and disabling of instrumentation at runtime as a methodology for supporting sampling. These features are compared to two other popular binary instrumentation platforms, Pin and Dyninst, in both analytical and empirical terms for programs implemented using the popular but disparate parallelization models MPI and OpenMP. Empirical comparisons are made for two binary instrumentation applications that are critical to the analysis of data-intensive programs, basic block counting and memory address trace collection. These empirical results show that PEBIL is unrivaled in terms of overhead for basic block counting, introducing an average of 18% extra runtime for MPI programs and 116% for OpenMP programs as opposed to 60% (MPI) and 232% (OpenMP) for Pin and 20% (MPI) and 14743% (OpenMP) for Dyninst. For memory address trace collection that makes use of the conventional optimization of sampling 10% of the memory addresses of a program to reduce processing time, PEBIL also introduces the lowest overheads of 144% (MPI) and 222% (OpenMP) compared to 313% (MPI) and 360% (OpenMP) with Pin and 1113% (MPI) and 89075% (OpenMP) with Dyninst.
binary instrumentation program analysis memory address tracking performance optimization