RFR(s): 8214180: Need better granularity for sleeping
Robbin Ehn
robbin.ehn at oracle.com
Wed Nov 28 11:31:35 UTC 2018
Hi,
I added a new version of the comment to yield:
http://cr.openjdk.java.net/~rehn/8214180/v2/inc/webrev/
Let me know if that seem like a good way.
/Robbin
On 2018-11-26 23:45, David Holmes wrote:
> On 27/11/2018 12:32 am, Daniel D. Daugherty wrote:
>> On 11/24/18 3:38 PM, Robbin Ehn wrote:
>>> Hi Dan,
>>>
>>> On 2018-11-24 15:28, Daniel D. Daugherty wrote:
>>>> src/hotspot/os/linux/os_linux.cpp
>>>> old L4030 // Short sleep, direct OS call.
>>>> old L4031 //
>>>> old L4032 // Note: certain versions of Linux CFS scheduler (since 2.6.23) do not guarantee
>>>> old L4033 // sched_yield(2) will actually give up the CPU:
>>>> old L4034 //
>>>> old L4035 // * Alone on this pariticular CPU, keeps running.
>>>> old L4036 // * Before the introduction of "skip_buddy" with "compat_yield" disabled
>>>> old L4037 // (pre 2.6.39).
>>>> old L4038 //
>>>> old L4039 // So calling this with 0 is an alternative.
>>>> old L4040 //
>>>> I noticed this comment didn't get copied over to os_posix.cpp.
>>>> Is the comment about an old enough Linux kernel that it is no
>>>> longer useful?
>>>>
>>>
>>> At least to me it is not useful. Having it in the generic os_posix.cpp seems
>>> miss-placed ? Let me know if you want it somewhere?
>>
>> Looks like the comment was added by this changeset:
>>
>> $ hg annot src/os/linux/vm/os_linux.cpp | grep 'certain versions of Linux CFS scheduler'
>> 5840: // Note: certain versions of Linux CFS scheduler (since 2.6.23) do not guarantee
>>
>> $ hg log -r 5840
>> changeset: 5840:5944dba4badc
>> user: dsimms
>> date: Fri Jan 24 09:28:47 2014 +0100
>> summary: 8028280: ParkEvent leak when running modified runThese which only loads classes
>>
>> $ hg diff -r 5839 -r 5840 src/os/linux/vm/os_linux.cpp
>> diff -r d050fbf914d8 -r 5944dba4badc src/os/linux/vm/os_linux.cpp
>> --- a/src/os/linux/vm/os_linux.cpp Thu Jan 23 16:02:14 2014 -0500
>> +++ b/src/os/linux/vm/os_linux.cpp Fri Jan 24 09:28:47 2014 +0100
>> @@ -3871,9 +3871,33 @@
>> }
>> }
>>
>> -int os::naked_sleep() {
>> - // %% make the sleep time an integer flag. for now use 1 millisec.
>> - return os::sleep(Thread::current(), 1, false);
>> +//
>> +// Short sleep, direct OS call.
>> +//
>> +// Note: certain versions of Linux CFS scheduler (since 2.6.23) do not guarantee
>> +// sched_yield(2) will actually give up the CPU:
>> +//
>> +// * Alone on this pariticular CPU, keeps running.
>> +// * Before the introduction of "skip_buddy" with "compat_yield" disabled
>> +// (pre 2.6.39).
>> +//
>> +// So calling this with 0 is an alternative.
>> +//
>> +void os::naked_short_sleep(jlong ms) {
>> + struct timespec req;
>> +
>> + assert(ms < 1000, "Un-interruptable sleep, short time use only");
>> + req.tv_sec = 0;
>> + if (ms > 0) {
>> + req.tv_nsec = (ms % 1000) * 1000000;
>> + }
>> + else {
>> + req.tv_nsec = 1;
>> + }
>> +
>> + nanosleep(&req, NULL);
>> +
>> + return;
>> }
>>
>> // Sleep forever; naked call to OS-specific sleep; use with CAUTION
>>
>>
>> Since Mr Simms is local to you, I'll let you ping him when you
>> get a chance. Don't let that hold up your fix. If Mr Simms wants
>> the comment restored (somewhere), then we can do that with a
>> different fix.
>
> I think Mr Simms is still on vacation. Regardless that comment seems better applied to:
>
> 4042 void os::naked_yield() {
> 4043 sched_yield();
> 4044 }
>
> with a reference to os::naked_sleep, than the other way around.
>
> Cheers,
> David
> -----
>
>>
>> Dan
>>
>>
>>>
>>>>
>>>> Thumbs up.
>>>
>>> Thanks Dan!
>>>
>>> /Robbin
>>>
>>>
>>>>
>>>> Dan
>>>>
>>>>
>>>>>
>>>>> Passes t1-3.
>>>>>
>>>>> Thanks, Robbin
>>>>
>>
More information about the hotspot-runtime-dev
mailing list