327 lines
9.0 KiB
Plaintext
327 lines
9.0 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
PLATF_DIR=/usr/share/sonic/platform
|
||
|
HWSKU_DIR=/usr/share/sonic/hwsku
|
||
|
PORT=Ethernet0
|
||
|
LANE=1
|
||
|
SPEED=0
|
||
|
BCMPORT=ce0
|
||
|
DURATION=5
|
||
|
|
||
|
PPS_128=0
|
||
|
BPS_128=0
|
||
|
PPS_256=0
|
||
|
BPS_256=0
|
||
|
PPS_512=0
|
||
|
BPS_512=0
|
||
|
PPS_1024=0
|
||
|
BPS_1024=0
|
||
|
PPS_2048=0
|
||
|
BPS_2048=0
|
||
|
PPS_4096=0
|
||
|
BPS_4096=0
|
||
|
PPS_8192=0
|
||
|
BPS_8192=0
|
||
|
PPS_9000=0
|
||
|
BPS_9000=0
|
||
|
|
||
|
# SWSS is mandatory for KNET benchmark
|
||
|
sudo systemctl start swss
|
||
|
for t in $(seq 1 15)
|
||
|
do
|
||
|
if [ $(docker ps | grep -c swss) -gt 0 ]; then
|
||
|
break
|
||
|
fi
|
||
|
sleep 1
|
||
|
done
|
||
|
if [ $(docker ps | grep -c swss) -eq 0 ]; then
|
||
|
echo "ERR: docker-swss is not alive, existing ..."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Find out the PLATFORM and HWSKU
|
||
|
if [ ! -d ${PLATF_DIR} ]; then
|
||
|
name=$(grep 'onie_platform=' /host/machine.conf | cut -d '=' -f 2)
|
||
|
PLATF_DIR=/usr/share/sonic/device/${name}
|
||
|
fi
|
||
|
|
||
|
if [ ! -d ${HWSKU_DIR} ]; then
|
||
|
name=$(head -1 ${PLATF_DIR}/default_sku | awk '{print $1}')
|
||
|
HWSKU_DIR=${PLATF_DIR}/${name}
|
||
|
fi
|
||
|
|
||
|
echo "PLATFORM='${PLATF_DIR}'"
|
||
|
echo "HWSKU='${HWSKU_DIR}'"
|
||
|
|
||
|
# Determine the target port for KNET benchmark
|
||
|
while IFS= read -r line; do
|
||
|
line=$(echo ${line} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
||
|
if [[ ${line} = \#* ]]; then
|
||
|
continue
|
||
|
fi
|
||
|
port=$(echo ${line} | awk '{print $1}')
|
||
|
lane=$(echo ${line} | awk '{print $2}' | cut -d ',' -f 1)
|
||
|
speed=$(echo ${line} | awk '{print $5}')
|
||
|
if [ -z "${speed}" ]; then
|
||
|
continue
|
||
|
fi
|
||
|
if [ ${speed} -gt ${SPEED} ]; then
|
||
|
PORT=${port}
|
||
|
LANE=${lane}
|
||
|
SPEED=${speed}
|
||
|
fi
|
||
|
done < ${HWSKU_DIR}/port_config.ini
|
||
|
|
||
|
echo "PORT=${PORT}"
|
||
|
echo "LANE=${LANE}"
|
||
|
echo "SPEED=${SPEED}"
|
||
|
|
||
|
# Find out the name of the corresponding bcm port
|
||
|
TEMP=$(mktemp)
|
||
|
bcmcmd 'show pmap' | grep ${LANE} > ${TEMP}
|
||
|
while IFS= read -r line; do
|
||
|
line=$(echo ${line} | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
|
||
|
if [ $(echo ${line} | awk '{print $4}') -eq ${LANE} ]; then
|
||
|
BCMPORT=$(echo ${line} | awk '{print $1}')
|
||
|
break
|
||
|
fi
|
||
|
done < ${TEMP}
|
||
|
rm -f ${TEMP}
|
||
|
|
||
|
echo "BCMPORT=${BCMPORT}"
|
||
|
|
||
|
# SWSS: Update the LLDP rate limit
|
||
|
TEMP=$(mktemp)
|
||
|
rm -f ${TEMP}.*
|
||
|
docker cp swss:/etc/swss/config.d/00-copp.config.json ${TEMP}.old
|
||
|
if [ ! -f ${TEMP}.old ]; then
|
||
|
echo "Unable to get 00-copp.config.json from docker-swss"
|
||
|
fi
|
||
|
|
||
|
lldp=0
|
||
|
while IFS= read -r line
|
||
|
do
|
||
|
if [ $(echo $line | grep -c -E '\"COPP_TABLE:') -gt 0 ]; then
|
||
|
lldp=0
|
||
|
fi
|
||
|
if [ $(echo $line | grep -c -E 'trap_ids.*,lldp') -gt 0 ]; then
|
||
|
lldp=1
|
||
|
fi
|
||
|
if [ $lldp -gt 0 ]; then
|
||
|
if [ $(echo $line | grep -c -E '.*\"cir\"') -gt 0 ]; then
|
||
|
echo "${line%:*}:\"30000\"," >> ${TEMP}.new
|
||
|
lldp=$(expr $lldp + 1)
|
||
|
continue
|
||
|
fi
|
||
|
if [ $(echo $line | grep -c -E '.*\"cbs\"') -gt 0 ]; then
|
||
|
echo "${line%:*}:\"30000\"," >> ${TEMP}.new
|
||
|
lldp=$(expr $lldp + 1)
|
||
|
continue
|
||
|
fi
|
||
|
fi
|
||
|
echo "$line" >> ${TEMP}.new
|
||
|
done < "${TEMP}.old"
|
||
|
|
||
|
csum1=$(md5sum ${TEMP}.old | cut -d ' ' -f 1)
|
||
|
csum2=$(md5sum ${TEMP}.new | cut -d ' ' -f 1)
|
||
|
if [ "${csum1}" != "${csum2}" ]; then
|
||
|
docker cp ${TEMP}.new swss:/etc/swss/config.d/00-copp.config.json
|
||
|
sudo config copp rx-rate 100000
|
||
|
sudo config save -y
|
||
|
sudo config reload -y
|
||
|
fi
|
||
|
|
||
|
# Disable ZTP
|
||
|
sudo config ztp disable -y > /dev/null 2>&1
|
||
|
|
||
|
# Enable the target port for benchmarking
|
||
|
echo "Allow 15 seconds for ${PORT} getting ready"
|
||
|
|
||
|
for tick in $(seq 1 15); do
|
||
|
if [ -d /sys/class/net/${PORT} ]; then
|
||
|
break
|
||
|
fi
|
||
|
sleep 1
|
||
|
done
|
||
|
sudo config interface startup ${PORT} > /dev/null 2>&1
|
||
|
|
||
|
# Enable MAC loopback mode to the target port
|
||
|
bcmcmd "port ${BCMPORT} lb=mac" > /dev/null 2>&1
|
||
|
|
||
|
# Get started with the loopback benchmark test
|
||
|
#
|
||
|
|
||
|
# 128B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 128
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 128
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_128=${PPS}
|
||
|
BPS_128=${BPS}
|
||
|
|
||
|
# 256B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 256
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 256
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_256=${PPS}
|
||
|
BPS_256=${BPS}
|
||
|
|
||
|
# 512B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 512
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 512
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_512=${PPS}
|
||
|
BPS_512=${BPS}
|
||
|
|
||
|
# 1024B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 1024
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 1024
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_1024=${PPS}
|
||
|
BPS_1024=${BPS}
|
||
|
|
||
|
# 2048B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 2048
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 2048
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_2048=${PPS}
|
||
|
BPS_2048=${BPS}
|
||
|
|
||
|
# 4096B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 4096
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 4096
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_4096=${PPS}
|
||
|
BPS_4096=${BPS}
|
||
|
|
||
|
# 8192B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 8192
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 8192
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_8192=${PPS}
|
||
|
BPS_8192=${BPS}
|
||
|
|
||
|
# 9000B
|
||
|
P1=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B1=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
if [ $(docker ps | grep -c pde) -gt 0 ]; then
|
||
|
docker exec -it pde /usr/local/bin/pktsend ${PORT} ${DURATION} 9000
|
||
|
else
|
||
|
/usr/local/bin/pktsend ${PORT} ${DURATION} 9000
|
||
|
fi
|
||
|
P2=$(cat /sys/class/net/${PORT}/statistics/rx_packets)
|
||
|
B2=$(cat /sys/class/net/${PORT}/statistics/rx_bytes)
|
||
|
NUM=$(expr ${P2} - ${P1})
|
||
|
PPS=$(expr ${NUM} / ${DURATION})
|
||
|
NUM=$(expr ${B2} - ${B1})
|
||
|
BPS=$(expr ${NUM} / ${DURATION})
|
||
|
BPS=$(expr ${BPS} / 1000000)
|
||
|
BPS=$(expr ${BPS} \* 8)
|
||
|
echo "PPS=${PPS}, BPS=${BPS}Mbps"
|
||
|
PPS_9000=${PPS}
|
||
|
BPS_9000=${BPS}
|
||
|
|
||
|
# Disable MAC loopback mode to the target port
|
||
|
bcmcmd "port ${BCMPORT} lb=none" > /dev/null 2>&1
|
||
|
|
||
|
# Generate the final report
|
||
|
echo "payload size,loopback pps(Pkt/s),loopback Mbps(Mbit/s)"
|
||
|
echo "128B,${PPS_128},${BPS_128}"
|
||
|
echo "256B,${PPS_256},${BPS_256}"
|
||
|
echo "512B,${PPS_512},${BPS_512}"
|
||
|
echo "1024B,${PPS_1024},${BPS_1024}"
|
||
|
echo "2048B,${PPS_2048},${BPS_2048}"
|
||
|
echo "4096B,${PPS_4096},${BPS_4096}"
|
||
|
echo "8192B,${PPS_8192},${BPS_8192}"
|
||
|
echo "9000B,${PPS_9000},${BPS_9000}"
|