Re: No 100 HZ timer !

george anzinger
2001-08-14T19:21:33Z

Jamie Lokier wrote:
>
> Pavel Machek wrote:
> > > The testing I have done seems to indicate a lower overhead on a lightly
> > > loaded system, about the same overhead with some load, and much more
> > > overhead with a heavy load. To me this seems like the wrong thing to
> > > do. We would like as nearly a flat overhead to load curve as we can get
> >
> > Why? Higher overhead is a price for better precision timers. If you rounded
> > all times in "tickless" mode, you'd get about same overhead, right?
>
> What Pavel says is true only if the data structure for holding pending
> timers degrades into good O(1) insertion & deletion time in the tickless case.
>
> I recall George Anzinger saying something about the current ticked
> scheduler being able to insert timers that never reach expiry very
> efficiently (simply a list insert + delete), whereas the current
> tickless code could not do that.
>
> Is that right? Is it the data structure that is taking too long to
> process, when many timers that do not reach expiry are inserted? There
> would be one such insertion and deletion on every context switch, right?

No. It is not the data structure. I did not change it for the
experimental code. This, of course, could lead to some additional
overhead looking up the next timer to figure when the next interrupt is
needed. I used the code from the IBM tick less patch which did a brute
force search. In actual fact this is not too bad as I also force a
timer every second, so at most ten lists need to be examined. The
instrumentation on this look up hardly shows up, and of course, it is
only needed after an interrupt.

The overhead comes from setting up a timer for the "slice" on every
schedule. Schedule(), in a busy system, gets called often, and "slices"
do not often expire. The other issue is additional overhead for the
jiffie (which is a function). On review of this code, I see that it
needs to protect it self from interrupt, so as written in the
experimental code, it is wrong and could loose track of time (however,
it is faster as written). Now neither of these operations take very
long, it is just that they are called every schedule, which is called
often enough to make a difference. Those who optimized the scheduler
with gotos and such knew what they were doing! It is a function that is
called enough to make the optimization worth while.

For those who would like to try the experimental system it can be found
at:
http://sourceforge.net/projects/high-res-timers
where it is called the "no HZ tick test". Do read the release notes to
understand what you are getting.

George