public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Bill Gatliff <bgat@billgatliff.com>
To: Jamie Lokier <jamie@shareable.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	sen wang <wangsen.linux@gmail.com>,
	mingo@elte.hu, akpm@linux-foundation.org, kernel@kolivas.org,
	npiggin@suse.de, arjan@infradead.org,
	linux-arm-kernel@lists.arm.linux.org.uk,
	linux-kernel@vger.kernel.org
Subject: Re: report a bug about sched_rt
Date: Sat, 25 Jul 2009 21:44:12 -0500	[thread overview]
Message-ID: <4A6BC2FC.7020700@billgatliff.com> (raw)
In-Reply-To: <20090725224848.GA15260@shareable.org>

Jamie Lokier wrote:
> Bill Gatliff wrote:
>   
>> Jamie Lokier wrote:
>>     
>>> For simple things like "try to keep the buffer to my DVD writer full"
>>> (no I don't know how much CPU that requires - it's a kind of "best
>>> effort but try very hard!"), it would be quite useful to have
>>> something like RT-bandwidth which grants a certain percentage of time
>>> as an RT task, and effectively downgrades it to SCHED_OTHER when that
>>> time is exceeded to permit some fairness with the rest of the system.
>>>  
>>>       
>> Useful perhaps, but an application design that explicitly communicates 
>> your desires to the scheduler will be more robust, even if it does seem 
>> more complex at the outset.
>>     
>
> I agree with communicting the desire explicitly to the scheduler.
>
> In the above example, the exact desire is "give me as much CPU as I
> ask for, because my hardware servicing will be adversely but
> non-fatally affected if you don't, and the amount of CPU needed to
> service the hardware cannot be determined in advance, but prevent me
> from blocking progress in the rest of the system by limiting my
> exclusive ownership of the CPU".
>
> How do you propose to communicate that to the scheduler, if not by
> something rather like RT-bandwidth with downgrading to SCHED_OTHER
> when a policy limit is exceeded?
>   

This is a great real-world problem.  And there's no one-size-fits-all 
answer, unfortunately.

RT-bandwidth will give you the system behavior you are after, but it's a 
pretty blunt instrument.

I'd consider putting some throttling in your interrupt handler that 
prevents it from running more than a certain amount of calculation per 
interrupt event.  And perhaps it's looking at execution timestamps to 
determine how often it's running, and can therefore do a rough 
calculation of how much CPU it's eating.  At least until threaded 
interrupt scheduling is widespread, a runaway interrupt handler is 
definitely an opportunity to hang up a system.

Tasklets are nice for this, because the scheduler won't re-queue one if 
it's already running.  So if your interrupt handler's job is just to 
launch the tasklet, and you know how much time the tasklet takes to run, 
then if you get a burst of interrupts you don't end up launching an 
equivalent burst of scheduled work: eventually the interrupt handler 
overtakes the tasklet, and the additional interrupt events get dropped.  
That's often a decent way to deal with system overload, especially if it 
leaves the system functional enough to take some sort of "evasive 
action" like reverting to polled i/o, issuing a diagnostic message, or 
doing an orderly transition to a safe mode.

A flood ping, lots of paging, and driver bugs are just a few ways you 
can encounter an unexpected burst of interrupt activity that might, if 
not dealt with on some level, cause the system to suddenly destabilize.

Point is, keep a mentality that you want to fall back onto RT-bandwidth 
(or any other type of watchdog timer expiration) only after you've 
exhausted all other options.  Pretend it isn't there--- but definitely 
know what will happen if it ever steps in.  A system coded that way is 
much more resistant to breakage, in my experience anyway.


b.g.

-- 
Bill Gatliff
bgat@billgatliff.com


  reply	other threads:[~2009-07-26  2:44 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-24 10:57 report a bug about sched_rt sen wang
2009-07-24 12:14 ` Peter Zijlstra
2009-07-24 13:04   ` sen wang
2009-07-24 13:14     ` Peter Zijlstra
2009-07-24 13:26       ` sen wang
2009-07-24 13:33         ` Peter Zijlstra
2009-07-24 13:44           ` sen wang
2009-07-24 13:54             ` Peter Zijlstra
2009-07-24 14:04               ` sen wang
2009-07-24 14:48                 ` Peter Zijlstra
2009-07-24 14:53                   ` sen wang
2009-07-24 15:07                   ` sen wang
2009-07-24 15:24                     ` Peter Zijlstra
2009-07-24 15:43                       ` sen wang
2009-07-24 15:34                     ` Thomas Gleixner
2009-07-25 11:12                     ` Raistlin
2009-07-24 14:24               ` sen wang
2009-07-24 14:48                 ` Peter Zijlstra
2009-07-24 15:02                   ` sen wang
2009-07-24 15:40                   ` Jamie Lokier
2009-07-24 16:01                     ` Peter Zijlstra
2009-07-24 23:30                       ` Jamie Lokier
2009-07-25  5:22                         ` Bill Gatliff
2009-07-25 22:48                           ` Jamie Lokier
2009-07-26  2:44                             ` Bill Gatliff [this message]
2009-07-26 19:03                               ` Jamie Lokier
2009-07-27 10:45                                 ` Peter Zijlstra
2009-07-27 13:35                                 ` Bill Gatliff
2009-07-25 12:33                         ` Raistlin
2009-07-25 14:58                           ` Tommaso Cucinotta
2009-07-25 12:19                       ` Raistlin
2009-07-25 22:54                         ` Jamie Lokier
2009-07-25 23:24                           ` Tommaso Cucinotta
2009-07-25 11:10         ` Raistlin
     [not found]           ` <454c71700907250429i1c77658bt6d65b02f08a29f4a@mail.gmail.com>
2009-07-25 23:01             ` Jamie Lokier
2009-07-24 14:28 ` Arjan van de Ven
2009-07-26  3:55   ` sen wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A6BC2FC.7020700@billgatliff.com \
    --to=bgat@billgatliff.com \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@infradead.org \
    --cc=jamie@shareable.org \
    --cc=kernel@kolivas.org \
    --cc=linux-arm-kernel@lists.arm.linux.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=npiggin@suse.de \
    --cc=peterz@infradead.org \
    --cc=wangsen.linux@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox