Re: [net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer
From: John FastabendDate: Sat, 02 Jul 2016 14:13:13 -0700 > 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 Applied.
[net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer
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--- .../pktgen/pktgen_bench_xmit_mode_queue_xmit.sh| 66 1 file changed, 66 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 000..4e4e92b --- /dev/null +++ b/samples/pktgen/pktgen_bench_xmit_mode_queue_xmit.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# +# Benchmark script: +# - developed for benchmarking egress qdisc path, derived (more +#like cut'n'pasted) 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 +[ -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 for queue_xmit mode +if [[ -n "$BURST" ]]; then +err 1 "Bursting not supported for this mode" +fi + +# Base Config +DELAY="0"# Zero means max speed +COUNT="1000" # 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 TX qdisc egress path of stack +pg_set $dev "xmit_mode queue_xmit" +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
Re: [net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer
On 16-06-30 01:23 AM, Jesper Dangaard Brouer wrote: > On Wed, 29 Jun 2016 13:03:26 -0700 > John Fastabendwrote: > >> 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. [...] >> +# >> +# Benchmark script: >> +# - developed for benchmarking egress qdisc path, derived from >> +#ingress benchmark script. >> +# As you probably gathered 'derived' is giving me too much credit here its more like cut'n'pasted from ingress benchmark scrip :) >> +# 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 > Agreed that is nicer. I had originally left it to make sure I was catching the burst > 1 case in pktgen but will remove. >> + >> +# Base Config >> +DELAY="0"# Zero means max speed >> +COUNT="1000" # 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... Yep. > >> +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. Yep.
Re: [net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer
On Wed, 29 Jun 2016 13:03:26 -0700 John Fastabendwrote: > 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 > --- > .../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 000..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="1000" # 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
[net-next PATCH v2 2/2] net: samples: pktgen mode samples/tests for qdisc layer
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--- .../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 000..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 + +# Base Config +DELAY="0"# Zero means max speed +COUNT="1000" # 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 +pg_set $dev "xmit_mode queue_xmit" + +# Burst allow us to avoid measuring SKB alloc/free overhead +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