forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pktgen: add sample script pktgen_sample02_multiqueue.sh
Add the pktgen samples script pktgen_sample02_multiqueue.sh that demonstrates generating packets on multiqueue NICs. Specifically notice the options "-t" that specifies how many kernel threads to activate. Also notice the flag QUEUE_MAP_CPU, which cause the SKB TX queue to be mapped to the CPU running the kernel thread. For best scalability people are also encourage to map NIC IRQ /proc/irq/*/smp_affinity to CPU number. Usage example with "-t" 4 threads and help: ./pktgen_sample02_multiqueue.sh -i eth4 -m 00:1B:21:3C:9D:F8 -t 4 Usage: ./pktgen_sample02_multiqueue.sh [-vx] -i ethX -i : ($DEV) output interface/device (required) -s : ($PKT_SIZE) packet size -d : ($DEST_IP) destination IP -m : ($DST_MAC) destination MAC-addr -t : ($THREADS) threads to start -c : ($SKB_CLONE) SKB clones send before alloc new SKB -b : ($BURST) HW level bursting of SKBs -v : ($VERBOSE) verbose -x : ($DEBUG) debug Removing pktgen.conf-2-1 and pktgen.conf-2-2 as these examples should be covered now. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
1 parent
6f09479
commit 282fb58
Showing
4 changed files
with
75 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
#!/bin/bash | ||
# | ||
# Multiqueue: Using pktgen threads for sending on multiple CPUs | ||
# * adding devices to kernel threads | ||
# * notice the naming scheme for keeping device names unique | ||
# * nameing scheme: dev@thread_number | ||
# * flow variation via random UDP source port | ||
# | ||
basedir=`dirname $0` | ||
source ${basedir}/functions.sh | ||
root_check_run_with_sudo "$@" | ||
# | ||
# Required param: -i dev in $DEV | ||
source ${basedir}/parameters.sh | ||
|
||
# Base Config | ||
DELAY="0" # Zero means max speed | ||
COUNT="100000" # Zero means indefinitely | ||
[ -z "$CLONE_SKB" ] && CLONE_SKB="0" | ||
|
||
# Flow variation random source port between min and max | ||
UDP_MIN=9 | ||
UDP_MAX=109 | ||
|
||
# (example of setting default params in your script) | ||
[ -z "$DEST_IP" ] && DEST_IP="198.18.0.42" | ||
[ -z "$DST_MAC" ] && DST_MAC="90:e2:ba:ff:ff:ff" | ||
|
||
# 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 | ||
|
||
# Notice config queue to map to cpu (mirrors smp_processor_id()) | ||
# It is beneficial to map IRQ /proc/irq/*/smp_affinity 1:1 to CPU number | ||
pg_set $dev "flag QUEUE_MAP_CPU" | ||
|
||
# Base config of dev | ||
pg_set $dev "count $COUNT" | ||
pg_set $dev "clone_skb $CLONE_SKB" | ||
pg_set $dev "pkt_size $PKT_SIZE" | ||
pg_set $dev "delay $DELAY" | ||
|
||
# Flag example disabling timestamping | ||
pg_set $dev "flag NO_TIMESTAMP" | ||
|
||
# Destination | ||
pg_set $dev "dst_mac $DST_MAC" | ||
pg_set $dev "dst $DEST_IP" | ||
|
||
# Setup random UDP port src range | ||
pg_set $dev "flag UDPSRC_RND" | ||
pg_set $dev "udp_src_min $UDP_MIN" | ||
pg_set $dev "udp_src_max $UDP_MAX" | ||
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 |