[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