RFR(m): 8214271: Fast primitive to wake many threads

David Holmes david.holmes at oracle.com
Thu Dec 20 12:26:43 UTC 2018


On 20/12/2018 10:10 pm, Robbin Ehn wrote:
> Hi David,
> 
> On 12/20/18 7:08 AM, David Holmes wrote:
>> Hi Robbin,
>>
>> Looks good, small doc follow up below ...
> 
> Thanks!
> 
>> Sound reasonable?
> 
> Yes, I also added the comment from my other mail, let me know what you 
> think.

+   // Guarantees not to return until disarm() is called,
+   // if called with currently armed tag (otherwise returns immediately).
+   // Implementation must guarantee no spurious wakeups.
     // Guarantees to return if disarm() and wake() is called.

Should the first line say "disarm() and wake()" or just "wake()"?

s/Implementation/Implementations/

The fourth line is no longer needed.

Thanks,
David


> Inc:
> http://cr.openjdk.java.net/~rehn/8214271/4/inc/webrev/
> 
> Full:
> http://cr.openjdk.java.net/~rehn/8214271/4/full/webrev/
> 
> /Robbin
> 
>>
>> Otherwise this all looks good!
>>
>> Thanks,
>> David
>> -----
>>
>>
>>> Full:
>>> http://cr.openjdk.java.net/~rehn/8214271/3/full/webrev/
>>>
>>> Thanks, Robbin
>>>
>>> On 11/23/18 5:55 PM, Robbin Ehn wrote:
>>>> Forgot RFR in subject.
>>>>
>>>> /Robbin
>>>>
>>>> On 2018-11-23 17:51, Robbin Ehn wrote:
>>>>> Hi all, please review.
>>>>>
>>>>> When a safepoint is ended we need a way to get back to 100% 
>>>>> utilization as fast
>>>>> as possible. 100% utilization means no idle cpu in the system if 
>>>>> there is a
>>>>> JavaThread that could be executed. The traditional ways to wake 
>>>>> many, e.g.
>>>>> semaphore, pthread_cond, is not implemented with a single syscall 
>>>>> instead they
>>>>> typical do one syscall per thread to wake.
>>>>>
>>>>> This change-set contains that primitive, the WaitBarrier, and a 
>>>>> gtest for it.
>>>>> No actual users, which is in coming patches.
>>>>>
>>>>> The WaitBarrier solves by doing a cooperative semaphore posting, 
>>>>> threads woken
>>>>> will also post. On Linux we can instead directly use a futex and 
>>>>> with one
>>>>> syscall wake all. Depending on how many threads and cpus the 
>>>>> performance vary,
>>>>> but a good utilization of the machine, just on the edge of 
>>>>> saturated, the time to reach 100% utilization is around 3 times 
>>>>> faster with the WaitBarrier (where futex is faster than semaphore).
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~rehn/8214271/webrev/
>>>>>
>>>>> CR:
>>>>> https://bugs.openjdk.java.net/browse/JDK-8214271
>>>>>
>>>>> Passes 100 iterations of gtest on our platforms, both fastdebug and 
>>>>> release.
>>>>> And have been stable when used in safepoints (t1-8) (coming patches).
>>>>>
>>>>> Thanks, Robbin


More information about the hotspot-dev mailing list