RFR(s): 8214180: Need better granularity for sleeping

Daniel D. Daugherty daniel.daugherty at oracle.com
Mon Nov 26 14:32:32 UTC 2018


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.

Dan


>
>>
>> Thumbs up.
>
> Thanks Dan!
>
> /Robbin
>
>
>>
>> Dan
>>
>>
>>>
>>> Passes t1-3.
>>>
>>> Thanks, Robbin
>>



More information about the hotspot-runtime-dev mailing list