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

2016-07-04 Thread David Miller
From: John Fastabend 
Date: 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

2016-07-02 Thread John Fastabend
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

2016-06-30 Thread John Fastabend
On 16-06-30 01:23 AM, Jesper Dangaard Brouer wrote:
> On Wed, 29 Jun 2016 13:03:26 -0700
> John Fastabend  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.

[...]

>> +#
>> +# 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

2016-06-30 Thread Jesper Dangaard Brouer
On Wed, 29 Jun 2016 13:03:26 -0700
John Fastabend  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 
> ---
>  .../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

2016-06-29 Thread John Fastabend
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