-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'samples-pktgen-updates'
Jesper Dangaard Brouer says: ==================== Updates for samples/pktgen This patchset updates samples/pktgen and synchronize with changes maintained in https://github.com/netoptimizer/network-testing/ Features wise Robert Hoo <robert.hu@intel.com> added support for detecting and determining dev NUMA node IRQs, and added a new script named pktgen_sample06_numa_awared_queue_irq_affinity.sh that use these features. Cleanup remove last of the old sample files, as IPv6 is covered by existing sample code. ==================== Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Showing
6 changed files
with
141 additions
and
193 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 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
97 changes: 97 additions & 0 deletions
97
samples/pktgen/pktgen_sample06_numa_awared_queue_irq_affinity.sh
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,97 @@ | ||
#!/bin/bash | ||
# | ||
# Multiqueue: Using pktgen threads for sending on multiple CPUs | ||
# * adding devices to kernel threads which are in the same NUMA node | ||
# * bound devices queue's irq affinity to the threads, 1:1 mapping | ||
# * 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 | ||
[ -z "$COUNT" ] && COUNT="20000000" # Zero means indefinitely | ||
[ -z "$CLONE_SKB" ] && CLONE_SKB="0" | ||
|
||
# Flow variation random source port between min and max | ||
UDP_MIN=9 | ||
UDP_MAX=109 | ||
|
||
node=`get_iface_node $DEV` | ||
irq_array=(`get_iface_irqs $DEV`) | ||
cpu_array=(`get_node_cpus $node`) | ||
|
||
[ $THREADS -gt ${#irq_array[*]} -o $THREADS -gt ${#cpu_array[*]} ] && \ | ||
err 1 "Thread number $THREADS exceeds: min (${#irq_array[*]},${#cpu_array[*]})" | ||
|
||
# (example of setting default params in your script) | ||
if [ -z "$DEST_IP" ]; then | ||
[ -z "$IP6" ] && DEST_IP="198.18.0.42" || DEST_IP="FD00::1" | ||
fi | ||
[ -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 ((i = 0; i < $THREADS; i++)); do | ||
# The device name is extended with @name, using thread number to | ||
# make then unique, but any name will do. | ||
# Set the queue's irq affinity to this $thread (processor) | ||
# if '-f' is designated, offset cpu id | ||
thread=${cpu_array[$((i+F_THREAD))]} | ||
dev=${DEV}@${thread} | ||
echo $thread > /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 | ||
pg_thread $thread "rem_device_all" | ||
pg_thread $thread "add_device" $dev | ||
|
||
# select queue and bind the queue and $dev in 1:1 relationship | ||
queue_num=$i | ||
info "queue number is $queue_num" | ||
pg_set $dev "queue_map_min $queue_num" | ||
pg_set $dev "queue_map_max $queue_num" | ||
|
||
# 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$IP6 $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 ((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 |