[LLVMdev] RFC: Binary format for instrumentation based profiling data
Robinson, Paul
Paul_Robinson at playstation.sony.com
Tue Mar 25 10:46:06 PDT 2014
> On Mar 24, 2014, at 10:08 AM, Robinson, Paul
> <Paul_Robinson at playstation.sony.com> wrote:
>
> >> We seem to have some agreement that two formats for instrumentation
> >> based profiling is worthwhile. These are that emitted by compiler-rt
> in
> >> the instrumented program at runtime (format 1), and that which is
> >> consumed by clang when compiling the program with PGO (format 2).
> >>
> >> Format 1
> >> --------
> >>
> >> This format should be efficient to write, since the instrumented
> program
> >> should run with as little overhead as possible. This also doesn't
> need
> >> to be stable, and we can assume the same version of LLVM that was
> used
> >> to instrument the program will read the counter data. As such, the
> file
> >> format is versioned (so we can easily reject versions we don't
> >> understand) and consists basically of a memory dump of the relevant
> >> profiling counters.
> >
> > The "same version" assertion isn't completely true, at a previous job
> > we had clients who preferred not to regenerate profile data unless
> they
> > actually had to (because it was a big pain and took a long time). But
> > as long as the versioning is based on actual format changes, not just
> > repurposing the current LLVM version number (making the previous data
> > unusable for no technical reason), that's okay.
>
> Format 1 (extension .profraw since r204676) should be run immediately
> through llvm-profdata to generate format 2 (extension .profdata). The
> only profiles that should be kept around are format 2.
Okay, but the version comment still applies to format 2 then.
>
> > As long as I'm bothering to say something, is there some way that the
> > tools will figure out that you're trying to apply old data to new
> files
> > that have changed in ways that make the old data inapplicable? Sorry
> > if this has been brought up elsewhere and I just missed it.
> > -paulr
>
> There's a hash for each function based on the layout of the counters
> assigned to it. If the hash from the data doesn't match the current
> frontend, the data is ignored. Currently, the hash is extremely naive:
> the number of counters.
Eww. Should be CFG-based. I think merge-similar-functions has a way
to compute this?
--paulr
More information about the llvm-dev
mailing list