[linux-audio-dev] another kernel patch?

Roger Larsson roger.larsson at norran.net
Sun Nov 30 00:53:12 UTC 2003


On Saturday 29 November 2003 21.55, Paul Davis wrote:
> >No scheduler that I've ever seen, written, or heard of is going to
> >accept JACK's opinion on this subject as anything more than a strong
> >hint.  The scheduler is the main loop of the entire system, *it*
> >decides what to run next.
>
> i'm not trying to subvert the general operation of the scheduler. it
> will still intervene when it needs/wants to.

Let see - what you want is this:
>
> what i want to stop is this: jackd is about running the process cycle,
> and wants to hand control to the next client. it writes to a FIFO to
> wakeup the next client, 

If next client is a RT process (SCHED_FIFO/RR) then it WILL be selected
unless there is another RT process with higher priority, and lower than jackd
otherwice it would have been running in the first place.


> and goes to sleep waiting for the "baton-passing" to wake it up again.

Jackd waits...

> however, for some bizarre reason, the scheduler does not in fact run the
> next client, but does something else instead.

If this ever happens (and something else is not within in the priority range
new process ... jackd) then it is a scheduler BUG - and should be fixed!

Cases where RT processes ends up flushing page cache to disk should
be investigated and fixed. If any...

>
> put another way, i want JACK-the-system to keep running smoothly, even
> though this includes crossing process boundaries. i don't want the
> handoff of control that is implicit in running the process cycle to
> return control to the scheduler "unnaturally".
>

But the current scheme can do more. Suppose you are running on a SMP
machine (Chip level SMP processors are getting common - there is even a
Xilinx FPGA - Virtex Pro with four PowerPCs [Not G5 but anyway...]!)

Suppose that in this situation you have made data available for several
processes - how can you start them all with your suggested interface?
(You might want to start them all and let the scheduler figure out what
to do - hyperthreading is nice when using the same data)

With the current scheme (OK, I am not quite up to date)
you could write to the FIFOs of all ready processes before starting to
wait on the baton. [giving the sub processes different priority levels
will order them in case you have less processors than CPUs]

> >Suggestions are welcome, but JACK truly does *not* know for certain
> >what to run next.  An interrupt could intervene and make a
> >higher-priority realtime process ready.  Or, some other processor
> >could unlock such a thread.  At the very least, there probably needs
> >to be code in the return path from the system call like the old Unix
> >logic of testing `runrun' and calling sched().
>
> obviously, all these would remain in place and we would be doing
> nothing subvert them. all we are doing is avoiding a schedule() caused
> by jackd blocking-on-read and the next client being marked
> runnable. both jackd and the next client should be considered "part of
> the same system".

To get this you should run the clients with higher priority than jackd!
Then they would be started and run before returning from the FIFO
write! :-)


client A requests data from FIFO
	kernel lets A waits on FIFO
						jackd writes data to FIFO
							kernel puts data on FIFO
							kernel wakes up waiters

--- client A has higher prio than jackd, it will preempt jackd while
--- jackd is still in the kernel.

client A wakes up
processes
returns baton
waits for more data on FIFO
	kernel finds next task to run
							and finds jackd (still on run queue)
							kernel returns
						jackd checks for baton - got it.
						jackd determines what client to run next.

Maybe jack should handle the priorities for jack clients - priorities is a
relative issue anyway... Then jackd could use this scheme when there
is only one client to run - and the lower priority clients when there are 
several.

/RogerL

-- 
Roger Larsson
Skellefteå
Sweden




More information about the Linux-audio-dev mailing list