Re: Interrupt Bottom Half Scheduling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



For those that are interested, I've gathered some statistics about the
high resolution timers.  I've already described the test conditions,
but here I'll give more information on our platform.

MPC8349 (PPC32 @ 528MHz)
512MB DDR2 SDRAM
16GB NAND (x8)

Some asked about the jitter distribution, and I've gathered some
numbers.  I ran this over 10000 samples.

Baseline:  Min = 3.821ms, Max = 3.951ms, Mean = 3.844ms, Variance =
88.5108 (deviation of about 9.4us)
Loaded: Min = 3.833ms, Max = 4.234ms, Mean = 4.099ms, Variance =
1276.35 (deviation of about 35us)

We see the mean go up and the variance increase.  The large number of
timers really do impact the performance of high priority tasks, and
the jitter gets much worse.

Further, I instrumented the timer_interrupt code to get a feeling for
the burden on the interrupt and how often the interrupts happen.  I
read the timbase register (a 64-bit incrementer that increments once
every ~15ns) at the start and end of the interrupt, and determine the
maximum.  I also measure how the time between the end of the timer
interrupt and the start of the next timer interrupt.

Baseline:  max burden = 79.7us, minimum time between interrupts =
364ns, average time between interrupts 421us.
Loaded:  max burden = 92.7us, minimum time between interrupts = 24ns,
average time between interrupts 180us

As we see, the interrupt frequency spikes when loaded, and the time
between interrupts drops significantly.  The interrupt burden rises
slightly, but given the fact we are interrupted quite frequently.
Now, our modification to increase the minimum decrementer delta did
improve the time between interrupts, but significantly increased the
timer interrupt burden (from 92.7us to 462us).  So, we either get lots
of interrupts, averaging 93us per hit, or few interrupts, but 426us of
burden.  Either way, it averages out to too much.

We are looking into ways to get away from nanosleep (or dramatically
drop the number of nanosleep calls).  To that end, we are considering
a timer "server" type application.  This application accepts timer
requests, schedules the appropriate nanosleep (or select, poll, etc),
then responds when the client needs to be awakened.  Does anyone know
of an existing project that does something similar to this?  Perhaps
somethings smaller than dbus, but with the same kind of operation.

Thanks,
Pete
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux