mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 09:13:38 +00:00
samples: pktgen: new append mode
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>
This commit is contained in:
parent
ef700f2ea2
commit
c8fd485202
@ -28,11 +28,28 @@ across the sample scripts. Usage example is printed on errors::
|
|||||||
-b : ($BURST) HW level bursting of SKBs
|
-b : ($BURST) HW level bursting of SKBs
|
||||||
-v : ($VERBOSE) verbose
|
-v : ($VERBOSE) verbose
|
||||||
-x : ($DEBUG) debug
|
-x : ($DEBUG) debug
|
||||||
|
-6 : ($IP6) IPv6
|
||||||
-w : ($DELAY) Tx Delay value (ns)
|
-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
|
The global variable being set is also listed. E.g. the required
|
||||||
interface/device parameter "-i" sets variable $DEV.
|
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
|
Common functions
|
||||||
----------------
|
----------------
|
||||||
The functions.sh file provides; Three different shell functions for
|
The functions.sh file provides; Three different shell functions for
|
||||||
|
@ -108,7 +108,12 @@ function pgset() {
|
|||||||
fi
|
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 --
|
## -- General shell tricks --
|
||||||
|
|
||||||
|
@ -20,12 +20,13 @@ function usage() {
|
|||||||
echo " -x : (\$DEBUG) debug"
|
echo " -x : (\$DEBUG) debug"
|
||||||
echo " -6 : (\$IP6) IPv6"
|
echo " -6 : (\$IP6) IPv6"
|
||||||
echo " -w : (\$DELAY) Tx Delay value (ns)"
|
echo " -w : (\$DELAY) Tx Delay value (ns)"
|
||||||
|
echo " -a : (\$APPEND) Script will not reset generator's state, but will append its config"
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
## --- Parse command line arguments / parameters ---
|
## --- Parse command line arguments / parameters ---
|
||||||
## echo "Commandline options:"
|
## 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
|
case $option in
|
||||||
i) # interface
|
i) # interface
|
||||||
export DEV=$OPTARG
|
export DEV=$OPTARG
|
||||||
@ -83,6 +84,10 @@ while getopts "s:i:d:m:p:f:t:c:n:b:w:vxh6" option; do
|
|||||||
export IP6=6
|
export IP6=6
|
||||||
info "IP6: IP6=$IP6"
|
info "IP6: IP6=$IP6"
|
||||||
;;
|
;;
|
||||||
|
a)
|
||||||
|
export APPEND=yes
|
||||||
|
info "Append mode: APPEND=$APPEND"
|
||||||
|
;;
|
||||||
h|?|*)
|
h|?|*)
|
||||||
usage;
|
usage;
|
||||||
err 2 "[ERROR] Unknown parameters!!!"
|
err 2 "[ERROR] Unknown parameters!!!"
|
||||||
|
@ -37,11 +37,11 @@ UDP_SRC_MAX=109
|
|||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
# (especially important if other threads were configured by other scripts)
|
# (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
|
# Add remove all other devices and add_device $DEV to thread 0
|
||||||
thread=0
|
thread=0
|
||||||
pg_thread $thread "rem_device_all"
|
[ -z "$APPEND" ] && pg_thread $thread "rem_device_all"
|
||||||
pg_thread $thread "add_device" $DEV
|
pg_thread $thread "add_device" $DEV
|
||||||
|
|
||||||
# How many packets to send (zero means indefinitely)
|
# How many packets to send (zero means indefinitely)
|
||||||
@ -77,11 +77,15 @@ pg_set $DEV "flag UDPSRC_RND"
|
|||||||
pg_set $DEV "udp_src_min $UDP_SRC_MIN"
|
pg_set $DEV "udp_src_min $UDP_SRC_MIN"
|
||||||
pg_set $DEV "udp_src_max $UDP_SRC_MAX"
|
pg_set $DEV "udp_src_max $UDP_SRC_MAX"
|
||||||
|
|
||||||
# start_run
|
if [ -z "$APPEND" ]; then
|
||||||
echo "Running... ctrl^C to stop" >&2
|
# start_run
|
||||||
pg_ctrl "start"
|
echo "Running... ctrl^C to stop" >&2
|
||||||
echo "Done" >&2
|
pg_ctrl "start"
|
||||||
|
echo "Done" >&2
|
||||||
|
|
||||||
# Print results
|
# Print results
|
||||||
echo "Result device: $DEV"
|
echo "Result device: $DEV"
|
||||||
cat /proc/net/pktgen/$DEV
|
cat /proc/net/pktgen/$DEV
|
||||||
|
else
|
||||||
|
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
|
||||||
|
fi
|
@ -38,7 +38,7 @@ if [ -n "$DST_PORT" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
pg_ctrl "reset"
|
[ -z "$APPEND" ] && pg_ctrl "reset"
|
||||||
|
|
||||||
# Threads are specified with parameter -t value in $THREADS
|
# Threads are specified with parameter -t value in $THREADS
|
||||||
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
||||||
@ -47,7 +47,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
|||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
|
|
||||||
# Add remove all other devices and add_device $dev to 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
|
pg_thread $thread "add_device" $dev
|
||||||
|
|
||||||
# Notice config queue to map to cpu (mirrors smp_processor_id())
|
# Notice config queue to map to cpu (mirrors smp_processor_id())
|
||||||
@ -81,14 +81,18 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
|||||||
pg_set $dev "udp_src_max $UDP_SRC_MAX"
|
pg_set $dev "udp_src_max $UDP_SRC_MAX"
|
||||||
done
|
done
|
||||||
|
|
||||||
# start_run
|
if [ -z "$APPEND" ]; then
|
||||||
echo "Running... ctrl^C to stop" >&2
|
# start_run
|
||||||
pg_ctrl "start"
|
echo "Running... ctrl^C to stop" >&2
|
||||||
echo "Done" >&2
|
pg_ctrl "start"
|
||||||
|
echo "Done" >&2
|
||||||
|
|
||||||
# Print results
|
# Print results
|
||||||
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
echo "Device: $dev"
|
echo "Device: $dev"
|
||||||
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
|
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
|
||||||
|
fi
|
||||||
|
@ -43,14 +43,14 @@ if [ -n "$DST_PORT" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
pg_ctrl "reset"
|
[ -z "$APPEND" ] && pg_ctrl "reset"
|
||||||
|
|
||||||
# Threads are specified with parameter -t value in $THREADS
|
# Threads are specified with parameter -t value in $THREADS
|
||||||
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
|
|
||||||
# Add remove all other devices and add_device $dev to 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
|
pg_thread $thread "add_device" $dev
|
||||||
|
|
||||||
# Base config
|
# Base config
|
||||||
@ -94,5 +94,9 @@ function control_c() {
|
|||||||
# trap keyboard interrupt (Ctrl-C)
|
# trap keyboard interrupt (Ctrl-C)
|
||||||
trap control_c SIGINT
|
trap control_c SIGINT
|
||||||
|
|
||||||
echo "Running... ctrl^C to stop" >&2
|
if [ -z "$APPEND" ]; then
|
||||||
pg_ctrl "start"
|
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
|
||||||
|
@ -42,14 +42,14 @@ fi
|
|||||||
read -r SRC_MIN SRC_MAX <<< $(parse_addr 198.18.0.0/15)
|
read -r SRC_MIN SRC_MAX <<< $(parse_addr 198.18.0.0/15)
|
||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
pg_ctrl "reset"
|
[ -z "$APPEND" ] && pg_ctrl "reset"
|
||||||
|
|
||||||
# Threads are specified with parameter -t value in $THREADS
|
# Threads are specified with parameter -t value in $THREADS
|
||||||
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
|
|
||||||
# Add remove all other devices and add_device $dev to 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
|
pg_thread $thread "add_device" $dev
|
||||||
|
|
||||||
# Base config
|
# Base config
|
||||||
@ -104,7 +104,11 @@ function print_result() {
|
|||||||
# trap keyboard interrupt (Ctrl-C)
|
# trap keyboard interrupt (Ctrl-C)
|
||||||
trap true SIGINT
|
trap true SIGINT
|
||||||
|
|
||||||
echo "Running... ctrl^C to stop" >&2
|
if [ -z "$APPEND" ]; then
|
||||||
pg_ctrl "start"
|
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
|
||||||
|
@ -32,14 +32,14 @@ if [ -n "$DST_PORT" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
pg_ctrl "reset"
|
[ -z "$APPEND" ] && pg_ctrl "reset"
|
||||||
|
|
||||||
# Threads are specified with parameter -t value in $THREADS
|
# Threads are specified with parameter -t value in $THREADS
|
||||||
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
|
||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
|
|
||||||
# Add remove all other devices and add_device $dev to 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
|
pg_thread $thread "add_device" $dev
|
||||||
|
|
||||||
# Base config
|
# Base config
|
||||||
@ -88,7 +88,11 @@ function print_result() {
|
|||||||
# trap keyboard interrupt (Ctrl-C)
|
# trap keyboard interrupt (Ctrl-C)
|
||||||
trap true SIGINT
|
trap true SIGINT
|
||||||
|
|
||||||
echo "Running... ctrl^C to stop" >&2
|
if [ -z "$APPEND" ]; then
|
||||||
pg_ctrl "start"
|
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
|
||||||
|
@ -44,7 +44,7 @@ if [ -n "$DST_PORT" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# General cleanup everything since last run
|
# General cleanup everything since last run
|
||||||
pg_ctrl "reset"
|
[ -z "$APPEND" ] && pg_ctrl "reset"
|
||||||
|
|
||||||
# Threads are specified with parameter -t value in $THREADS
|
# Threads are specified with parameter -t value in $THREADS
|
||||||
for ((i = 0; i < $THREADS; i++)); do
|
for ((i = 0; i < $THREADS; i++)); do
|
||||||
@ -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`"
|
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
|
# 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
|
pg_thread $thread "add_device" $dev
|
||||||
|
|
||||||
# select queue and bind the queue and $dev in 1:1 relationship
|
# select queue and bind the queue and $dev in 1:1 relationship
|
||||||
@ -99,14 +99,18 @@ for ((i = 0; i < $THREADS; i++)); do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# start_run
|
# start_run
|
||||||
echo "Running... ctrl^C to stop" >&2
|
if [ -z "$APPEND" ]; then
|
||||||
pg_ctrl "start"
|
echo "Running... ctrl^C to stop" >&2
|
||||||
echo "Done" >&2
|
pg_ctrl "start"
|
||||||
|
echo "Done" >&2
|
||||||
|
|
||||||
# Print results
|
# Print results
|
||||||
for ((i = 0; i < $THREADS; i++)); do
|
for ((i = 0; i < $THREADS; i++)); do
|
||||||
thread=${cpu_array[$((i+F_THREAD))]}
|
thread=${cpu_array[$((i+F_THREAD))]}
|
||||||
dev=${DEV}@${thread}
|
dev=${DEV}@${thread}
|
||||||
echo "Device: $dev"
|
echo "Device: $dev"
|
||||||
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
|
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
|
||||||
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user