> > Never set the next hit of the timer to (now + MIN_INTERVAL).
>
> The overhead under load is _not_ the timer interrupt, it is the context
> switch that needs to set up a "slice" timer, most of which never
> expire. During a kernel compile on an 800MHZ PIII I am seeing ~300
> context switches per second (i.e. about every 3 ms.) Clearly the
> switching is being caused by task blocking. With the ticked system the
> "slice" timer overhead is constant.
Can you instead just not set up a reschedule timer if the timer at the
head of the list is less than MIN_INTERVAL?
if(slice_timer_needed)
{
if(time_until(next_timer)>TASK_SLICE)
{
next_timer=jiffies()+TASK_SLICE;
add_timer(TASK_SLICE);
}
slice_timer_needed=0;
}
-- "Love the dolphins," she advised him. "Write by W.A.S.T.E.."- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/