83 lines
1.9 KiB
Bash
83 lines
1.9 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
#set -x
|
||
|
|
||
|
|
||
|
function pgset()
|
||
|
{
|
||
|
local result
|
||
|
|
||
|
echo $1 > ${PGDEV}
|
||
|
|
||
|
result=$(cat $PGDEV | fgrep "Result: OK:")
|
||
|
if [ "$result" = "" ]; then
|
||
|
cat $PGDEV | fgrep "Result:"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
##################### Script configuration ######################
|
||
|
N="$1" # number of TX kthreads minus one
|
||
|
if [ -z "$1" ]; then
|
||
|
N=0
|
||
|
fi
|
||
|
NCPUS="7" # number of CPUs on your machine minus one
|
||
|
IF="enp1s0f1" # network interface to test
|
||
|
DST_IP="10.216.8.1" # destination IP address
|
||
|
DST_MAC="00:1b:21:80:e7:d9" # destination MAC address
|
||
|
PKT_SIZE="60" # packet size
|
||
|
PKT_COUNT="10000000" # number of packets to send
|
||
|
CLONE_SKB="10000" # how many times a sk_buff is recycled
|
||
|
|
||
|
|
||
|
# Load pktgen kernel module
|
||
|
modprobe pktgen
|
||
|
|
||
|
|
||
|
# Clean the configuration for all the CPU-kthread (from 0 to ${NCPUS})
|
||
|
IDX=$(seq 0 1 ${NCPUS})
|
||
|
for cpu in ${IDX}; do
|
||
|
PGDEV="/proc/net/pktgen/kpktgend_${cpu}"
|
||
|
echo "Removing all devices (${cpu})"
|
||
|
pgset "rem_device_all"
|
||
|
done
|
||
|
|
||
|
IDX=$(seq 0 1 ${N})
|
||
|
for cpu in ${IDX}; do
|
||
|
# kthread-device configuration
|
||
|
PGDEV="/proc/net/pktgen/kpktgend_${cpu}"
|
||
|
echo "Configuring $PGDEV"
|
||
|
echo "Adding ${IF}@${cpu}"
|
||
|
pgset "add_device ${IF}@${cpu}"
|
||
|
|
||
|
# Packets/mode configuration
|
||
|
PGDEV="/proc/net/pktgen/${IF}@${cpu}"
|
||
|
echo "Configuring $PGDEV"
|
||
|
pgset "count ${PKT_COUNT}"
|
||
|
pgset "clone_skb ${CLONE_SKB}"
|
||
|
pgset "pkt_size ${PKT_SIZE}"
|
||
|
pgset "delay 0"
|
||
|
pgset "dst $DST_IP"
|
||
|
pgset "dst_mac $DST_MAC"
|
||
|
pgset "flag QUEUE_MAP_CPU"
|
||
|
|
||
|
echo ""
|
||
|
done
|
||
|
|
||
|
|
||
|
# Run
|
||
|
PGDEV="/proc/net/pktgen/pgctrl"
|
||
|
echo "Running... Ctrl-C to stop"
|
||
|
pgset "start"
|
||
|
echo "Done."
|
||
|
|
||
|
# Show results
|
||
|
NUMS=""
|
||
|
for cpu in ${IDX}; do
|
||
|
TMP=$(cat /proc/net/pktgen/${IF}@${cpu} | grep -o "[0-9]\+pps" | grep -o "[0-9]\+")
|
||
|
echo "$cpu $TMP"
|
||
|
NUMS="${NUMS} ${TMP}"
|
||
|
done
|
||
|
|
||
|
echo "Total TX rate: $(echo $NUMS | tr ' ' '+' | bc)"
|