[14] RFR(S): 8224624: Inefficiencies in CodeStrings::add_comment cause timeouts
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Aug 20 15:24:09 UTC 2019
Good.
thanks,
Vladimir
On 8/20/19 6:03 AM, Tobias Hartmann wrote:
> Hi,
>
> please review the following patch:
> https://bugs.openjdk.java.net/browse/JDK-8224624
> http://cr.openjdk.java.net/~thartmann/8224624/webrev.00/
>
> The test that was added with the fix for JDK-8207355 [1] forces C1 to generate hundreds of exception
> handlers. If CommentedAssembly is enabled, LIR_Assembler::emit_exception_entries adds comments to
> the assembly code that is generated for these exception adapter blocks [2]. To add the comments to
> the right offset, CodeStrings::add_comment searches through *all* _code_strings in the CodeBuffer
> until it finds the last comment with that offset. This is extremely slow with a large amount of code
> strings (see compile times for the single test method [3]) and is repeated for every new comment
> that is added.
>
> I've fixed this by changing CodeStrings to a doubly-linked-list and searching for the comment with
> the right offset in reverse (because especially for these exception handlers, we add comments with
> increasing offset). In addition, the code now maintains the invariant that comments in the linked
> list a sorted by increasing offset. When reverse-searching the list, we can therefore bail out if we
> encounter a comment with offset <= the offset we are searching for. This improves C1 compiled time
> of the test method dramatically from 92s to 1,8s [4].
>
> Thanks,
> Tobias
>
>
> [1] https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2018-August/029973.html
>
> [2] Commented assembly code for exception adapter blocks:
> [...]
> ;; Exception adapter block
> 0x00007f2aed9885de: mov 0x248(%rsp),%rsi
> ;; branch [AL] [B61]
> 0x00007f2aed9885e6: jmpq 0x00007f2aed974f0c
> ;; Exception adapter block
> 0x00007f2aed9885eb: mov 0x240(%rsp),%rsi
> ;; branch [AL] [B63]
> 0x00007f2aed9885f3: jmpq 0x00007f2aed974f94
> ;; Exception adapter block
> [...]
>
> [3] Compile times without patch:
>
> Individual compiler times (for compiled methods only)
> ------------------------------------------------
>
> C1 {speed: 0 bytes/s; standard: 0,000 s, 0 bytes, 0 methods; osr: 0,000 s, 0 bytes, 0 methods;
> nmethods_size: 0 bytes; nmethods_code_size: 0 bytes}
> C1 Compile Time: 92,966 s
> Setup time: 0,000 s
> Build HIR: 1,651 s
> Parse: 0,039 s
> Optimize blocks: 1,558 s
> GVN: 0,034 s
> Null checks elim: 0,002 s
> Range checks elim: 0,000 s
> Other: 0,019 s
> Emit LIR: 0,237 s
> LIR Gen: 0,002 s
> Linear Scan: 0,235 s
> Other: 0,000 s
> Code Emission: 91,078 s
> Code Installation: 0,000 s
> Other: 0,000 s
> JVMCI code install time: 0,000 s
>
> [4] Compile times with patch:
> Individual compiler times (for compiled methods only)
> ------------------------------------------------
>
> C1 {speed: 0 bytes/s; standard: 0,000 s, 0 bytes, 0 methods; osr: 0,000 s, 0 bytes, 0 methods;
> nmethods_size: 0 bytes; nmethods_code_size: 0 bytes}
> C1 Compile Time: 1,849 s
> Setup time: 0,000 s
> Build HIR: 1,575 s
> Parse: 0,038 s
> Optimize blocks: 1,483 s
> GVN: 0,033 s
> Null checks elim: 0,002 s
> Range checks elim: 0,000 s
> Other: 0,019 s
> Emit LIR: 0,228 s
> LIR Gen: 0,002 s
> Linear Scan: 0,226 s
> Other: 0,000 s
> Code Emission: 0,047 s
> Code Installation: 0,000 s
> Other: 0,000 s
> JVMCI code install time: 0,000 s
>
More information about the hotspot-compiler-dev
mailing list