[13] RFR(xs) 8227646: [TESTBUG] appcds/SharedArchiveConsistency timed out

Calvin Cheung calvin.cheung at oracle.com
Wed Jul 17 03:09:57 UTC 2019


Removing the fc.force(true) calls works and the test performs better on 
macosx. It takes about 20s for the test to finish without the call vs. 
up to 9 min. with the call.

updated webrev:

     http://cr.openjdk.java.net/~ccheung/8227646/webrev.01/

Ran tier1 and 2 tests successfully and repeated tier2 test 10 times on a 
Mac host from which the timeout was observed.

thanks,

Calvin

On 7/16/19 9:09 AM, Calvin Cheung wrote:
> Hi Ioi,
>
> I found 2 fc.force(true) calls in the test. I've removed both and 
> testing it without increasing the timeout value.
>
> I test it by running the hotspot_tier2_runtime test group 10 times on 
> mac hosts. Each iteration takes about 30 min. Will let you know about 
> the results.
>
> thanks,
>
> Calvin
>
> On 7/16/19 8:25 AM, Ioi Lam wrote:
>> HI Calvin,
>>
>> Since the test is stuck at here at the timeout:
>>
>> at sun.nio.ch.FileDispatcherImpl.force0(java.base at 13-ea/Native Method)
>> at 
>> sun.nio.ch.FileDispatcherImpl.force(java.base at 13-ea/FileDispatcherImpl.java:82)
>> at 
>> sun.nio.ch.FileChannelImpl.force(java.base at 13-ea/FileChannelImpl.java:461)
>> at SharedArchiveConsistency.writeData(SharedArchiveConsistency.java:166)
>>
>> Maybe we should remove the calls to FileChannel.force()? According to 
>> the javadoc, this call is for "ensuring that critical information is 
>> not lost in the event of a system crash", which I think is not 
>> necessary in our test.
>>
>> src/java.base/unix/native/libnio/ch/FileDispatcherImpl.c:
>>
>> JNIEXPORT jint JNICALL
>> Java_sun_nio_ch_FileDispatcherImpl_force0(JNIEnv *env, jobject this,
>>                                           jobject fdo, jboolean md)
>> {
>>     jint fd = fdval(env, fdo);
>>     int result = 0;
>>
>> #ifdef MACOSX
>>     result = fcntl(fd, F_FULLFSYNC);
>>     if (result == -1 && errno == ENOTSUP) {
>>         /* Try fsync() in case F_FULLSYUNC is not implemented on the 
>> file system. */
>>         result = fsync(fd);
>>     }
>>
>> https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/fcntl.2.html 
>>
>>
>>      F_FULLFSYNC        Does the same thing as fsync(2) then asks the 
>> drive to
>>                         flush all buffered data to the permanent storage
>>                         device (arg is ignored).  This is currently 
>> implemented
>>                         on HFS, MS-DOS (FAT), and Universal Disk Format
>>                         (UDF) file systems.  The operation may take 
>> quite a
>>                         while to complete.
>>
>> Thanks
>> - Ioi
>>
>>
>> On 7/16/19 7:59 AM, Calvin Cheung wrote:
>>> Dan,
>>>
>>> Thanks for your review!
>>>
>>> On 7/16/19 5:56 AM, Daniel D. Daugherty wrote:
>>>> On 7/16/19 12:31 AM, Calvin Cheung wrote:
>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8227646
>>>>>
>>>>> webrev: http://cr.openjdk.java.net/~ccheung/8227646/webrev.00/
>>>>
>>>> test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
>>>>     Does the test intentionally crash in one or more of the test 
>>>> cases?
>>>>     If not, then '-XX:-CreateCoredumpOnCrash' is not really needed.
>>>>     I don't think '-XX:-CreateCoredumpOnCrash' will prevent the 
>>>> timeout
>>>>     handling mechanism from trying to capture a core file in the case
>>>>     of a timeout.
>>> No, the test does not crash intentionally. Thanks for clarifying the 
>>> -XX:-CreateCoredumpOnCrash. I will revert the change.
>>>>
>>>>     The test currently timed out with a default total timeout value of
>>>>     480 seconds; that 480 comes from the default timeout value of 120
>>>>     seconds and the default timeout factor of 4 (480 == 120 * 4).
>>>>
>>>>     The 'timeout=1000' value will get you a total timeout value of 
>>>> 4000.
>>>>     I suspect that is not what you want.
>>>>
>>>>     If you specify 'timeout=240', you'll get a total timeout value of
>>>>     960 seconds (240 * 4).
>>>
>>> I've seen the total elapsed time for the test got very close to 
>>> 960s. So to be on the safe side, I would set the timeout=300 as 
>>> follows:
>>>
>>> diff --git 
>>> a/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java 
>>> b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
>>> --- a/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
>>> +++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
>>> @@ -35,7 +35,7 @@
>>>   * @build sun.hotspot.WhiteBox
>>>   * @compile test-classes/Hello.java
>>>   * @run driver ClassFileInstaller sun.hotspot.WhiteBox
>>> - * @run main/othervm -Xbootclasspath/a:. 
>>> -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI 
>>> SharedArchiveConsistency
>>> + * @run main/othervm/timeout=300 -Xbootclasspath/a:. 
>>> -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI 
>>> SharedArchiveConsistency
>>>   */
>>>  import jdk.test.lib.process.OutputAnalyzer;
>>>  import jdk.test.lib.Utils;
>>>
>>> I will do more testing with the above timeout before pushing the 
>>> change.
>>>
>>> Let me know if you'd like to see another webrev.
>>>
>>> thanks,
>>>
>>> Calvin
>>>
>>>>
>>>> Dan
>>>>
>>>>
>>>>>
>>>>> Increase the timeout to 1000s and add the 
>>>>> -XX:-CreateCoredumpOnCrash option to disable coredump.
>>>>>
>>>>> Testing: on 2 macosx hosts on which the timeout was observed.
>>>>>
>>>>>
>>>>> thanks,
>>>>>
>>>>> Calvin
>>>>>
>>>>
>>


More information about the hotspot-runtime-dev mailing list