[lkml]   [2009]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[rt-preempt / powerpc] Looks like tick_sched_timer() is a major latency source

I was trying to get minimum possible in-kernel latencies on a freescale
8360 CPU based board (powerpc arch). There is a project where <30 us worst
case latency is required, and question was - is it possible to use
linux+preempt-rt (which is preferred for a number of reason) or not.

I used kernel, which, for my best knowledge, was the
last "release" of preempt-rt at the moment when I started.

I used 8360's Generic Timer Module to both to generate interrupts and to
measure lanencies. GTM timers continue to count after firing an interrupt,
so latency may be measured my reading current timer value and comparing
that with the value at which interrupt was generated. I believe this
method is both simple and accurate.

The result is:

- average latency up to IRQF_NODELAY interrupt header is 2-3 us, even on a
system with high i/o and cpu load. To generate load, I used a flood ping
and several 'while true; do true; done' cpu-eaters.

- but worst-case latency is BAD. I occasionally got >50 us even on idle

I tried hard to identify the latency source, and at some moment discovered
tick_sched_timer() from kernel/time/tick-sched.c. This routine is called
from timer interrupt with hardware interrupts disabled, and may execute
for 50 us and more.

Could someone please comment on this?
Is it possible to move (part of) tick_sched_timer() call tree out of
hardware-interrupts-disabled context without breaking things?


Please CC: reply to my e-mail address. Thanks.

 \ /
  Last update: 2009-06-23 19:21    [W:0.033 / U:3.860 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site