Re: [BUG] sched_setattr() SCHED_DEADLINE hangs system

From: Juri Lelli
Date: Tue May 13 2014 - 05:57:26 EST


Hi all,

On Mon, 12 May 2014 14:30:32 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:

> 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@xxxxxxxxxxxxx> 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).
>

Does the following fix the thing?

Thanks,

- Juri

---