2.6.18-rt1

Ingo Molnar
2006-09-20T14:27:24Z

I'm pleased to announce the 2.6.18-rt1 tree, which can be downloaded
from the usual place:

http://redhat.com/~mingo/realtime-preempt/

This port to the 2.6.18 codebase was very complex (given that 5 major
features moved from -rt into 2.6.18: rtmutex, pi-futex, genirq, gtod and
lockdep), so it took quite some time to finish, but in exchange it
includes nice new features and also lots of bugfixes.

In particular, a nasty softirq performance bug has been fixed, which
caused the "5x slowdown under TCP" bug reported to lkml - those TCP
performance figures are now on par with vanilla performance.

The biggest new features are:

- Dynticks (a tickless kernel). This is a new feature we implemented
ontop of hrtimers for the -hrt patchqueue and now we merged it to -rt
too. There's a new config option: CONFIG_NO_HZ, which if enabled,
produces a system with fewer timer interrupts. Currently i686 and
x86_64 are tested, but in general a hrtimers-ready platform needs
minimal changes to support dynticks too. (from Thomas Gleixner and
me, the x86_64 port is from Arjan van de Ven)

- Timer expiry statistics feature from Thomas Gleixner:
CONFIG_TIMER_STATS. Enable/disable via "echo 1[0] > /proc/tstats",
display via "cat /proc/stats".

This kernel feature tracks the starting site (and expiry function) of
expired timers (both timer_list timers and hrtimers), and the number
of times they expired. This is a nice tool for those who'd like to
minimize the amount of timer ticks on their battery-based systems.
Sample output:

Timerstats sample period: 3.888770 s
12, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick)
15, 1 swapper hcd_submit_urb (rh_timer_func)
4, 959 kedac schedule_timeout (process_timeout)
1, 0 swapper page_writeback_init (wb_timer_fn)
28, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick)
22, 2948 IRQ 4 tty_flip_buffer_push (delayed_work_timer_fn)
3, 3100 bash schedule_timeout (process_timeout)
1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn)
1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn)
1, 1 swapper neigh_table_init_no_netlink (neigh_periodic_timer)
1, 2292 ip __netdev_watchdog_up (dev_watchdog)
1, 23 events/1 do_cache_clean (delayed_work_timer_fn)
90 total events, 30.0 events/sec

- There's also a new runtime-configurable kernel option under
/proc/sys/kernel/timeout_granularity that allows the coarser expiry
of timer_list timers, and hence better batching of timer expiry.
(hrtimers are not affected) The value of this option gives a
'multiplier' to the standard HZ granularity.

- Lock validator ported to -rt: it now checks all the sleeping lock
variants in -rt too. This helps us catch not only deadlocks but also
raw-lock candidates, sooner than before.

- The latest High Resolution Timers queue from Thomas Gleixner with
initial support for ARM and PPC. (Kevin Hilman, Deepak Saksena,
Sergei Shtylyov)

- The latest GTOD (Generic Time Of Day) queue from John Stultz,
including NTP cleanups from Roman Zippel.

- The latest genirq queue: more irq-chip-ization of i686 and x86_64,
MSI cleanups from Eric W. Biederman et al.

- The latest preemptible-RCU queue from Paul E McKenney and Dipankar
Sarma.

- (assorted fixes and improvements.)

Right now i686 and x86_64 are boot-tested, and ARM is compile-tested.
The other architectures likely wont even build yet. This being the first
2.6.18 based release of -rt, some tester caution is called for.

to build a 2.6.18-rt1 tree, the following patches should be applied:

http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
http://redhat.com/~mingo/realtime-preempt/patch-2.6.18-rt1

as usual, bugreports, fixes and suggestions are welcome,

Ingo