On Wed, 29 Jun 2016 13:03:26 -0700 John Fastabend <john.fastab...@gmail.com> 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 <john.r.fastab...@intel.com> > --- > .../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