Commit e3f30ab2 authored by David S. Miller's avatar David S. Miller

Merge branch 'pktgen-samples-next'

Juhee Kang says:

====================
samples: pktgen: enhance the ability to print the execution results of samples

This patch series improves the ability to print the execution result of pktgen
samples by adding a line which calls the function before termination and adding
trap SIGINT. Also, this series documents the latest pktgen usage options.

Currently, pktgen samples print the execution result when terminated usually.
However, sample03 is not working properly.

This is results of sample04 and sample03:

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample04_many_flows.sh -n 1
    Running... ctrl^C to stop
    Device: eth0@0
    Result: OK: 19(c5+d13) usec, 1 (60byte,0frags)
    51762pps 24Mb/sec (24845760bps) errors: 0

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample03_burst_single_flow.sh -n 1
    Running... ctrl^C to stop

Because sample03 doesn't call the function which prints the execution result
when terminated normally, unlike other samples. So the first commit solves
this issue by adding a line which calls the function before termination.

Also, all pktgen samples are able to send infinite messages per thread by
setting the count option to 0, and pktgen is stopped by Ctrl-C. However,
the sample besides sample{3...5} don't work appropriately because Ctrl-C stops
the script, not just pktgen.

This is results of samples:

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample04_many_flows.sh -n 0
    Running... ctrl^C to stop
    ^CDevice: eth0@0
    Result: OK: 569657(c569538+d118) usec, 84650 (60byte,0frags)
    148597pps 71Mb/sec (71326560bps) errors: 0

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample01_simple.sh -n 0
    Running... ctrl^C to stop
    ^C

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample02_multiqueue.sh -n 0
    Running... ctrl^C to stop
    ^C

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_sample06_numa_awared_queue_irq_affinity.sh -n 0
    Running... ctrl^C to stop
    ^C

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_bench_xmit_mode_netif_receive.sh -n 0
    Running... ctrl^C to stop
    ^C

    # DEV=eth0 DEST_IP=10.1.0.1 DST_MAC=00:11:22:33:44:55 ./pktgen_bench_xmit_mode_queue_xmit.sh -n 0
    Running... ctrl^C to stop
    ^C

So the second commit solves this issue by adding trap SIGINT. Also, changes
control_c function to print_results to maintain consistency with other samples
on the first commit and second commit.

And current pktgen.rst documentation doesn't add the latest pktgen sample
usage options such as count and IPv6, and so on. Also, the old pktgen
sample scripts are still included in the document. The old scripts were removed
by the commit a4b6ade8 ("samples/pktgen: remove remaining old pktgen
sample scripts").

Thus, the last commit documents the latest pktgen sample usage and removes
old sample scripts. And fixes a minor typo.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 9270c565 246b184f
...@@ -248,26 +248,24 @@ Usage::: ...@@ -248,26 +248,24 @@ Usage:::
-i : ($DEV) output interface/device (required) -i : ($DEV) output interface/device (required)
-s : ($PKT_SIZE) packet size -s : ($PKT_SIZE) packet size
-d : ($DEST_IP) destination IP -d : ($DEST_IP) destination IP. CIDR (e.g. 198.18.0.0/15) is also allowed
-m : ($DST_MAC) destination MAC-addr -m : ($DST_MAC) destination MAC-addr
-p : ($DST_PORT) destination PORT range (e.g. 433-444) is also allowed
-t : ($THREADS) threads to start -t : ($THREADS) threads to start
-f : ($F_THREAD) index of first thread (zero indexed CPU number)
-c : ($SKB_CLONE) SKB clones send before alloc new SKB -c : ($SKB_CLONE) SKB clones send before alloc new SKB
-n : ($COUNT) num messages to send per thread, 0 means indefinitely
-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)
-a : ($APPEND) Script will not reset generator's state, but will append its config
The global variables being set are also listed. E.g. the required The global variables being set are also listed. E.g. the required
interface/device parameter "-i" sets variable $DEV. Copy the interface/device parameter "-i" sets variable $DEV. Copy the
pktgen_sampleXX scripts and modify them to fit your own needs. pktgen_sampleXX scripts and modify them to fit your own needs.
The old scripts::
pktgen.conf-1-2 # 1 CPU 2 dev
pktgen.conf-1-1-rdos # 1 CPU 1 dev w. route DoS
pktgen.conf-1-1-ip6 # 1 CPU 1 dev ipv6
pktgen.conf-1-1-ip6-rdos # 1 CPU 1 dev ipv6 w. route DoS
pktgen.conf-1-1-flows # 1 CPU 1 dev multiple flows.
Interrupt affinity Interrupt affinity
=================== ===================
...@@ -398,7 +396,7 @@ Current commands and configuration options ...@@ -398,7 +396,7 @@ Current commands and configuration options
References: References:
- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/ - ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/
- tp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/ - ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/
Paper from Linux-Kongress in Erlangen 2004. Paper from Linux-Kongress in Erlangen 2004.
- ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/pktgen_paper.pdf - ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/pktgen_paper.pdf
......
...@@ -89,14 +89,21 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do ...@@ -89,14 +89,21 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
pg_set $dev "burst $BURST" pg_set $dev "burst $BURST"
done done
# Run if user hits control-c
function print_result() {
# 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
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT
# start_run # start_run
echo "Running... ctrl^C to stop" >&2 echo "Running... ctrl^C to stop" >&2
pg_ctrl "start" pg_ctrl "start"
echo "Done" >&2 echo "Done" >&2
# Print results print_result
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
...@@ -69,14 +69,21 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do ...@@ -69,14 +69,21 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
pg_set $dev "xmit_mode queue_xmit" pg_set $dev "xmit_mode queue_xmit"
done done
# Run if user hits control-c
function print_result {
# 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
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT
# start_run # start_run
echo "Running... ctrl^C to stop" >&2 echo "Running... ctrl^C to stop" >&2
pg_ctrl "start" pg_ctrl "start"
echo "Done" >&2 echo "Done" >&2
# Print results print_result
for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
dev=${DEV}@${thread}
echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done
...@@ -79,15 +79,22 @@ pg_set $DEV "flag UDPSRC_RND" ...@@ -79,15 +79,22 @@ 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"
# Run if user hits control-c
function print_result() {
# Print results
echo "Result device: $DEV"
cat /proc/net/pktgen/$DEV
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT
if [ -z "$APPEND" ]; then if [ -z "$APPEND" ]; then
# start_run # start_run
echo "Running... ctrl^C to stop" >&2 echo "Running... ctrl^C to stop" >&2
pg_ctrl "start" pg_ctrl "start"
echo "Done" >&2 echo "Done" >&2
# Print results print_result
echo "Result device: $DEV"
cat /proc/net/pktgen/$DEV
else else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run" echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi fi
\ No newline at end of file
...@@ -83,18 +83,25 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do ...@@ -83,18 +83,25 @@ 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
if [ -z "$APPEND" ]; then # Run if user hits control-c
# start_run function print_result() {
echo "Running... ctrl^C to stop" >&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
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT
if [ -z "$APPEND" ]; then
# start_run
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2
print_result
else else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run" echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi fi
...@@ -85,7 +85,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do ...@@ -85,7 +85,7 @@ for ((thread = $F_THREAD; thread <= $L_THREAD; thread++)); do
done done
# Run if user hits control-c # Run if user hits control-c
function control_c() { function print_result() {
# 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}
...@@ -94,11 +94,13 @@ function control_c() { ...@@ -94,11 +94,13 @@ function control_c() {
done done
} }
# trap keyboard interrupt (Ctrl-C) # trap keyboard interrupt (Ctrl-C)
trap control_c SIGINT trap true SIGINT
if [ -z "$APPEND" ]; then if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2 echo "Running... ctrl^C to stop" >&2
pg_ctrl "start" pg_ctrl "start"
print_result
else else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run" echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi fi
...@@ -100,12 +100,8 @@ for ((i = 0; i < $THREADS; i++)); do ...@@ -100,12 +100,8 @@ for ((i = 0; i < $THREADS; i++)); do
pg_set $dev "udp_src_max $UDP_SRC_MAX" pg_set $dev "udp_src_max $UDP_SRC_MAX"
done done
# start_run # Run if user hits control-c
if [ -z "$APPEND" ]; then function print_result() {
echo "Running... ctrl^C to stop" >&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))]}
...@@ -113,6 +109,17 @@ if [ -z "$APPEND" ]; then ...@@ -113,6 +109,17 @@ if [ -z "$APPEND" ]; then
echo "Device: $dev" echo "Device: $dev"
cat /proc/net/pktgen/$dev | grep -A2 "Result:" cat /proc/net/pktgen/$dev | grep -A2 "Result:"
done done
}
# trap keyboard interrupt (Ctrl-C)
trap true SIGINT
# start_run
if [ -z "$APPEND" ]; then
echo "Running... ctrl^C to stop" >&2
pg_ctrl "start"
echo "Done" >&2
print_result
else else
echo "Append mode: config done. Do more or use 'pg_ctrl start' to run" echo "Append mode: config done. Do more or use 'pg_ctrl start' to run"
fi fi
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment