From: george anzinger <george@mvista.com>
To: mbs <mbs@mc.com>
Cc: rmoser <mlmoser@comcast.net>,
Jae-Young Kim <jaykim@cs.purdue.edu>,
linux-kernel@vger.kernel.org
Subject: Re: kernel timer accuracy
Date: Tue, 29 Apr 2003 13:10:17 -0700 [thread overview]
Message-ID: <3EAEDC29.3010102@mvista.com> (raw)
In-Reply-To: <200304291945.PAA27684@mc.com>
It would help to know what kernel version and machine this is. The
slow drift followed by a realignment sounds like a drift between the
clock tick and the run_timer_list tick. This, in fact, does happen on
i386 SMP systems where the run_timer_list tick comes from the APIC and
the clock tick from the PIT.
-g
mbs wrote:
> the semantic of most "timer" style operations (sleep, nanosleep, timer_xxx
> etc) are generally "not less than" or "no earlier than", i.e wait no less
> than 50ms, so anything over 50 is ok (usually within some defined window),
> but less than 50 is a big no no.
>
> it seems that the insert mechanism probably sets "5 ticks from now" resulting
> in 4 complete jiffie intervals plus a partial, rather than "5 complete
> intervals plus whatever part remains of the interval I'm currently in"
>
> this may be the correct and intended semantic for the mechanism he is using,
> but it is clearly not what he expected.
>
> On Tuesday 29 April 2003 15:11, rmoser wrote:
>
>>Note: Not much of this makes sense or is useful. Read it, maybe
>>I'm wrong. It's short.
>>
>>*********** REPLY SEPARATOR ***********
>>
>>On 4/29/2003 at 11:54 AM Jae-Young Kim wrote:
>>
>>>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
>>>... ... ...
>>
>>Looks normal. Did someone point this at 50? Because it looks normal
>>centered at 45. Maybe you should try centering the delay at 50? (For a
>>start... 5 mS for 50 mS is too much for me) At least in large lengths of
>>time, it would then balance out. Graph this function:
>>
>>f(x) = 1/(sqrt(2*pi)) * pow(e, 0.5 * pow(x,2))
>>
>>That should illustrate normality. If you make a distribution curve of
>>actual times, does it look like that? If so, try first to make it center
>>around 50, then try to decrease the standard deviation (which is reflected
>>by having more fluctuations be closer to the mean).
>>
>>
>>>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.
>>
>>That'd be impossible. The computer is absolutely incapable of producing a
>>random number on its own, much less several [million]. :-p It may be
>>semi- random or apparently-random though.
>>
>>
>>>- 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/
>>
>>-
>>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/
>
>
--
George Anzinger george@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml
next prev parent reply other threads:[~2003-04-29 19:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-29 16:54 kernel timer accuracy Jae-Young Kim
2003-04-29 19:11 ` rmoser
2003-04-29 19:47 ` mbs
2003-04-29 20:10 ` george anzinger [this message]
[not found] ` <33201371.1051641831@blackhawk>
2003-04-30 6:01 ` Jae-Young Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3EAEDC29.3010102@mvista.com \
--to=george@mvista.com \
--cc=jaykim@cs.purdue.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=mbs@mc.com \
--cc=mlmoser@comcast.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox