RFR: 8293170: Improve encoding of the debuginfo nmethod section

Boris Ulasevich bulasevich at openjdk.org
Thu May 11 14:23:43 UTC 2023


This is another pull request to replace https://github.com/openjdk/jdk/pull/10025 change which was blocked as not acceptable (see https://github.com/openjdk/jdk/pull/10025#pullrequestreview-1228216330)

The objections to change #10025 were:
- specialized algorithm for given data complicates things, makes it hard to learn, test and support
- algorithm is changed for DebugInfo, and the benefit is only for one type of data
- statistics of the debug info data can (will) change, breaking the optimization

The suggestion was:
- don't change the core algorithm, but add one on top or underneath the existing one, or reuse off-the-shelf zero-reduction schemes such as Cap'n Proto

With this change I propose a different approach. Instead of bit coding, the sequence of zeros in a data stream is encoded with a special character that normally never appears in Unsinged5 encoding, followed by a byte containing a number of zeros. In this way the updated algorithm is a pure extension of the existing encoding algorithm: data encoded without the zero-reduction trick is unpacked in the same way as before.

Currently there are several datasets affected by this change: Dependencies info, OopMap info, LineNumber info, Debug info. Only Debug info has a large number of zeros and gets a significant benefit. I experimented with the Cap'n Proto and lz4 algorithms on DebugInfo. The Unsinged5 algorithm has a better compression rate than these.

DebugInfo data size is reduced by ~20% (actually, 10-30%, depending on the application). Total nmethod size reduction is ~3%.

Performance impact: Renaisance and DaCapo benchmarks do not show any difference.

-------------

Commit messages:
 - 8293170: Improve encoding of the debuginfo nmethod section

Changes: https://git.openjdk.org/jdk/pull/12387/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12387&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8293170
  Stats: 67 lines in 3 files changed: 63 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/12387.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/12387/head:pull/12387

PR: https://git.openjdk.org/jdk/pull/12387


More information about the serviceability-dev mailing list