netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples
@ 2016-07-13 20:05 Jesper Dangaard Brouer
  2016-07-13 20:06 ` [net-next PATCH 1/3] pktgen: add sample script pktgen_sample04_many_flows.sh Jesper Dangaard Brouer
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-07-13 20:05 UTC (permalink / raw)
  To: netdev; +Cc: john.fastabend, Jesper Dangaard Brouer

This patchset is adding some pktgen sample scripts that I've been
using for a while[1], and they seams to relevant for more people.

Patchset also remove some of the older style pktgen samples.

[1] https://github.com/netoptimizer/network-testing/tree/master/pktgen

---

Jesper Dangaard Brouer (3):
      pktgen: add sample script pktgen_sample04_many_flows.sh
      pktgen: add sample script pktgen_sample05_flow_per_thread.sh
      pktgen: remove sample script pktgen.conf-1-1-rdos


 samples/pktgen/pktgen.conf-1-1-flows              |   67 ---------------
 samples/pktgen/pktgen.conf-1-1-rdos               |   64 --------------
 samples/pktgen/pktgen_sample04_many_flows.sh      |   93 +++++++++++++++++++++
 samples/pktgen/pktgen_sample05_flow_per_thread.sh |   81 ++++++++++++++++++
 4 files changed, 174 insertions(+), 131 deletions(-)
 delete mode 100755 samples/pktgen/pktgen.conf-1-1-flows
 delete mode 100755 samples/pktgen/pktgen.conf-1-1-rdos
 create mode 100755 samples/pktgen/pktgen_sample04_many_flows.sh
 create mode 100755 samples/pktgen/pktgen_sample05_flow_per_thread.sh

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [net-next PATCH 1/3] pktgen: add sample script pktgen_sample04_many_flows.sh
  2016-07-13 20:05 [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples Jesper Dangaard Brouer
@ 2016-07-13 20:06 ` Jesper Dangaard Brouer
  2016-07-13 20:06 ` [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh Jesper Dangaard Brouer
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-07-13 20:06 UTC (permalink / raw)
  To: netdev; +Cc: john.fastabend, Jesper Dangaard Brouer

Adding a pktgen sample script that demonstrates how to use pktgen
for simulating flows.  Script will generate a certain number of
concurrent flows ($FLOWS) and each flow will contain $FLOWLEN
packets, which will be send back-to-back, before switching to a
new flow, due to flag FLOW_SEQ.

This script obsoletes the old sample script 'pktgen.conf-1-1-flows',
which is removed.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/pktgen/pktgen.conf-1-1-flows         |   67 -------------------
 samples/pktgen/pktgen_sample04_many_flows.sh |   93 ++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 67 deletions(-)
 delete mode 100755 samples/pktgen/pktgen.conf-1-1-flows
 create mode 100755 samples/pktgen/pktgen_sample04_many_flows.sh

diff --git a/samples/pktgen/pktgen.conf-1-1-flows b/samples/pktgen/pktgen.conf-1-1-flows
deleted file mode 100755
index 081749c9707d..000000000000
--- a/samples/pktgen/pktgen.conf-1-1-flows
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-#modprobe pktgen
-
-
-function pgset() {
-    local result
-
-    echo $1 > $PGDEV
-
-    result=`cat $PGDEV | fgrep "Result: OK:"`
-    if [ "$result" = "" ]; then
-         cat $PGDEV | fgrep Result:
-    fi
-}
-
-# Config Start Here -----------------------------------------------------------
-
-
-# thread config
-# Each CPU has its own thread. One CPU example. We add eth1.
-
-PGDEV=/proc/net/pktgen/kpktgend_0
-  echo "Removing all devices"
- pgset "rem_device_all"
-  echo "Adding eth1"
- pgset "add_device eth1"
-
-
-# device config
-# delay 0
-# We need to do alloc for every skb since we cannot clone here.
-
-CLONE_SKB="clone_skb 0"
-# NIC adds 4 bytes CRC
-PKT_SIZE="pkt_size 60"
-
-# COUNT 0 means forever
-#COUNT="count 0"
-COUNT="count 10000000"
-DELAY="delay 0"
-
-PGDEV=/proc/net/pktgen/eth1
-  echo "Configuring $PGDEV"
- pgset "$COUNT"
- pgset "$CLONE_SKB"
- pgset "$PKT_SIZE"
- pgset "$DELAY"
- # Random address with in the min-max range
- pgset "flag IPDST_RND"
- pgset "dst_min 10.0.0.0"
- pgset "dst_max 10.255.255.255"
-
- # 8k Concurrent flows at 4 pkts
- pgset "flows 8192"
- pgset "flowlen 4"
-
- pgset "dst_mac  00:04:23:08:91:dc"
-
-# Time to run
-PGDEV=/proc/net/pktgen/pgctrl
-
- echo "Running... ctrl^C to stop"
- trap true INT
- pgset "start"
- echo "Done"
- cat /proc/net/pktgen/eth1
diff --git a/samples/pktgen/pktgen_sample04_many_flows.sh b/samples/pktgen/pktgen_sample04_many_flows.sh
new file mode 100755
index 000000000000..f60412e445bb
--- /dev/null
+++ b/samples/pktgen/pktgen_sample04_many_flows.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# Script example for many flows testing
+#
+# Number of simultaneous flows limited by variable $FLOWS
+# and number of packets per flow controlled by variable $FLOWLEN
+#
+basedir=`dirname $0`
+source ${basedir}/functions.sh
+root_check_run_with_sudo "$@"
+
+# Parameter parsing via include
+source ${basedir}/parameters.sh
+# Set some default params, if they didn't get set
+[ -z "$DEST_IP" ]   && DEST_IP="198.18.0.42"
+[ -z "$DST_MAC" ]   && DST_MAC="90:e2:ba:ff:ff:ff"
+[ -z "$CLONE_SKB" ] && CLONE_SKB="0"
+
+# NOTICE:  Script specific settings
+# =======
+# Limiting the number of concurrent flows ($FLOWS)
+# and also set how many packets each flow contains ($FLOWLEN)
+#
+[ -z "$FLOWS" ]     && FLOWS="8000"
+[ -z "$FLOWLEN" ]   && FLOWLEN="10"
+
+# Base Config
+DELAY="0"  # Zero means max speed
+COUNT="0"  # Zero means indefinitely
+
+if [[ -n "$BURST" ]]; then
+    err 1 "Bursting not supported for this mode"
+fi
+
+# 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
+    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
+    pg_set $dev "flag QUEUE_MAP_CPU"
+    pg_set $dev "count $COUNT"
+    pg_set $dev "clone_skb $CLONE_SKB"
+    pg_set $dev "pkt_size $PKT_SIZE"
+    pg_set $dev "delay $DELAY"
+    pg_set $dev "flag NO_TIMESTAMP"
+
+    # Single destination
+    pg_set $dev "dst_mac $DST_MAC"
+    pg_set $dev "dst $DEST_IP"
+
+    # Randomize source IP-addresses
+    pg_set $dev "flag IPSRC_RND"
+    pg_set $dev "src_min 198.18.0.0"
+    pg_set $dev "src_max 198.19.255.255"
+
+    # Limit number of flows (max 65535)
+    pg_set $dev "flows $FLOWS"
+    #
+    # How many packets a flow will send, before flow "entry" is
+    # re-generated/setup.
+    pg_set $dev "flowlen $FLOWLEN"
+    #
+    # Flag FLOW_SEQ will cause $FLOWLEN packets from the same flow
+    # being send back-to-back, before next flow is selected
+    # incrementally.  This helps lookup caches, and is more realistic.
+    #
+    pg_set $dev "flag FLOW_SEQ"
+
+done
+
+# Run if user hits control-c
+function print_result() {
+    # Print results
+    for ((thread = 0; thread < $THREADS; thread++)); do
+	dev=${DEV}@${thread}
+	echo "Device: $dev"
+	cat /proc/net/pktgen/$dev | grep -A2 "Result:"
+    done
+}
+# trap keyboard interrupt (Ctrl-C)
+trap true SIGINT
+
+echo "Running... ctrl^C to stop" >&2
+pg_ctrl "start"
+
+print_result

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh
  2016-07-13 20:05 [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples Jesper Dangaard Brouer
  2016-07-13 20:06 ` [net-next PATCH 1/3] pktgen: add sample script pktgen_sample04_many_flows.sh Jesper Dangaard Brouer
@ 2016-07-13 20:06 ` Jesper Dangaard Brouer
  2016-07-13 22:38   ` Alexei Starovoitov
  2016-07-13 20:06 ` [net-next PATCH 3/3] pktgen: remove sample script pktgen.conf-1-1-rdos Jesper Dangaard Brouer
  2016-07-14 22:20 ` [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples David Miller
  3 siblings, 1 reply; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-07-13 20:06 UTC (permalink / raw)
  To: netdev; +Cc: john.fastabend, Jesper Dangaard Brouer

This pktgen sample script is useful for scalability testing a
receiver.  The script will simply generate one flow per
thread (option -t N) using the thread number as part of the
source IP-address.

The single flow sample (pktgen_sample03_burst_single_flow.sh)
have become quite popular, but it is important that developers
also make sure to benchmark scalability of multiple receive
queues.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/pktgen/pktgen_sample05_flow_per_thread.sh |   81 +++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100755 samples/pktgen/pktgen_sample05_flow_per_thread.sh

diff --git a/samples/pktgen/pktgen_sample05_flow_per_thread.sh b/samples/pktgen/pktgen_sample05_flow_per_thread.sh
new file mode 100755
index 000000000000..32ad818e2829
--- /dev/null
+++ b/samples/pktgen/pktgen_sample05_flow_per_thread.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+#
+# Script will generate one flow per thread (-t N)
+#  - Same destination IP
+#  - Fake source IPs for each flow (fixed based on thread number)
+#
+# Useful for scale testing on receiver, to see whether silo'ing flows
+# works and scales.  For optimal scalability (on receiver) each
+# separate-flow should not access shared variables/data. This script
+# helps magnify any of these scaling issues by overloading the receiver.
+#
+basedir=`dirname $0`
+source ${basedir}/functions.sh
+root_check_run_with_sudo "$@"
+
+# Parameter parsing via include
+source ${basedir}/parameters.sh
+# Set some default params, if they didn't get set
+[ -z "$DEST_IP" ]   && DEST_IP="198.18.0.42"
+[ -z "$DST_MAC" ]   && DST_MAC="90:e2:ba:ff:ff:ff"
+[ -z "$CLONE_SKB" ] && CLONE_SKB="0"
+[ -z "$BURST" ]     && BURST=32
+
+
+# Base Config
+DELAY="0"  # Zero means max speed
+COUNT="0"  # 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
+    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
+    pg_set $dev "flag QUEUE_MAP_CPU"
+    pg_set $dev "count $COUNT"
+    pg_set $dev "clone_skb $CLONE_SKB"
+    pg_set $dev "pkt_size $PKT_SIZE"
+    pg_set $dev "delay $DELAY"
+    pg_set $dev "flag NO_TIMESTAMP"
+
+    # Single destination
+    pg_set $dev "dst_mac $DST_MAC"
+    pg_set $dev "dst $DEST_IP"
+
+    # Setup source IP-addresses based on thread number
+    pg_set $dev "src_min 198.18.$((thread+1)).1"
+    pg_set $dev "src_max 198.18.$((thread+1)).1"
+
+    # Setup burst, for easy testing -b 0 disable bursting
+    # (internally in pktgen default and minimum burst=1)
+    if [[ ${BURST} -ne 0 ]]; then
+	pg_set $dev "burst $BURST"
+    else
+	info "$dev: Not using burst"
+    fi
+
+done
+
+# Run if user hits control-c
+function print_result() {
+    # Print results
+    for ((thread = 0; thread < $THREADS; thread++)); do
+	dev=${DEV}@${thread}
+	echo "Device: $dev"
+	cat /proc/net/pktgen/$dev | grep -A2 "Result:"
+    done
+}
+# trap keyboard interrupt (Ctrl-C)
+trap true SIGINT
+
+echo "Running... ctrl^C to stop" >&2
+pg_ctrl "start"
+
+print_result

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [net-next PATCH 3/3] pktgen: remove sample script pktgen.conf-1-1-rdos
  2016-07-13 20:05 [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples Jesper Dangaard Brouer
  2016-07-13 20:06 ` [net-next PATCH 1/3] pktgen: add sample script pktgen_sample04_many_flows.sh Jesper Dangaard Brouer
  2016-07-13 20:06 ` [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh Jesper Dangaard Brouer
@ 2016-07-13 20:06 ` Jesper Dangaard Brouer
  2016-07-14 22:20 ` [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples David Miller
  3 siblings, 0 replies; 6+ messages in thread
From: Jesper Dangaard Brouer @ 2016-07-13 20:06 UTC (permalink / raw)
  To: netdev; +Cc: john.fastabend, Jesper Dangaard Brouer

Removing the pktgen sample script pktgen.conf-1-1-rdos, because
it does not contain anything that is not covered by the other and
newer style sample scripts.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/pktgen/pktgen.conf-1-1-rdos |   64 -----------------------------------
 1 file changed, 64 deletions(-)
 delete mode 100755 samples/pktgen/pktgen.conf-1-1-rdos

diff --git a/samples/pktgen/pktgen.conf-1-1-rdos b/samples/pktgen/pktgen.conf-1-1-rdos
deleted file mode 100755
index c7553be49b80..000000000000
--- a/samples/pktgen/pktgen.conf-1-1-rdos
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/bin/bash
-
-#modprobe pktgen
-
-
-function pgset() {
-    local result
-
-    echo $1 > $PGDEV
-
-    result=`cat $PGDEV | fgrep "Result: OK:"`
-    if [ "$result" = "" ]; then
-         cat $PGDEV | fgrep Result:
-    fi
-}
-
-# Config Start Here -----------------------------------------------------------
-
-
-# thread config
-# Each CPU has its own thread. One CPU example. We add eth1.
-
-PGDEV=/proc/net/pktgen/kpktgend_0
-  echo "Removing all devices"
- pgset "rem_device_all"
-  echo "Adding eth1"
- pgset "add_device eth1"
-
-
-# device config
-# delay 0
-
-# We need to do alloc for every skb since we cannot clone here.
-
-CLONE_SKB="clone_skb 0"
-# NIC adds 4 bytes CRC
-PKT_SIZE="pkt_size 60"
-
-# COUNT 0 means forever
-#COUNT="count 0"
-COUNT="count 10000000"
-DELAY="delay 0"
-
-PGDEV=/proc/net/pktgen/eth1
-  echo "Configuring $PGDEV"
- pgset "$COUNT"
- pgset "$CLONE_SKB"
- pgset "$PKT_SIZE"
- pgset "$DELAY"
- # Random address with in the min-max range
- pgset "flag IPDST_RND"
- pgset "dst_min 10.0.0.0"
- pgset "dst_max 10.255.255.255"
-
- pgset "dst_mac  00:04:23:08:91:dc"
-
-# Time to run
-PGDEV=/proc/net/pktgen/pgctrl
-
- echo "Running... ctrl^C to stop"
- trap true INT
- pgset "start"
- echo "Done"
- cat /proc/net/pktgen/eth1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh
  2016-07-13 20:06 ` [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh Jesper Dangaard Brouer
@ 2016-07-13 22:38   ` Alexei Starovoitov
  0 siblings, 0 replies; 6+ messages in thread
From: Alexei Starovoitov @ 2016-07-13 22:38 UTC (permalink / raw)
  To: Jesper Dangaard Brouer; +Cc: netdev, john.fastabend

On Wed, Jul 13, 2016 at 10:06:10PM +0200, Jesper Dangaard Brouer wrote:
> This pktgen sample script is useful for scalability testing a
> receiver.  The script will simply generate one flow per
> thread (option -t N) using the thread number as part of the
> source IP-address.
> 
> The single flow sample (pktgen_sample03_burst_single_flow.sh)
> have become quite popular, but it is important that developers
> also make sure to benchmark scalability of multiple receive
> queues.
> 
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> ---
>  samples/pktgen/pktgen_sample05_flow_per_thread.sh |   81 +++++++++++++++++++++
>  1 file changed, 81 insertions(+)
...
> +    # Setup source IP-addresses based on thread number
> +    pg_set $dev "src_min 198.18.$((thread+1)).1"
> +    pg_set $dev "src_max 198.18.$((thread+1)).1"

I have similar script that uses udp_src_min/max to change
port number, since port is easier to match on the target host
and we don't use ipv4 ;)
but this script is also good improvement. Thanks!
Acked-by: Alexei Starovoitov <ast@kernel.org>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples
  2016-07-13 20:05 [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples Jesper Dangaard Brouer
                   ` (2 preceding siblings ...)
  2016-07-13 20:06 ` [net-next PATCH 3/3] pktgen: remove sample script pktgen.conf-1-1-rdos Jesper Dangaard Brouer
@ 2016-07-14 22:20 ` David Miller
  3 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2016-07-14 22:20 UTC (permalink / raw)
  To: brouer; +Cc: netdev, john.fastabend

From: Jesper Dangaard Brouer <brouer@redhat.com>
Date: Wed, 13 Jul 2016 22:05:59 +0200

> This patchset is adding some pktgen sample scripts that I've been
> using for a while[1], and they seams to relevant for more people.
> 
> Patchset also remove some of the older style pktgen samples.
> 
> [1] https://github.com/netoptimizer/network-testing/tree/master/pktgen

Series applied, thanks Jesper.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-07-14 22:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-13 20:05 [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples Jesper Dangaard Brouer
2016-07-13 20:06 ` [net-next PATCH 1/3] pktgen: add sample script pktgen_sample04_many_flows.sh Jesper Dangaard Brouer
2016-07-13 20:06 ` [net-next PATCH 2/3] pktgen: add sample script pktgen_sample05_flow_per_thread.sh Jesper Dangaard Brouer
2016-07-13 22:38   ` Alexei Starovoitov
2016-07-13 20:06 ` [net-next PATCH 3/3] pktgen: remove sample script pktgen.conf-1-1-rdos Jesper Dangaard Brouer
2016-07-14 22:20 ` [net-next PATCH 0/3] pktgen samples: new scripts and removing older samples David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).