[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <19473.7957.743957.808639@gargle.gargle.HOWL>
Date: Thu, 10 Jun 2010 19:21:25 +0200
From: Robert Olsson <robert@...julf.net>
To: Daniel Turull <daniel.turull@...il.com>
Cc: David Miller <davem@...emloft.net>, netdev@...r.kernel.org,
robert@...julf.net, jens.laas@....uu.se
Subject: Re: [PATCH 1/2] pktgen: increasing transmission granularity
Thanks,
So with this improved rate control we could do RFC2544-like testing as well.
Cheers
--ro
Signed-off-by: Robert Olsson <robert.olsson@....uu.se>
Daniel Turull writes:
> This patch increases the granularity of the rate generated by pktgen.
> The previous version of pktgen uses micro seconds (udelay) resolution when it
> was delayed causing gaps in the rates. It is changed to nanosecond (ndelay).
> Now any rate is possible.
>
> Also it allows to set, the desired rate in Mb/s or packets per second.
>
> The documentation has been updated.
>
> Signed-off-by: Daniel Turull <daniel.turull@...il.com>
>
> ---
>
> diff --git a/Documentation/networking/pktgen.txt b/Documentation/networking/pktgen.txt
> index 61bb645..75e4fd7 100644
> --- a/Documentation/networking/pktgen.txt
> +++ b/Documentation/networking/pktgen.txt
> @@ -151,6 +151,8 @@ Examples:
>
> pgset stop aborts injection. Also, ^C aborts generator.
>
> + pgset "rate 300M" set rate to 300 Mb/s
> + pgset "ratep 1000000" set rate to 1Mpps
>
> Example scripts
> ===============
> @@ -241,6 +243,9 @@ src6
> flows
> flowlen
>
> +rate
> +ratep
> +
> References:
> ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/
> ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/
> diff --git a/net/core/pktgen.c b/net/core/pktgen.c
> index 1dacd7b..6428653 100644
> --- a/net/core/pktgen.c
> +++ b/net/core/pktgen.c
> @@ -169,7 +169,7 @@
> #include <asm/dma.h>
> #include <asm/div64.h> /* do_div */
>
> -#define VERSION "2.73"
> +#define VERSION "2.74"
> #define IP_NAME_SZ 32
> #define MAX_MPLS_LABELS 16 /* This is the max label stack depth */
> #define MPLS_STACK_BOTTOM htonl(0x00000100)
> @@ -980,6 +980,40 @@ static ssize_t pktgen_if_write(struct file *file,
> (unsigned long long) pkt_dev->delay);
> return count;
> }
> + if (!strcmp(name, "rate")) {
> + len = num_arg(&user_buffer[i], 10, &value);
> + if (len < 0)
> + return len;
> +
> + i += len;
> + if (!value)
> + return len;
> + pkt_dev->delay = pkt_dev->min_pkt_size*8*NSEC_PER_USEC/value;
> + if (debug)
> + printk(KERN_INFO
> + "pktgen: Delay set at: %llu ns\n",
> + pkt_dev->delay);
> +
> + sprintf(pg_result, "OK: rate=%lu", value);
> + return count;
> + }
> + if (!strcmp(name, "ratep")) {
> + len = num_arg(&user_buffer[i], 10, &value);
> + if (len < 0)
> + return len;
> +
> + i += len;
> + if (!value)
> + return len;
> + pkt_dev->delay = NSEC_PER_SEC/value;
> + if (debug)
> + printk(KERN_INFO
> + "pktgen: Delay set at: %llu ns\n",
> + pkt_dev->delay);
> +
> + sprintf(pg_result, "OK: rate=%lu", value);
> + return count;
> + }
> if (!strcmp(name, "udp_src_min")) {
> len = num_arg(&user_buffer[i], 10, &value);
> if (len < 0)
> @@ -2142,15 +2176,15 @@ static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until)
> hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
> hrtimer_set_expires(&t.timer, spin_until);
>
> - remaining = ktime_to_us(hrtimer_expires_remaining(&t.timer));
> + remaining = ktime_to_ns(hrtimer_expires_remaining(&t.timer));
> if (remaining <= 0) {
> pkt_dev->next_tx = ktime_add_ns(spin_until, pkt_dev->delay);
> return;
> }
>
> start_time = ktime_now();
> - if (remaining < 100)
> - udelay(remaining); /* really small just spin */
> + if (remaining < 100000)
> + ndelay(remaining); /* really small just spin */
> else {
> /* see do_nanosleep */
> hrtimer_init_sleeper(&t, current);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists