public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: George Anzinger <george@mvista.com>
To: Tom Marshall <tmarshall@real.com>
Cc: Andrew Morton <akpm@osdl.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: Fw: missed itimer signals in 2.6
Date: Wed, 15 Oct 2003 08:11:38 -0700	[thread overview]
Message-ID: <3F8D63AA.9000509@mvista.com> (raw)
In-Reply-To: <20031014235213.GC860@real.com>

Tom Marshall wrote:
>>Since the actual interval used by the system is a bit larger than what 
>>was asked for, there will be fewer ticks.
> 
> 
> I understand what happens and why.  I admit that I'm not familiar with the
> POSIX standard on this issue.  Questions:
> 
>  * I've heard that the kernel's timer resolution has increased from 10ms to
>    1ms in 2.6.  Why does the itimer have such a large granularity?  I
>    expected it to be highly accurate in this range.

I think it is.  The missing understanding is, I think, that you expect the 
resolution to be exactly 1/HZ or 1ms.  It is actually not exactly that because 
the PIC can not generate 1ms interrupts (close but not close enough for NTP). 
So the kernel figures out what the true PIC rate is and sets up the resolution 
for that.  This results in a resolution of ~999,849 nanoseconds (i.e. instead of 
1,000,000 nano seconds per tick).  Now there is some errors in converting this 
to micro seconds..., but the actual math is done with more precision with the 
conversion after (which is why the various times the program tries don't come 
out being exact multiples of each other, or of anything expressed as only 
microseconds).
> 
>  * Is this how the timer is supposed to work?  It seems to me that an
>    algorithm which kept running track of the difference in requested and
>    actual times (a la Bresenham) could make the itimer behave closer to what
>    the user requested.

I THINK you are suggesting that a different increment be used each timer expiry 
to get closer to the desired rate.  Sorry, not only is this a LOT more overhead, 
it is not the way the standard is written.  The standard says all these times 
are to be rounded up to the resolution, which is what the system does.  It is 
just that the resolution is not what you expect.

For what its worth, the POSIX clocks and timers (accessed through timer_settime, 
etc.) compute time to the nanosecond, so they will have less rounding error and 
will be a tad closer to the requested.  Still, we are dealing with an underlying 
ticker that only has 999,849 nanosecond resolution.

Hope this helps

George
> 
> 
>>Maybe you could save this code if it is part of a test suite....
> 
> 
> This code is part of a "timer calibration" routine used by the RealNetworks
> Helix Server.  I just noticed that the timer calibration failed on a machine
> that had 2.6.0-test7 installed (we have not officially looked at supporting
> 2.6 yet).  The test runs on many different flavors of *nix (probably a dozen
> or so).  I can check to see what the behavior is on the other platforms if
> that would be useful.  If this is the Right Way to do timers, we'll probably
> end up changing our "calibration" routine to read back the actual timer
> interval as you suggest.
> 

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


  reply	other threads:[~2003-10-15 15:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20031013163411.37423e4e.akpm@osdl.org>
2003-10-14 23:28 ` Fw: missed itimer signals in 2.6 George Anzinger
2003-10-14 23:52   ` Tom Marshall
2003-10-15 15:11     ` George Anzinger [this message]
2003-10-15 16:50       ` Tom Marshall
2003-10-15 16:55         ` Tom Marshall
2003-10-15 22:51         ` George Anzinger
2003-10-15 23:25           ` Tom Marshall
2003-10-16  0:20             ` George Anzinger

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=3F8D63AA.9000509@mvista.com \
    --to=george@mvista.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tmarshall@real.com \
    /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