All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] High latencies on ARM.
@ 2008-01-02 10:31 Gilles Chanteperdrix
  2008-01-17 10:42 ` Jan Kiszka
                   ` (2 more replies)
  0 siblings, 3 replies; 29+ messages in thread
From: Gilles Chanteperdrix @ 2008-01-02 10:31 UTC (permalink / raw)
  To: xenomai-core

Hi,

after some (unsuccessful) time trying to instrument the code in a way
that does not change the latency results completely, I found the
reason for the high latency with latency -t 1 and latency -t 2 on ARM.
So, here comes an update on this issue. The culprit is the user-space
context switch, which flushes the processor cache with the nklock
locked, irqs off.

There are two things we could do:
- arrange for the ARM cache flush to happen with the nklock unlocked
and irqs enabled. This will improve interrupt latency (latency -t 2)
but obviously not scheduling latency (latency -t 1). If we go that
way, there are several problems we should solve:

we do not want interrupt handlers to reenter xnpod_schedule(), for
this we can use the XNLOCK bit, set on whatever is
xnpod_current_thread() when the cache flush occurs

since the interrupt handler may modify the rescheduling bits, we need
to test these bits in xnpod_schedule() epilogue and restart
xnpod_schedule() if need be

we do not want xnpod_delete_thread() to delete one of the two threads
involved in the context switch, for this the only solution I found is
to add a bit to the thread mask meaning that the thread is currently
switching, and to (re)test the XNZOMBIE bit in xnpod_schedule epilogue
to delete whatever thread was marked for deletion

in case of migration with xnpod_migrate_thread, we do not want
xnpod_schedule() on the target CPU to switch to the migrated thread
before the context switch on the source CPU is finished, for this we
can avoid setting the resched bit in xnpod_migrate_thread(), detect
the condition in xnpod_schedule() epilogue and set the rescheduling
bits so that xnpod_schedule is restarted and send the IPI to the
target CPU.

- avoid using user-space real-time tasks when running latency
kernel-space benches, i.e. at least in the latency -t 1 and latency -t
2 case. This means that we should change the timerbench driver. There
are at least two ways of doing this:
use an rt_pipe
 modify the timerbench driver to implement only the nrt ioctl, using
vanilla linux services such as wait_event and wake_up.

What do you think ?

-- 
                                               Gilles Chanteperdrix


^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2008-01-31  7:43 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-02 10:31 [Xenomai-core] High latencies on ARM Gilles Chanteperdrix
2008-01-17 10:42 ` Jan Kiszka
2008-01-17 10:47   ` Gilles Chanteperdrix
2008-01-17 11:55     ` Jan Kiszka
2008-01-17 13:59       ` Gilles Chanteperdrix
2008-01-17 14:16         ` Jan Kiszka
2008-01-17 14:18           ` Jan Kiszka
2008-01-17 14:20           ` Gilles Chanteperdrix
2008-01-17 14:22             ` Jan Kiszka
2008-01-17 15:37               ` Gilles Chanteperdrix
2008-01-31  7:43                 ` Gilles Chanteperdrix
2008-01-21 21:55               ` Gilles Chanteperdrix
2008-01-22 20:36 ` Gilles Chanteperdrix
2008-01-22 21:46   ` Jan Kiszka
2008-01-22 22:13     ` Gilles Chanteperdrix
2008-01-22 22:22     ` Gilles Chanteperdrix
     [not found] ` <18315.63245.160672.547658@domain.hid>
2008-01-22 20:36   ` Gilles Chanteperdrix
2008-01-23 17:48     ` Philippe Gerum
2008-01-23 17:53       ` Gilles Chanteperdrix
2008-01-23 18:34         ` Philippe Gerum
2008-01-23 18:39           ` Gilles Chanteperdrix
2008-01-23 22:38           ` Gilles Chanteperdrix
2008-01-24 10:18           ` Gilles Chanteperdrix
2008-01-26 18:17             ` Philippe Gerum
2008-01-26 18:43               ` Gilles Chanteperdrix
2008-01-27  0:19                 ` Philippe Gerum
     [not found]                   ` <18333.3277.36164.63798@domain.hid>
2008-01-27 23:34                     ` Philippe Gerum
2008-01-28 11:02                       ` Gilles Chanteperdrix
2008-01-28 12:18                         ` Gilles Chanteperdrix

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.