Messages in this thread | | | Date | Mon, 12 May 2014 14:30:32 +0200 | From | Peter Zijlstra <> | Subject | Re: [BUG] sched_setattr() SCHED_DEADLINE hangs system |
| |
On Mon, May 12, 2014 at 11:19:39AM +0200, Michael Kerrisk (man-pages) wrote: > Hi Peter, > > On Mon, May 12, 2014 at 10:47 AM, Peter Zijlstra <peterz@infradead.org> wrote: > > On Mon, May 12, 2014 at 08:53:59AM +0200, Michael Kerrisk (man-pages) wrote: > >> On 05/11/2014 04:54 PM, Michael Kerrisk (man-pages) wrote: > > > >> > $ time sudo ./t_sched_setattr d 18446744072 18446744072 18446744073 > >> > >> I realize my speculation was completely off the mark. time(2) really > >> is reporting the truth, and the sched_setattr() call returns immediately. > >> But it looks like with these settings the deadline scheduler gets itself > >> into a confused state. The process chews up a vast amount of CPU time > >> for the few actions (including process teardown) that occur after > >> the sched_setattr() call, and since the SCHED_DEADLINE process has > >> priority over everything else, the system locks up. > > > > Yeah, its doing something weird alright.. let me see if I can get > > something useful out. > > Thanks!
So I think its because the way we check wrapping
(s64)(a - b) < 0
This means that its impossible to tell if time went fwd or bwd with 64bit increments. I've not entirely pinpointed where this is wrecking things, but it seems like a fair bet this is what's going wrong.
So I'm tempted to put a sanity check on all these values to make sure <= 2^63. That way the wrapping logic in the kernel keeps working.
And 2^63 [ns] should be plenty large enough for everyone (famous last words of course).
> > Btw, you do know about EX_USAGE from sysexits.h ? > > Yes, I'm peripherally aware of them, but have tended to avoid them > because they're not in POSIX, and don't seem to be all that widely > used.
Ah, so then its just something weird I've picked up along the way :-)
| |