RFR: 8284849: Add deoptimization to unified logging

Johan Sjölén duke at openjdk.java.net
Fri May 20 19:10:59 UTC 2022


On Fri, 20 May 2022 16:38:55 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> This PR adds a new "deoptimization" tag and a new log message on the info level mimicking JFR's deoptimization event. In the future this tag will be used to add trace level information, hopefully replacing TraceDeoptimization. JFR's event also captures the stacktrace, which this does not (happy to add this if considered important).
>> 
>> An example output looks like this: 
>> 
>> 
>> [1.346s][info][deoptimization] Deoptimization start {
>> [1.346s][info][deoptimization]   compileId = 407
>> [1.346s][info][deoptimization]   compiler = c2
>> [1.346s][info][deoptimization]   method:lineno:bci = java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(I)Z:176:26
>> [1.346s][info][deoptimization]   instruction = ifne
>> [1.346s][info][deoptimization]   reason = unstable_if
>> [1.346s][info][deoptimization]   action = reinterpret
>> [1.346s][info][deoptimization] } Deoptimization end
>
> src/hotspot/share/runtime/deoptimization.cpp line 1935:
> 
>> 1933:     JFR_ONLY(post_deoptimization_event(nm, trap_method(), trap_bci, trap_bc, reason, action);)
>> 1934: 
>> 1935:     if(Log(deoptimization)::is_info()) {
> 
> I don't see this pattern used for checking whether a log tag is enabled used elsewhere. Won't this only print when the log level is exactly `info`?
> 
> The pattern I see used elsewhere is:
> 
> 
> LogTarget(Info, <tag>) lt;
> if (lt.is_enabled()) {
>     ...
> }

This does the same thing. `is_enabled` calls `is_level` internally. I did it this way so that we have a temporary value instead of cluttering the outer scope.

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

PR: https://git.openjdk.java.net/jdk/pull/8812


More information about the hotspot-dev mailing list