  Automated code instrumentation, i.e. the insertion of measurement hooks into
a target application by the compiler, is an established technique for
collecting reliable, fine-grained performance data. The set of functions to
instrument has to be selected with care, as instrumenting every available
function typically yields too large a runtime overhead, thus skewing the
measurement. No "one-suits-all" selection mechanism exists, since the
instrumentation decision is dependent on the measurement objective, the limit
for tolerable runtime overhead and peculiarities of the target application. The
Compiler-assisted Performance Instrumentation (CaPI) tool assists in creating
such instrumentation configurations, by enabling the user to combine different
selection mechanisms as part of a configurable selection pipeline, operating on
a statically constructed whole-program call-graph. Previously, CaPI relied on a
static instrumentation workflow which made the process of refining the initial
selection quite cumbersome for large-scale codes, as the application had to be
recompiled after each adjustment. In this work, we present new
runtime-adaptable instrumentation capabilities for CaPI which do not require
recompilation when instrumentation changes are made. To this end, the XRay
instrumentation feature of the LLVM compiler was extended to support the
instrumentation of shared dynamic objects. An XRay-compatible runtime system
was added to CaPI that instruments selected functions at program start, thereby
significantly reducing the required time for selection refinements.
Furthermore, an interface to the TALP tool for recording parallel efficiency
metrics was implemented, alongside a specialized selection module for creating
suitable coarse-grained region instrumentations.
