Re: [patch] pktgen: bug when calling ndelay in x86 architectures
flat view
From: Ben Hutchings <hidden>
Date: 2011-10-18 14:00:16
On Tue, 2011-10-18 at 13:56 +0200, Eric Dumazet wrote:
Le mardi 18 octobre 2011 à 13:08 +0200, Daniel Turull a écrit :quoted
The value selected to delay the transmission in pktgen with the ndelay function should be lower. In Linux/arch/x86/include/asm/delay.h and Linux/arch/sh/include/asm/delay.h the maximal expected value for a constant is 20000 ns. Signed-off-by: Daniel Turull <redacted> ---diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 796044a..e17bd41 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c@@ -2145,7 +2145,7 @@ static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until) } start_time = ktime_now(); - if (remaining < 100000) + if (remaining < 20000) ndelay(remaining); /* really small just spin */ else { /* see do_nanosleep */But 'remaining' is not a constant. If we want exactly 40.000 packets per second rate (25 us between packets), your patch makes this not quite possible without CONFIG_HIGH_RES_TIMERS and probable high jitter because of scheduler effects. pktgen is kind of special, we _want_ a cpu for our exclusive use.
AIUI, the reason for limits on delays is not that it's bad practice to spin for so long, but that the delay calculations may overflow or otherwise become inaccurate. Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.