kernel timer accuracy

From: Jae-Young Kim (jaykim@cs.purdue.edu)
Date: Tue Apr 29 2003 - 11:54:27 EST


Hi, I'm developing a kernel module that enforces filtered packets to
get delayed for a given short time. I'm using netfilter for packet
filtering and using mod_timer() for packet delay.

The kernel module holds packet buffer (skb) in a linked list and
waits until the timer expires. If the timer expires, the module
releases the packets.

What I'm struggling is about the accuracy of timer function. Since
default Linux timer interrupt frequency is set to 100 HZ, I know
the smallest timer interval is 10 msec. and the one jiffy tick is
also 10 msec. However, it looks like that there's a small amount of
error between real-time clock and jiffy tick.

In my experiment, (I set the 50msec timer for each packet and I sent
one packet in every second), if I set 5 jiffies (= 50 msec) for my
packet delay, the timer correctly executes the callback function
after 5 jiffy ticks, however, the actual real-time measurment shows the
packet delay varies between 40msec and 50msec. Even worse, the actual
delay time variation has a trend. Please see the following data.

pkt no. jiffy actual delay
----------------------------------------
1 5 50.2msec
... ... ...
300 5 45.1msec
... ... ...
500 5 41.6msec
... ... ...
566 5 40.6msec
567 5 40.4msec
568 5 50.3msec
569 5 50.3msec
... ... ...

Here, the packet delay starts from around 50msec, but gradually decreased
to 40msec, and then abruptly adjusted to 50msec. The same decrese-and-abruptly-
adjusted trend was repeated.

Is there any person have experienced the same problem?
It looks like that the accuray below 10msec is not guaranteed, but I'd like to
know why this kind of trend happens (I initially thought the error should be
randomly distributed between 40msec to 60msec) and how the kernel adjust
the timer when the error term becomes over 10msec.

- Jay
-
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/



This archive was generated by hypermail 2b29 : Wed Apr 30 2003 - 22:00:32 EST