  Profile-guided optimizations rely on profile data for directing compilers to
generate optimized code. To achieve the maximum performance boost, profile data
needs to be collected on the same version of the binary that is being
optimized. In practice however, there is typically a gap between the profile
collection and the release, which makes a portion of the profile invalid for
optimizations. This phenomenon is known as profile staleness, and it is a
serious practical problem for data-center workloads both for compilers and
binary optimizers.
  In this paper we thoroughly study the staleness problem and propose the first
practical solution for utilizing profiles collected on binaries built from
several revisions behind the release. Our algorithm is developed and
implemented in a mainstream open-source post-link optimizer, BOLT. An extensive
evaluation on a variety of standalone benchmarks and production services
indicates that the new method recovers up to $0.8$ of the maximum BOLT benefit,
even when most of the input profile data is stale and would have been discarded
by the optimizer otherwise.
