[11] RFR(XS) 8202152: test/hotspot/jtreg/runtime/whitebox/WBStackSize.java fails

David Holmes david.holmes at oracle.com
Wed Apr 25 11:54:23 UTC 2018


On 25/04/2018 1:34 PM, dean.long at oracle.com wrote:
> OK.  I guess another fix would be to have the test ignore 
> actualStackSize > configStackSize.

Yes - given the requested stacksizes are only minimums the test is 
expecting too much.

But as the test is run in othervm mode we don't have to worry about 
recycling a thread that may have had an explicit stack size set (via 
java.lang.Thread constructor) - at least not until some other part of 
the runtime innocently introduces one ...

David

> dl
> 
> On 4/24/18 2:30 PM, Vladimir Kozlov wrote:
>> I don't think pthreads from other tests/apps will have affect.
>> Stack sizes are set during startup regardless what will be run after 
>> that (one or several tests).
>>
>> We have only 3 (I think) stack size: VM (vm, gc, watcher - native 
>> threads), compiler, Java threads.
>>
>> The only concern that GC also now has dynamic threads creation. But I 
>> am not sure they release those threads.
>>
>> Note, in general it is not a problem to reuse bigger stacks.
>> The test is too strict assuming a new stack will always be created. 
>> That is a problem and it addressed by the fix.
>>
>> Thanks,
>> Vladimir
>>
>> On 4/24/18 1:20 PM, dean.long at oracle.com wrote:
>>> It seems like this could still break if the pthreads implementation 
>>> decides to hand out (non-recycled) threads with oversized stacks, or 
>>> if there are recycled threads that don't use the values from the 
>>> command-line.  What happens if we run lots of tests in samevm mode, 
>>> and those tests uses different values for the stack size?  Then 
>>> wouldn't pthreads have a cache of various stack sizes to recycle new 
>>> threads from?
>>>
>>> dl
>>>
>>> On 4/23/18 11:12 PM, David Holmes wrote:
>>>> On 24/04/2018 3:54 PM, David Holmes wrote:
>>>>> To follow up ... Vladimir and I have had an interesting back and 
>>>>> forth in the bug report. It seems that at least in some cases 
>>>>> terminated threads are getting recycled - not just their pthread_t 
>>>>> identities but the actual allocated stack region as well. We seem 
>>>>> to end up with a new regular Java thread acquiring the id and stack 
>>>>> of a just terminated compiler thread - hence the regular Java 
>>>>> thread gets the wrong size stack!
>>>>>
>>>>> This is quite bizarre and seems quite broken.
>>>>
>>>> No it's not broken. The stacksize attribute is just a minimum size, 
>>>> so the OS can reuse a terminated thread with a larger stack - and 
>>>> that's what we are seeing.
>>>>
>>>> So the fix is fine, I would just add before @run:
>>>>
>>>> @comment Must use the same stacksize for Java threads and compiler 
>>>> threads in case of thread recycling
>>>>
>>>> Or something to that affect.
>>>>
>>>> Thanks,
>>>> David
>>>>
>>>>> David
>>>>>
>>>>> On 24/04/2018 7:24 AM, David Holmes wrote:
>>>>>> Hi Vladimir,
>>>>>>
>>>>>> On 24/04/2018 5:20 AM, Vladimir Kozlov wrote:
>>>>>>> http://cr.openjdk.java.net/~kvn/8202152/webrev.00/
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8202152
>>>>>>>
>>>>>>> After 8198756 changes compiler threads could be released and 
>>>>>>> other Java threads can re-use the same HW threads for which stack 
>>>>>>> size was determined during start. The test WBStackSize.java may 
>>>>>>> fail in such cases because Java thread stack size is set and 
>>>>>>> checked in test.
>>>>>>
>>>>>> That does not make sense to me. We don't "re-use HW threads" - I'm 
>>>>>> not even sure what that means. Compiler threads have a different 
>>>>>> stacksize to other Java threads - that seems simple enough.
>>>>>>
>>>>>>> For 8198756 changes we added thread name check to workaround the 
>>>>>>> problem [1]. But it seems is not enough.
>>>>>>
>>>>>> Why would this test be run in a compiler thread ????
>>>>>>
>>>>>>> To avoid this issue I added -XX:CompilerThreadStackSize=512 flag 
>>>>>>> to match Java thread stack size (note, size is in Kb for this flag).
>>>>>>
>>>>>> That seems like a workaround of the real problem.
>>>>>>
>>>>>> David
>>>>>> -----
>>>>>>
>>>>>>> I also reverted changes in test code and instead added thread 
>>>>>>> name print to know in case we still have problem in a future.
>>>>>>>
>>>>>>> Tier1 testing (which run the test) passed.
>>>>>>>
>>>
> 


More information about the hotspot-dev mailing list