Subject: Re: [net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer

From: Jesper Dangaard Brouer <[email-masked]>
Date: Thu, 30 Jun 2016 10:23:29 +0200

On Wed, 29 Jun 2016 13:03:26 -0700
John Fastabend <[email-masked]> wrote:

> This adds samples for pktgen to use with new mode to inject pkts into
> the qdisc layer. This also doubles as nice test cases to test any
> patches against qdisc layer.
> 
> Signed-off-by: John Fastabend <[email-masked]>
> ---
>  .../pktgen/pktgen_bench_xmit_mode_queue_xmit.sh    |   70 ++++++++++++++++++++
>  1 file changed, 70 insertions(+)
>  create mode 100755 samples/pktgen/pktgen_bench_xmit_mode_queue_xmit.sh
> 
> diff --git a/samples/pktgen/pktgen_bench_xmit_mode_queue_xmit.sh b/samples/pktgen/pktgen_bench_xmit_mode_queue_xmit.sh
> new file mode 100755
> index 0000000..eee06cc
> --- /dev/null
> +++ b/samples/pktgen/pktgen_bench_xmit_mode_queue_xmit.sh
> @@ -0,0 +1,70 @@
> +#!/bin/bash
> +#
> +# Benchmark script:
> +#  - developed for benchmarking egress qdisc path, derived from
> +#    ingress benchmark script.
> +#
> +# Script for injecting packets into egress qdisc path of the stack
> +# with pktgen "xmit_mode queue_xmit".
> +#
> +basedir=`dirname $0`
> +source ${basedir}/functions.sh
> +root_check_run_with_sudo "$@"
> +
> +# Parameter parsing via include
> +source ${basedir}/parameters.sh
> +# Using invalid DST_MAC will cause the packets to get dropped in
> +# ip_rcv() which is part of the test
> +[ -z "$DEST_IP" ] && DEST_IP="198.18.0.42"
> +[ -z "$DST_MAC" ] && DST_MAC="90:e2:ba:ff:ff:ff"
> +
> +# Burst greater than 1 are invalid but allow users to specify it and
> +# get an error instead of silently ignoring it.
> +[ -z "$BURST" ] && BURST=1

In other scripts I've rejected this at this step, instead of depending
on failure when sending the burst option to pktgen. Like:

https://github.com/netoptimizer/network-testing/blob/master/pktgen/pktgen_sample04_many_flows.sh#L31-L33

> +
> +# Base Config
> +DELAY="0"        # Zero means max speed
> +COUNT="10000000" # Zero means indefinitely
> +
> +# General cleanup everything since last run
> +pg_ctrl "reset"
> +
> +# Threads are specified with parameter -t value in $THREADS
> +for ((thread = 0; thread < $THREADS; thread++)); do
> +    # The device name is extended with @name, using thread number to
> +    # make then unique, but any name will do.
> +    dev=${DEV}@${thread}
> +
> +    # Add remove all other devices and add_device $dev to thread
> +    pg_thread $thread "rem_device_all"
> +    pg_thread $thread "add_device" $dev
> +
> +    # Base config of dev
> +    pg_set $dev "flag QUEUE_MAP_CPU"
> +    pg_set $dev "count $COUNT"
> +    pg_set $dev "pkt_size $PKT_SIZE"
> +    pg_set $dev "delay $DELAY"
> +    pg_set $dev "flag NO_TIMESTAMP"
> +
> +    # Destination
> +    pg_set $dev "dst_mac $DST_MAC"
> +    pg_set $dev "dst $DEST_IP"
> +
> +    # Inject packet into RX path of stack

Hmmm, maybe above comment need to be adjusted...

> +    pg_set $dev "xmit_mode queue_xmit"
> +
> +    # Burst allow us to avoid measuring SKB alloc/free overhead

This comment is confusing, maybe just remove. Didn't think burst is a
valid use-case.

> +    pg_set $dev "burst $BURST"
> +done
> +
> +# start_run
> +echo "Running... ctrl^C to stop" >&2
> +pg_ctrl "start"
> +echo "Done" >&2
> +
> +# Print results
> +for ((thread = 0; thread < $THREADS; thread++)); do
> +    dev=${DEV}@${thread}
> +    echo "Device: $dev"
> +    cat /proc/net/pktgen/$dev | grep -A2 "Result:"
> +done
> 

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer