RFR(M): 8219584: Try to dump error file by thread which causes safepoint timeout

Doerr, Martin martin.doerr at sap.com
Thu Mar 7 17:57:19 UTC 2019


Hi Vladimir,

thank you very much for reviewing.

Best regards,
Martin


-----Original Message-----
From: Vladimir Kozlov <vladimir.kozlov at oracle.com> 
Sent: Donnerstag, 7. März 2019 18:50
To: Doerr, Martin <martin.doerr at sap.com>; 'hotspot-compiler-dev at openjdk.java.net' <hotspot-compiler-dev at openjdk.java.net>
Cc: David Holmes (david.holmes at oracle.com) <david.holmes at oracle.com>
Subject: Re: RFR(M): 8219584: Try to dump error file by thread which causes safepoint timeout

On 3/7/19 7:38 AM, Doerr, Martin wrote:
> Hi Vladimir,
> 
> thank you for reviewing it so quickly and for your good points.
> 
>> Compiling with -Xcomp may produce unexpected result.
> In general, yes, but I didn't see any uncommon traps in this simple method.
> Were you concerned about that?

Yes,  uncommon traps was my concern. That is why I asked if you looked on generated code.

> 
> I'm using -Xcomp + compileonly in order to get the test_loop method precompiled.
> (Also avoids OnStackReplacement. >
>> Did you look on generated code for test_loop() method?
> Yes, looks good. Also see OptoAssembly from SPARC below.

Yes, it looks good!

> 
>> Also use something smaller then Integer.MAX_VALUE for limit (subtract -100 for example) to simplify logic for overflow
>> checks.
> I've tried, but there was no change in OptoAssembly other than the constant value.
> I've looked at the loopnode.cpp overflow checking logic and it appears to be implemented nicely and can detect that stride = 1 and limit "< max_jint" will not overflow.
> Do you agree?

I agree since generated code look good.

> 
>> You may also add -XX:LoopUnrollLimit=0 to avoid unrolling and other loop optimizations which you don't need. Check
>> generated code.
> Good idea. Makes the OptoAssembly better readably. Added in place. Thanks.
> 
>> Did you tested on SPARC?
> Of course. Works great on this platform. Also see OptoAssembly below.
> 
>> How long it takes to run on it?
> Took less than a minute. Hmm... seems like the jtreg stuff takes most of the time.
> The test itself shouldn't run much longer than 1 second (500ms GuaranteedSafepointInterval + 500ms SafepointTimeoutDelay) until the Java Thread gets killed.

I was concern that you may get a timeout due to long loop if it is not interrupted. But since you set times to 0.5 sec 
it could happens only if we have a bug. So it seems good.

> 
> Can I add you as reviewer?

Yes. I looked on changes and they are good

Thanks,
Vladimir

> 
> Thanks and best regards,
> Martin
> 
> 
> OptoAssembly SPARC
> 
> 000   B1: #     B5 B2 <- BLOCK HEAD IS JUNK   Freq: 1
> 000     ! stack bang (144 bytes)
>          SAVE   R_SP,-144,R_SP
> 014
>   MOV    R_I0,R_L3       ! spill
> 018 +   MOV    #0,R_I0
> 01c     CWBeq  R_L3,#0,B5       ! int  P=0.100000 C=-1.000000
> 01c
> 020   B2: #     B3 <- B1  Freq: 0.9
> 020 +   SET    #2147483647,R_L0
> 028 +   MOV    #1,R_L2
> 028
> 02c   B3: #     B6 B4 <- B2 B4       Loop: B3-B4 inner  Freq: 9
> 02c     SREM   R_L2,R_L3,R_L1
> 040 +   CWBeq  R_L1,#0,B6       ! int  P=0.100000 C=-1.000000
> 040
> 044   B4: #     B3 B5 <- B6 B3  Freq: 9
> 044 +   ADD    R_L2,#1,R_L2
> 048     CWBlt  R_L2,R_L0,B3     ! Loop end  P=0.900000 C=-1.000000
> 048
> 04c   B5: #     N1 <- B4 B1  Freq: 1
> 04c     LDX    [R_G2 + #poll_offset],L0 ! Load local polling address
>          LDX    [L0],G0  !Poll for Safepointing
>          RET
>          RESTORE
> 05c +   ! return
> 05c
> 05c   B6: #     B4 <- B3  Freq: 0.9
> 05c +   ADD    R_I0,#1,R_I0
> 060     BA     B4       ! short branch
> 
> 
> 
> -----Original Message-----
> From: Vladimir Kozlov <vladimir.kozlov at oracle.com>
> Sent: Mittwoch, 6. März 2019 20:14
> To: Doerr, Martin <martin.doerr at sap.com>; 'hotspot-compiler-dev at openjdk.java.net' <hotspot-compiler-dev at openjdk.java.net>
> Cc: David Holmes (david.holmes at oracle.com) <david.holmes at oracle.com>
> Subject: Re: RFR(M): 8219584: Try to dump error file by thread which causes safepoint timeout
> 
> Hi Martin,
> 
> On 3/6/19 3:43 AM, Doerr, Martin wrote:
>> Hi,
>>
>> my proposal JDK-8219584 is currently being reviewed on hotspot-runtime-dev, but it contains a small test which
>> explicitly uses C2.
>>
>> May I get a review for TestAbortVMOnSafepointTimeout.java, please?
>>
>> Webrev:
>>
>> http://cr.openjdk.java.net/~mdoerr/8219584_kill_thread_on_safepoint_timeout/webrev.02/
>>
>> Bug with description of the feature:
>>
>> https://bugs.openjdk.java.net/browse/JDK-8219584
>>
>> The purpose of the method "test_loop" is to loop long enough to hit a safepoint timeout (with configured timeout delay).
>>
>> I compile it directly by C2 with -XX:-UseCountedLoopSafepoints and -XX:LoopStripMiningIter=0.
> 
> Yes, these flags combination should work even if one of this flag is set by testing infra.
> Also you correctly use @requires vm.compiler2.enabled to run VM build where these flag are available.
> 
>>
>> This should force the loop to get compiled without safepoint and 2 billion divisions should definitely take long enough
>> to hit a 500ms safepoint timeout.
> 
> Compiling with -Xcomp may produce unexpected result. Did you look on generated code for test_loop() method?
> Also use something smaller then Integer.MAX_VALUE for limit (subtract -100 for example) to simplify logic for overflow
> checks.
> You may also add -XX:LoopUnrollLimit=0 to avoid unrolling and other loop optimizations which you don't need. Check
> generated code.
> 
>>
>> I've tested it many times on all platforms we have and I've never seen it failing.
> 
> Did you tested on SPARC? How long it takes to run on it?
> 
>>
>> Is it fine to rely on this?
> 
> Yes, I think so.
> 
> Vladimir
> 
>>
>> Best regards,
>>
>> Martin
>>


More information about the hotspot-compiler-dev mailing list