Skip to content

Commit

Permalink
samples: pktgen: new append mode
Browse files Browse the repository at this point in the history
To configure various complex flows we for sure can create custom
pktgen init scripts, but sometimes thats not that easy.

New "-a" (append) option in all the existing sample scripts allows
to append more "devices" into pktgen threads.

The most straightforward usecases for that are:
- using multiple devices. We have to generate full linerate on
all physical functions (ports) of our multiport device.
- pushing multiple flows (with different packet options)

Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
cail authored and davem330 committed Mar 14, 2021
1 parent ef700f2 commit c8fd485
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 50 deletions.
17 changes: 17 additions & 0 deletions samples/pktgen/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,28 @@ across the sample scripts. Usage example is printed on errors::
-b : ($BURST) HW level bursting of SKBs
-v : ($VERBOSE) verbose
-x : ($DEBUG) debug
-6 : ($IP6) IPv6
-w : ($DELAY) Tx Delay value (ns)
-a : ($APPEND) Script will not reset generator's state, but will append its config

The global variable being set is also listed. E.g. the required
interface/device parameter "-i" sets variable $DEV.

"-a" parameter may be used to create different flows simultaneously.
In this mode script will keep the existing config, will append its settings.
In this mode you'll have to manually run traffic with "pg_ctrl start".

For example you may use:

source ./samples/pktgen/functions.sh
pg_ctrl reset
# add first device
./pktgen_sample06_numa_awared_queue_irq_affinity.sh -a -i ens1f0 -m 34:80:0d:a3:fc:c9 -t 8
# add second device
./pktgen_sample06_numa_awared_queue_irq_affinity.sh -a -i ens1f1 -m 34:80:0d:a3:fc:c9 -t 8
# run joint traffic on two devs
pg_ctrl start

Common functions
----------------
The functions.sh file provides; Three different shell functions for
Expand Down
7 changes: 6 additions & 1 deletion samples/pktgen/functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,12 @@ function pgset() {
fi
}

[[ $EUID -eq 0 ]] && trap 'pg_ctrl "reset"' EXIT
if [[ -z "$APPEND" ]]; then
if [[ $EUID -eq 0 ]]; then
# Cleanup pktgen setup on exit if thats not "append mode"
trap 'pg_ctrl "reset"' EXIT
fi
fi

## -- General shell tricks --

Expand Down
7 changes: 6 additions & 1 deletion samples/pktgen/parameters.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@ function usage() {
echo " -x : (\$DEBUG) debug"
echo " -6 : (\$IP6) IPv6"
echo " -w : (\$DELAY) Tx Delay value (ns)"
echo " -a : (\$APPEND) Script will not reset generator's state, but will append its config"
echo ""
}

## --- Parse command line arguments / parameters ---
## echo "Commandline options:"
while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6" option; do
while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6a" option; do
case $option in
i) # interface
export DEV=$OPTARG
Expand Down Expand Up @@ -83,6 +84,10 @@ while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6" option; do
export IP6=6
info "IP6: IP6=$IP6"
;;
a)
export APPEND=yes
info "Append mode: APPEND=$APPEND"
;;
h|?|*)
usage;
err 2 "[ERROR] Unknown parameters!!!"
Expand Down
22 changes: 13 additions & 9 deletions samples/pktgen/pktgen_sample01_simple.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ UDP_SRC_MAX=109

# General cleanup everything since last run
# (especially important if other threads were configured by other scripts)
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Add remove all other devices and add_device $DEV to thread 0
thread=0
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $DEV

# How many packets to send (zero means indefinitely)
Expand Down Expand Up @@ -77,11 +77,15 @@ pg_set $DEV "flag UDPSRC_RND"
pg_set $DEV "udp_src_min $UDP_SRC_MIN"
pg_set $DEV "udp_src_max $UDP_SRC_MAX"

# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2
if [ -z "$APPEND" ]; then
# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2

# Print results
echo "Result device: $DEV"
cat /proc/net/pktgen/$DEV
# Print results
echo "Result device: $DEV"
cat /proc/net/pktgen/$DEV
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
28 changes: 16 additions & 12 deletions samples/pktgen/pktgen_sample02_multiqueue.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ if [ -n "$DST_PORT" ]; then
fi

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
Expand All @@ -47,7 +47,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}

# Add remove all other devices and add_device $dev to thread
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $dev

# Notice config queue to map to cpu (mirrors smp_processor_id())
Expand Down Expand Up @@ -81,14 +81,18 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
pg_set $dev "udp_src_max $UDP_SRC_MAX"
done

# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2
if [ -z "$APPEND" ]; then
# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2

# Print results
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
# Print results
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
12 changes: 8 additions & 4 deletions samples/pktgen/pktgen_sample03_burst_single_flow.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@ if [ -n "$DST_PORT" ]; then
fi

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}

# Add remove all other devices and add_device $dev to thread
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $dev

# Base config
Expand Down Expand Up @@ -94,5 +94,9 @@ function control_c() {
# trap keyboard interrupt (Ctrl-C)
trap control_c SIGINT

echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
14 changes: 9 additions & 5 deletions samples/pktgen/pktgen_sample04_many_flows.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ fi
read -r SRC_MIN SRC_MAX <<< $(parse_addr 198.18.0.0/15)

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}

# Add remove all other devices and add_device $dev to thread
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $dev

# Base config
Expand Down Expand Up @@ -104,7 +104,11 @@ function print_result() {
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT

echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"

print_result
print_result
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
14 changes: 9 additions & 5 deletions samples/pktgen/pktgen_sample05_flow_per_thread.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ if [ -n "$DST_PORT" ]; then
fi

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}

# Add remove all other devices and add_device $dev to thread
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $dev

# Base config
Expand Down Expand Up @@ -88,7 +88,11 @@ function print_result() {
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT

echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"

print_result
print_result
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi
30 changes: 17 additions & 13 deletions samples/pktgen/pktgen_sample06_numa_awared_queue_irq_affinity.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ if [ -n "$DST_PORT" ]; then
fi

# General cleanup everything since last run
pg_ctrl "reset"
[ -z "$APPEND" ] && pg_ctrl "reset"

# Threads are specified with parameter -t value in $THREADS
for ((i = 0; i < $THREADS; i++)); do
Expand All @@ -58,7 +58,7 @@ for ((i = 0; i < $THREADS; i++)); do
info "irq ${irq_array[$i]} is set affinity to `cat /proc/irq/${irq_array[$i]}/smp_affinity_list`"

# Add remove all other devices and add_device $dev to thread
pg_thread $thread "rem_device_all"
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
pg_thread $thread "add_device" $dev

# select queue and bind the queue and $dev in 1:1 relationship
Expand Down Expand Up @@ -99,14 +99,18 @@ for ((i = 0; i < $THREADS; i++)); do
done

# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2

# Print results
for ((i = 0; i < $THREADS; i++)); do
thread=${cpu_array[$((i+F_THREAD))]}
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2

# Print results
for ((i = 0; i < $THREADS; i++)); do
thread=${cpu_array[$((i+F_THREAD))]}
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi

0 comments on commit c8fd485

Please sign in to comment.