RFR 8080623 CPU overhead in FJ due to spinning in awaitWork
Paul Sandoz
paul.sandoz at oracle.com
Wed May 20 10:24:08 UTC 2015
On May 20, 2015, at 11:46 AM, David Holmes <david.holmes at oracle.com> wrote:
> On 20/05/2015 7:28 PM, Paul Sandoz wrote:
>>
>> On May 20, 2015, at 9:07 AM, David Holmes <david.holmes at oracle.com> wrote:
>>
>>> On 20/05/2015 3:55 AM, Paul Sandoz wrote:
>>>> Hi,
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8080623
>>>>
>>>> diff -r ea3ca5cfc3c6 src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java
>>>> --- a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java Tue May 19 20:04:29 2015 +0300
>>>> +++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java Tue May 19 19:54:00 2015 +0200
>>>> @@ -1328,13 +1328,9 @@
>>>> /**
>>>> * Number of times to spin-wait before blocking. The spins (in
>>>> * awaitRunStateLock and awaitWork) currently use randomized
>>>> - * spins. If/when MWAIT-like intrinsics becomes available, they
>>>> - * may allow quieter spinning. The value of SPINS must be a power
>>>> - * of two, at least 4. The current value causes spinning for a
>>>> - * small fraction of typical context-switch times, well worthwhile
>>>> - * given the typical likelihoods that blocking is not necessary.
>>>> + * spins. Currently set to zero to reduce CPU usage.
>>>
>>> I'd keep the commentary even if disabling spinning at this time.
>>>
>>
>> Some of removed commentary makes less sense given the motivation to set the value to zero. How about the following tweak:
>>
>> /**
>> * Number of times to spin-wait before blocking. The spins (in
>> * awaitRunStateLock and awaitWork) currently use randomized
>> - * spins. If/when MWAIT-like intrinsics becomes available, they
>> - * may allow quieter spinning. The value of SPINS must be a power
>> - * of two, at least 4. The current value causes spinning for a
>> - * small fraction of typical context-switch times, well worthwhile
>> - * given the typical likelihoods that blocking is not necessary.
>> + * spins. Currently set to zero to reduce CPU usage.
>
> I've lost the context for what "spin" is getting randomized ??
>
Not sure there was much context to begin with :-) best to look at the implementation: a spin value, initialized to SPINS, is (if > 0) decremented if the next value from a PRNG (Marsaglia-like) is non-negative.
>> + *
>> + * If greater than zero the value of SPINS must be a power
>> + * of two, at least 4. A value of 2048 causes spinning for a
>> + * small fraction of typical context-switch times.
>> + *
>> + * If/when MWAIT-like intrinsics becomes available, they
>> + * may allow quieter spinning.
>
> Yep that's fine - thanks.
>
Thanks,
Paul.
More information about the core-libs-dev
mailing list