RFR: JDK-8266503: [ul] Make Decorations safely copy-able and reduce their size
Xin Liu
xliu at openjdk.java.net
Tue May 4 23:45:49 UTC 2021
On Tue, 4 May 2021 15:05:43 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
> In Universal Logging, class LogDecorations keeps resolved decorations as well as a lookup table of pointers to the start of each resolved decoration, by decorator. This is dangerous, since it makes object copy non-trivial (the pointers would need to be relocated). It is also wasteful since we spend 8 bytes per pointer per index.
>
> Better would be to use a numerical index array of offset values, which could be safely copied.
>
> And since the resolve buffer is 256 char, we can easily make this index an 8-bit value, which reduces the size of a LogDecorations object down to 280 bytes (from 368). Size matters especially in the context of JDK-8229517.
>
> The patch also adds a gtest, which tests that decorations are safely copy-able and that decorator resolution works as expected.
>
> Testing:
> - manually jtreg runtime/logging
> - manually gtests
> - Will run more tests tonight
hi, Thomas,
I compare yours and mine using `java -Xlog:async -Xlog:'all=trace:file=hotspot-async.log:uptime,tid,l,tg:filecount=0' --version`. here is the performance comparison.
baseline is synchronized log outputs. custom copy ctor is what I am using in PR#3135.
| | | wall-time(ms) | |
|---|-------------------|---------------|---|
| 1 | baseline | 96.942 | |
| 2 | custom copy ctor | 84.008 | |
| 3 | default copy ctor | 84.226 | |
| | | | |
I acknowledge that copying _decorations_buffer as need is not necessary.
use default copy ctor is good enough.
thanks,
--lx
-------------
PR: https://git.openjdk.java.net/jdk/pull/3855
More information about the hotspot-runtime-dev
mailing list