RFR(trivial): 8230037: Confused MetaData dumped by PrintOptoAssembly
Vladimir Kozlov
vladimir.kozlov at oracle.com
Thu Aug 29 16:07:35 UTC 2019
Hi Jie,
This looks good.
Thanks,
Vladimir
On 8/29/19 12:52 AM, Jie Fu wrote:
> Hi Vladimir and all,
>
> Updated: http://cr.openjdk.java.net/~jiefu/8230037/webrev.01/
>
> Apart from the example described in the JBS[1], here is a more confusing one.
> During debugging, people may think that the OptoAssembly @line 32383 should be for Compile_id=482 according to the
> MetaData @line 32381.
>
> 32355 ============================= C2-compiled nmethod ==============================
> 32356 ----------------------------------- MetaData -----------------------------------
> 32357 {method}
> 32358 - this oop: 0x00007f8b33c4a3f0
> 32359 - method holder: 'spec/benchmarks/compress/Compressor'
> 32360 - constants: 0x00007f8b33c497b0 constant pool [160] {0x00007f8b33c497b0} for
> 'spec/benchmarks/compress/Compressor' cache=0x00007f8b33c4ab38
> 32361 - access: 0xc1000002 private
> 32362 - name: 'output'
> 32363 - signature: '(I)V'
> 32364 - max stack: 7
> 32365 - max locals: 5
> 32366 - size of params: 2
> 32367 - method size: 13
> 32368 - highest level: 4
> 32369 - vtable index: -2
> 32370 - i2i entry: 0x00007f8b70781460
> 32371 - adapters: AHE at 0x00007f8b88426e90: 0xba000000 i2c: 0x00007f8b70b88800 c2i: 0x00007f8b70b8894d c2iUV:
> 0x00007f8b70b88910 c2iNCI: 0x00007f8b70b8898a
> 32372 - compiled entry 0x00007f8b7838e0b0
> 32373 - code size: 373
> 32374 - code start: 0x00007f8b33c4a208
> 32375 - code end (excl): 0x00007f8b33c4a37d
> 32376 - method data: 0x00007f8b33c4d350
> 32377 - checked ex length: 0
> 32378 - linenumber start: 0x00007f8b33c4a37d
> 32379 - localvar length: 5
> 32380 - localvar start: 0x00007f8b33c4a3b2
> 32381 - compiled code: nmethod 1929 482 4 spec.benchmarks.compress.Compressor::output (373 bytes)
> 32382
> 32383 --------------------------------- OptoAssembly ---------------------------------
>
> However, the MetaData[2] is always for the last compilation of the method, not for the current compilation.
> Therefore, it's wrong to match Compile_id for the OptoAssembly with the dumped MetaData.
>
> So to find the correct Compile_id, the MetaData is *not only helpless but also quite misleading*.
>
> The effect of the patch is the following.
> To avoid confusing, the Compile_id (@line 32356 and 32383) was dumped explicitly, which was inspired by Vladimir.
> Please see more comments inline.
>
> 32355 ============================= C2-compiled nmethod ==============================
> 32356 ----------------------- MetaData before Compile_id = 485 ------------------------
> 32357 {method}
> 32358 - this oop: 0x00007f8b33c4a3f0
> 32359 - method holder: 'spec/benchmarks/compress/Compressor'
> 32360 - constants: 0x00007f8b33c497b0 constant pool [160] {0x00007f8b33c497b0} for
> 'spec/benchmarks/compress/Compressor' cache=0x00007f8b33c4ab38
> 32361 - access: 0xc1000002 private
> 32362 - name: 'output'
> 32363 - signature: '(I)V'
> 32364 - max stack: 7
> 32365 - max locals: 5
> 32366 - size of params: 2
> 32367 - method size: 13
> 32368 - highest level: 4
> 32369 - vtable index: -2
> 32370 - i2i entry: 0x00007f8b70781460
> 32371 - adapters: AHE at 0x00007f8b88426e90: 0xba000000 i2c: 0x00007f8b70b88800 c2i: 0x00007f8b70b8894d c2iUV:
> 0x00007f8b70b88910 c2iNCI: 0x00007f8b70b8898a
> 32372 - compiled entry 0x00007f8b7838e0b0
> 32373 - code size: 373
> 32374 - code start: 0x00007f8b33c4a208
> 32375 - code end (excl): 0x00007f8b33c4a37d
> 32376 - method data: 0x00007f8b33c4d350
> 32377 - checked ex length: 0
> 32378 - linenumber start: 0x00007f8b33c4a37d
> 32379 - localvar length: 5
> 32380 - localvar start: 0x00007f8b33c4a3b2
> 32381 - compiled code: nmethod 1929 482 4 spec.benchmarks.compress.Compressor::output (373 bytes)
> 32382
> 32383 ------------------------ OptoAssembly for Compile_id = 485 -----------------------
>
> Testing:
> - make test TEST="tier1 tier2 tier3" CONF=fastdebug on Linux/x64
> - make test TEST="tier1 tier2 tier3" CONF=release on Linux/x64
> - SPECjvm2008 with fastdebug using -XX:+PrintOptoAssembly on Linux/x64
>
> Any comments?
>
> Thanks a lot.
> Best regards,
> Jie
>
> [1] https://bugs.openjdk.java.net/browse/JDK-8230037
> [2] http://hg.openjdk.java.net/jdk/jdk/file/3da1848cc39b/src/hotspot/share/opto/output.cpp#l1573
>
> On 2019/8/23 上午12:16, Vladimir Kozlov wrote:
>> To avoid confusing I normally use -Xbatch and CICompilerCount=1 (or =2 for tiered compilation).
>>
>> The output is under ttyLocker so it should be one block. I see that there is mix of tty and xtty streams in code. May
>> be that is the reason it is not together.
> I had tested the tty and xtty logging with SPECjvm2008 on a 56-core machine.
> It works well enough for both of them (except for the safepoint case).
>
>
>> If we use xtty it should be passed to print_metadata() too. Please, investigate more.
>
> I think there is no need to pass xtty to print_metadata() since
> 1) the ttyLocker also works for xtty [3]
> 2) and the tty and xtty actually will write to the same log file [4]
>
> [3] http://hg.openjdk.java.net/jdk/jdk/file/3da1848cc39b/src/hotspot/share/opto/output.cpp#l1585
> [4] http://hg.openjdk.java.net/jdk/jdk/file/3da1848cc39b/src/hotspot/share/utilities/ostream.cpp#l645
>
>
>>
>> Instead of "Last Normal Compilation" I would print Compile_id.
>
> Done. Thanks.
>
>
>>
>> Thanks,
>> Vladimir
>
More information about the hotspot-compiler-dev
mailing list