On Fri, Dec 04, 2020 at 12:17:31PM -0600, Scott Cheloha wrote: > On Fri, Dec 04, 2020 at 09:56:02AM +0100, Claudio Jeker wrote: > > On Thu, Dec 03, 2020 at 10:05:30PM -0600, Scott Cheloha wrote: > > > Hi, > > > > > > srp_finalize(9) uses tsleep(9) to spin while it waits for the object's > > > refcount to reach zero. It blocks for up to 1 tick and then checks > > > the refecount again and again. > > > > > > We can just as easily do this with tsleep_nsec(9) and block for 1 > > > millisecond per interval. > > > > > > ok? > > > > > > Index: kern_srp.c > > > =================================================================== > > > RCS file: /cvs/src/sys/kern/kern_srp.c,v > > > retrieving revision 1.12 > > > diff -u -p -r1.12 kern_srp.c > > > --- kern_srp.c 8 Sep 2017 05:36:53 -0000 1.12 > > > +++ kern_srp.c 4 Dec 2020 04:04:39 -0000 > > > @@ -274,7 +274,7 @@ void > > > srp_finalize(void *v, const char *wmesg) > > > { > > > while (srp_referenced(v)) > > > - tsleep(v, PWAIT, wmesg, 1); > > > + tsleep_nsec(v, PWAIT, wmesg, MSEC_TO_NSEC(1)); > > > } > > > > > > #else /* MULTIPROCESSOR */ > > > > > > > Why only 1ms instead of the original 10ms (at least on most archs)? > > The underlying implementation can only process timeouts from > hardclock(9) which runs about hz times per second. If we tell the > thread to "sleep for 10ms" it's almost always going to overshoot the > next hardclock(9) and wind up sleeping ~20ms. > > Some people run with HZ=1000 kernels. I don't think many people run > with kernels with a higher HZ than that, though. So I figure a 1ms > sleep is "good enough" for all practical kernels. On HZ=100 kernels > the thread will oversleep because it doesn't process timeouts often > enough to honor the 1ms request. > > Basically I'm trying to pick a reasonable polling interval (not too > fast) that also won't cause the existing default kernel to block for > longer than it already does (~10ms). The default kernel is HZ=100, so > a 1ms sleep will, in this case, almost always sleep ~10ms per > iteration of this loop.
This sleep should basically be 'as short as possible', since it's waiting out SRP references which are very short lived. ok jmatthew@