We describe a reimplementation of the BSD timer facilities. Older BSD
kernels take time proportional to the number of outstanding timers to
set or cancel timers. Our implementation tin NetBSD) takes constant ti
me to start, stop, and maintain timers; this leads to a highly scalabl
e design that can support thousands of outstanding timers without much
overhead. Unlike the existing implementation, our routines are guaran
teed to lock out interrupts only for a small, bounded amount of time,
We also extend the setitimer() interface to allow a process to have mu
ltiple outstanding timers, thereby reducing the need for users to main
tain their own timer packages. The changes to the kernel are small (54
8 lines of code added, 80 removed) and are available on the World Wide
Web. (C) 1998 John Wiley & Sons, Ltd.