netdev
[Top] [All Lists]

Re: Inaccuracies with SCH_CLK_CPU

To: Stephen Hemminger <shemminger@xxxxxxxx>
Subject: Re: Inaccuracies with SCH_CLK_CPU
From: Patrick McHardy <kaber@xxxxxxxxx>
Date: Wed, 04 Aug 2004 22:10:43 +0200
Cc: netdev@xxxxxxxxxxx
In-reply-to: <20040804094310.1d054b3a@dell_ss3.pdx.osdl.net>
References: <20040804094310.1d054b3a@dell_ss3.pdx.osdl.net>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Debian/1.6-5
Stephen Hemminger wrote:

I noticed that the netem delay values are off if using CONFIG_NET_SCH_CKL_CPU. For example, if the latency is set to 500ms
a ping reports the time as much less (343ms).


Requested       JIFFIES GETTIMEODAY     CPU
0               .1      .1              .1
1               2       2               1
5               5       6               4
10              10      11              7
100             98      101             69
500             489     500             343
1000            976     1000            685

The 1ms value is affected by the clock granularity.  Larger jiffie values
are inaccurate due to the optimization of using shift to do divide (ie 1024 > 
1000).

I need to look at this some more.


With CLK_CPU /proc/net/psched is: 000005d9 00000400 000f4240 000003e8


Instead of computing own values of psched_us_per_tick and psched_clock_per_hz, couldn't the values already done in timers code be used?

Can we do this in a uniform way on all architectures supported by
NET_SCH_CLK_CPU ? I think it's easier to fix up the PSCHED_* macros.


Also doesn't PSCHED_US2JIFFIE need to be doing a do_div() in order to correctly do u64 divided by u32. Otherwise it ends up just doing an u32 divide.

No, PSCHED_US2JIFFIE is intended to be used with psched_tdiff_t, using
psched_time_t doesn't work with NET_SCH_CLK_GETTIMEOFDAY. psched_tdiff_t
is 32-bit on all 32-bit architectures.

Regards
Patrick


<Prev in Thread] Current Thread [Next in Thread>