sonic-buildimage-msft/dockers/docker-pde/base_image_files/pde-bench-knet

327 строки
9.0 KiB
Bash

#!/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}"