public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Paul Davis <paul@linuxaudiosystems.com>
Cc: linux-kernel@vger.kernel.org, Lee Revell <rlrevell@joe-job.com>,
	mark_h_johnson@raytheon.com, Bill Huey <bhuey@lnxw.com>,
	Adam Heath <doogie@debian.org>,
	Florian Schmidt <mista.tapas@gmx.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Michal Schmidt <xschmi00@stud.feec.vutbr.cz>,
	Fernando Pablo Lopez-Lezcano <nando@ccrma.stanford.edu>,
	Karsten Wiese <annabellesgarden@yahoo.de>,
	jackit-devel <jackit-devel@lists.sourceforge.net>
Subject: Re: [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.4]
Date: Fri, 29 Oct 2004 10:02:47 +0200	[thread overview]
Message-ID: <20041029080247.GC30400@elte.hu> (raw)
In-Reply-To: <200410290057.i9T0v5I8011561@localhost.localdomain>


* Paul Davis <paul@linuxaudiosystems.com> wrote:

> >how is the 'maximum delay' calculated? Could you put in a tracing hook
> >into jackd whenever such a ~720 usecs maximum is hit? I'd _love_ to see 
> >how such a latency path looks like, it seems a bit long.
> 
> "maximum delay" is computed like this:
> 
> 	 a) we know that jackd should be woken at regular, known
> 	    intervals based on the interrupt of the audio interface.
> 
> 	 b) jackd is (often) blocked in poll(2), waiting for the
> 	    audio interface to become readable+writable.
> 
> 	 c) on return from poll, we check the time we are returning
> 	    and compare it to the last wakeup. the difference should
> 	    be almost exactly the interrupt interval. 
> 
> 	 d) any amount larger than this is a delay caused by
> 	    kernel scheduling. we track the largest such delay.

there are multiple possibilities of how this ~700 usecs delay occured:

 - the kernel still has a wakeup bug. But this should be detected by the
   tracer which measures the time between when the task hits the
   runqueue and the task gets to execute on the CPU. Also, if there is a
   critical section in the kernel that is 700 usecs long it would be
   detected by _another_, independent timing/tracing mechanism that
   measures critical sections. The likelyhood of both the scheduler
   _and_ two independent kernel-tracers being buggy in the same way is
   quite significantly low. (not to mention the user-space amlat tool
   which seems to agree with the kernel instrumentation.)

note that currently the maximum delay reported by the tracer is around
20-30 usecs. It is nowhere near the 700 usecs measured here. Here are
some of the other latency possibilities:

 - ALSA latency bug: Jackd didnt get woken up in time. Or driver bug, it
   somehow didnt do the wakeup. I'd say this has pretty low probability
   as well since it would break for alot of other scenarios as well.

 - poll() latency bug: pretty low probability too. It's simple and does
   the wakeup immediately, and would be noticed by many people if this
   were buggy.

 - Jackd related latency: is the thread that waits in poll() _truly_ the 
   highest-prio task in the system? IIRC there is some other Jackd
   thread around too that has SCHED_FIFO priority 50, couldnt that 
   thread come in occasionally and delay the poll()-ing thread? Or, is 
   it 100% sure that the only processing the poll()-ing thread does is 
   waiting for the next interrupt and immediately and atomically
   handling it? If there is any delay (either due to processing
   overhead or due to unintended scheduling) then Jackd wont hit poll() 
   in time and could miss the next interrupt - and there's nothing the
   kernel can do about this. I know that Jackd does alot of precautions 
   to avoid unintentional scheduling (mlockall, the use of SCHED_FIFO), 
   but are you absolutely sure it doesnt happen? This scenario could be 
   excluded by measuring the time Jackd calls poll(), and comparing it
   to the expected value. [Or is this value already included in the 
   stats Rui collected? Maybe the "Maximum Process Cycle" value?]

but at this point i'd say that the likelyhood that the scheduler caused
this delay is pretty low - all of that codepath is instrumented and i
think we should instrument Jackd a bit more before putting the blame
back on the scheduler. So while ~3 months ago, when i started this
project, the blame was clearly on the kernel and on the scheduler, i'd
now say for the first time that this particular phenomenon is not
directly caused by it :-)

Could the kernel help some more in debugging this? E.g. if the Jackd
SCHED_FIFO thread (after it has started up) can never legitimately
reschedule except via poll(), i could try to put in a syscall hack in
where in the Jackd code you could call say gettimeofday(0,3) to turn on
'do not reschedule' mode, and call gettimeofday(0,4) to turn it off. If
Jackd reschedules while in 'do not reschedule' mode then the scheduler
code will detect this and will print out the offending user-space EIP
and a stacktrace. [and will turn off 'do-not schedule' mode.]

(i could even make it a clean scheduler feature and send a SIGBUS (or
any other alert signal) if this occurs, and implement a new syscall to
control it. I guess this could be useful to most RT applications. This
signal would only be sent if the RT task got scheduled voluntarily (i.e.
not delayed due to some even higher-prio task).)

> we block in poll(2), waiting for the interrupt from the audio
> interface to mark the relevant jackd thread as runnable.

ok, good. Not having signals involved certainly makes this simpler ;)

> i don't know what you mean by "channel" information in this context.

it was just a stupid question based on the ALSA source code, i assumed
that somehow you could have multiple audio streams [the driver called it
'voices'?] per driver, and the same interrupt comes for each stream. If
multiple streams are handled then there must be some sort of index to
find out where stream (or streams) got that particular interrupt, so
that Jackd can refill the proper output stream. I assumed (it seems
incorrectly) that when Rui ran 9 'fluidsynth' instances then Jackd would
open 9 'channels', one for each fludsynth instance?

but i suspect your comment means that there is a single 'output stream'
assembled by Jackd out of the 9 streams coming from the 9 fluidsynth
instances, with no concurrency issues on the driver level and the
SCHED_FIFO Jackd thread is the sole owner of that periodic interrupt,
and that there's no additional per-device information it needs to
associate it with each interrupt to ge to the current audio stream?
(i.e. there is only one output audio stream per device?)

and here i'm specifically concentrating on the scenario that Rui's
testing triggers: 9 fluidsynth instances running, and Jackd handling a
single ali5451 output device.

	Ingo

  parent reply	other threads:[~2004-10-29  8:01 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1099008264.4199.4.camel@krustophenia.net>
2004-10-29  0:57 ` [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.4] Paul Davis
2004-10-29  2:10   ` Lee Revell
2004-10-29  8:02   ` Ingo Molnar [this message]
2004-10-29  8:21     ` Thomas Gleixner
2004-10-29  9:09       ` Ingo Molnar
2004-10-29 11:01         ` Paul Davis
2004-10-29 11:14           ` Ingo Molnar
2004-10-29 11:26             ` Paul Davis
2004-10-29 11:36               ` Ingo Molnar
2004-10-29 13:35                 ` Paul Davis
2004-10-29 13:55                   ` Ingo Molnar
2004-10-29 14:03                     ` Paul Davis
2004-10-29 14:15                       ` Ingo Molnar
2004-10-29 16:14             ` Ingo Molnar
2004-10-29 16:21               ` Ingo Molnar
2004-10-29 16:32               ` Florian Schmidt
2004-10-29 16:23                 ` Ingo Molnar
2004-10-29 16:31                   ` Ingo Molnar
2004-10-29 16:37                     ` Ingo Molnar
2004-10-29 16:53                       ` Ingo Molnar
2004-10-29 17:16                     ` Florian Schmidt
2004-10-29 17:02                       ` Ingo Molnar
2004-10-29 17:09                         ` Ingo Molnar
2004-10-29 17:16                           ` Ingo Molnar
2004-10-29 17:33                           ` Florian Schmidt
2004-10-29 17:21                             ` Ingo Molnar
2004-10-29 17:22                               ` Ingo Molnar
2004-10-29 18:36                                 ` Florian Schmidt
2004-10-29 20:33                                   ` Ingo Molnar
2004-10-29 20:51                                     ` Paul Davis
2004-10-29 21:11                                       ` Ingo Molnar
2004-10-30  1:06                                         ` Paul Davis
2004-10-30 11:34                                           ` Ingo Molnar
2004-11-26 17:16                                         ` [Jackit-devel] " Jack O'Quin
2004-10-29 20:42                                   ` Ingo Molnar
2004-10-29 21:31                                     ` Florian Schmidt
2004-10-29 21:25                                       ` Ingo Molnar
2004-10-29 21:42                                         ` Lee Revell
2004-10-29 21:46                                           ` Ingo Molnar
2004-10-29 21:53                                             ` Lee Revell
2004-10-29 23:12                                             ` Lee Revell
2004-10-30 11:58                                               ` Ingo Molnar
2004-10-30 17:49                                                 ` Lee Revell
2004-10-30 19:17                                                   ` Ingo Molnar
2004-10-30 19:43                                                     ` Lee Revell
2004-10-30 19:47                                                     ` Florian Schmidt
2004-10-30 19:37                                                       ` Ingo Molnar
2004-10-30 19:57                                                         ` Florian Schmidt
2004-10-30 19:52                                                       ` Lee Revell
2004-10-30 20:15                                                         ` Florian Schmidt
2004-10-30 20:26                                                           ` Lee Revell
2004-10-30 21:13                                                             ` Florian Schmidt
2004-10-30 21:26                                                               ` Lee Revell
2004-10-30 21:38                                                                 ` Florian Schmidt
2004-10-30 23:12                                                                   ` Lee Revell
2004-10-31 12:07                                                                   ` Ingo Molnar
2004-10-31 12:48                                                                     ` Ingo Molnar
2004-10-31 12:54                                                                       ` Lee Revell
2004-10-31 13:13                                                                         ` Ingo Molnar
2004-10-31 13:40                                                                           ` Ingo Molnar
2004-10-31 15:20                                                                             ` Florian Schmidt
2004-10-31 15:59                                                                               ` Florian Schmidt
2004-10-31 19:06                                                                                 ` Florian Schmidt
2004-11-01 13:42                                                                                   ` Ingo Molnar
2004-11-01 13:53                                                                                     ` Ingo Molnar
2004-11-01 14:06                                                                                       ` Ingo Molnar
2004-11-01 15:47                                                                                         ` Thomas Gleixner
2004-11-01 17:55                                                                                           ` Lee Revell
2004-11-01 17:58                                                                                             ` Thomas Gleixner
2004-11-01 18:43                                                                                             ` Ingo Molnar
2004-11-01 18:46                                                                                           ` Ingo Molnar
2004-11-01 22:30                                                                                             ` Florian Schmidt
2004-11-01 22:40                                                                                               ` Bill Huey
2004-11-01 22:51                                                                                                 ` Florian Schmidt
2004-11-01 22:59                                                                                                   ` Bill Huey
2004-11-02  8:02                                                                                                     ` Ingo Molnar
2004-11-02  8:07                                                                                               ` Ingo Molnar
2004-11-02 15:06                                                                                           ` [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.6.8 Ingo Molnar
2004-11-02 17:52                                                                                             ` K.R. Foley
2004-11-02 19:37                                                                                               ` Ingo Molnar
2004-11-02 19:40                                                                                                 ` K.R. Foley
2004-11-02 19:24                                                                                             ` Norberto Bensa
2004-11-02 19:35                                                                                               ` Ingo Molnar
2004-11-02 23:09                                                                                             ` Karsten Wiese
2004-11-03  1:12                                                                                               ` Ingo Molnar
2004-11-03 10:15                                                                                                 ` Karsten Wiese
2004-11-01 17:04                                                                                         ` [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.4] Rui Nuno Capela
2004-11-01 17:08                                                                                           ` Thomas Gleixner
2004-11-01 20:00                                                                                             ` Rui Nuno Capela
2004-11-01 17:24                                                                                         ` K.R. Foley
2004-11-02  0:22                                                                                         ` Michal Schmidt
2004-11-01 13:54                                                                                     ` Paul Davis
2004-11-01 14:30                                                                                       ` Ingo Molnar
2004-11-01 19:30                                                                                         ` Paul Davis
2004-11-02  8:17                                                                                           ` Ingo Molnar
2004-11-01 14:03                                                                                     ` Florian Schmidt
2004-11-01 14:12                                                                                       ` Ingo Molnar
2004-11-01 15:29                                                                                       ` K.R. Foley
2004-11-02 23:41                                                                                     ` [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.6] Remi Colinet
2004-11-03  1:04                                                                                       ` Remi Colinet
2004-11-01 11:55                                                                                 ` [Fwd: Re: [patch] Real-Time Preemption, -RT-2.6.9-mm1-V0.4] Ingo Molnar
2004-11-01 12:37                                                                                   ` Ingo Molnar
2004-11-01 12:35                                                                                     ` Thomas Gleixner
2004-11-01 12:51                                                                                       ` Ingo Molnar
2004-11-01 13:15                                                                                         ` Ingo Molnar
2004-11-01 13:40                                                                                           ` Florian Schmidt
2004-11-01 13:48                                                                                             ` Ingo Molnar
2004-11-01 16:47                                                                                   ` Rui Nuno Capela
2004-10-31 23:16                                                                             ` Michal Schmidt
2004-11-01  0:05                                                                             ` Magnus Määttä
2004-10-31 13:11                                                                       ` Ingo Molnar
2004-10-31 14:11                                                                       ` Florian Schmidt
2004-10-31 13:22                                                                         ` Ingo Molnar
2004-10-31 14:28                                                                           ` Florian Schmidt
2004-10-31 13:30                                                                         ` Ingo Molnar
2004-10-31 21:58                                                                     ` Rui Nuno Capela
2004-10-31 22:11                                                                     ` K.R. Foley
2004-10-31  2:20                                                               ` Lee Revell
2004-10-31 10:00                                                                 ` Florian Schmidt
2004-10-31 12:09                                                                   ` Lee Revell
2004-10-31 12:19                                                                     ` Ingo Molnar
2004-10-31 12:35                                                                       ` Lee Revell
2004-10-31 12:39                                                                         ` Ingo Molnar
2004-10-30 20:05                                                       ` Lee Revell
2004-10-30 20:29                                                         ` Florian Schmidt
2004-10-30  0:15                                             ` Lee Revell
2004-10-29 22:31                                         ` Florian Schmidt
2004-10-29 22:50                                           ` Florian Schmidt
2004-10-30 13:15                                             ` Ingo Molnar
2004-10-30 17:53                                               ` Florian Schmidt
2004-10-30  3:36                                           ` Lee Revell
2004-10-30  3:48                                             ` Lee Revell
2004-10-30 11:16                                               ` Ingo Molnar
2004-10-30 17:44                                                 ` Lee Revell
2004-10-30 11:28                                             ` Ingo Molnar
2004-10-30 11:33                                               ` Ingo Molnar
2004-10-30 13:16                                               ` Florian Schmidt
2004-10-30  1:10                                         ` Lee Revell
2004-10-30  1:15                                         ` Lee Revell
2004-10-29  8:59     ` Ingo Molnar
2004-10-29  9:29       ` Ingo Molnar
2004-10-29 13:48     ` Ingo Molnar
2004-10-29 14:19       ` Paul Davis
2004-10-29 14:27         ` Ingo Molnar
2004-10-29 14:31         ` Ingo Molnar
2004-10-29 14:38           ` Paul Davis
2004-10-29 19:33     ` Lee Revell
2004-10-29 19:35       ` Thomas Gleixner
2004-11-01 14:32 Mark_H_Johnson
2004-11-01 14:36 ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2004-11-01 16:34 Mark_H_Johnson
2004-11-01 18:48 ` Ingo Molnar

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=20041029080247.GC30400@elte.hu \
    --to=mingo@elte.hu \
    --cc=annabellesgarden@yahoo.de \
    --cc=bhuey@lnxw.com \
    --cc=doogie@debian.org \
    --cc=jackit-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark_h_johnson@raytheon.com \
    --cc=mista.tapas@gmx.net \
    --cc=nando@ccrma.stanford.edu \
    --cc=paul@linuxaudiosystems.com \
    --cc=rlrevell@joe-job.com \
    --cc=tglx@linutronix.de \
    --cc=xschmi00@stud.feec.vutbr.cz \
    /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