Re: [DynInst_API:] DynInst Overhead


Date: Mon, 21 Jul 2014 12:48:25 -0500
From: Bill Williams <bill@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] DynInst Overhead
On 07/21/2014 11:52 AM, Matthew LeGendre wrote:

Presumably you're running the CodeCoverage tool in two steps: 1)
Rewriting the binary 2) Running the rewritten binary.  All of the
analysis/rewriting overheads are in step 1, and the instrumentation
overhead can be measured just by timing step 2.

If you're getting 50x overhead on just step 2 then something's very
wrong. I've got my own codeCoverage tool (which I unfortunately can't
share yet) and I only see 10% overhead.

Hrm. If this is with a prebuilt, statically linked binary and not with a build from source against current Dyninst, we may also be hitting traps in an inner loop. That's more the right order of magnitude than trampguards would be--trampguards would be in the 1.5-5x sort of neighborhood off the top of my head.

The source for CodeCoverage (which you can build against the latest Dyninst and be reasonably sure of *not* hitting traps in almost all of SPEC) is in our tools.git repository. I know we've fixed some performance regressions that turned up between the AWAT paper and 8.1.2.


Just an educated guess--I frequently see big overheads associated with
trampoline guards.  Dyninst should have realized trampoline guards are
unnecessary for codeCoverage and not emited them.  But if something went
wrong you can manually turn them off by putting a call to:

   bpatch.setTrampRecursive(true);

Near the top of codeCoverage.C's main() function.  If that makes a
difference then let the list know.  That implies there's a bug that
should be investigated.

-Matt


On Mon, 21 Jul 2014, Buddhika Chamith Kahawitage Don wrote:
I just measured the time it took for a single run. Is there a way to
get the
time it took for initialization only so that I can get an idea of just
the
run-time overhead?

Thanks
Bud


On Mon, Jul 21, 2014 at 7:58 AM, Frank Ch. Eigler <fche@xxxxxxxxxx>
wrote:
      Hi -

      > [...]  I was using the CodeCoverage tool [2] for
      > instrumentation. But it's taking way too higher time than the
> unprofiled run. (More than a 50x slow down) [...]

Are you measuring steady-state overheads only, or else are you
including the one-time analysis too?  The latter can be quite
large, but you pay it only once per startup.

- FChE






_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api



--
--bw

Bill Williams
Paradyn Project
bill@xxxxxxxxxxx
[← Prev in Thread] Current Thread [Next in Thread→]