sonic-buildimage/dockers/docker-pde/bench.sh
賓少鈺 aa59bfeab7
[PDE]: introduce the SONiC Platform Development Env (#7510)
The PDE silicon test harness and platform test harness can be found in
src/sonic-platform-pdk-pde
2021-07-24 16:24:43 -07:00

141 lines
3.8 KiB
Bash

#!/bin/bash
CSV=/tmp/bench.csv
TST_FREQ=2000
TST_CORE=4
TST_RAMSZ=8
TST_DISKSZ=14
TST_SHA=10
TST_BZ2=30
TST_AES=5
TST_DISKRD=180
TST_DISKWR=30
cpu_benchmark()
{
export TIMEFORMAT='%1R'
(time dd if=/dev/zero bs=1M count=500 2> /dev/null | \
"$@" > /dev/null ) 2>&1
}
# Platform Info
PLATFORM=$(grep 'onie_platform=' /host/machine.conf | cut -d '=' -f 2)
echo "Platform: ${PLATFORM}"
if [ -d /usr/share/sonic/platform ]; then
HWSKU=$(head -1 /usr/share/sonic/platform/default_sku | awk '{print $1}')
else
HWSKU=$(head -1 /usr/share/sonic/device/${PLATFORM}/default_sku | awk '{print $1}')
fi
echo "HWSKU: ${HWSKU}"
REVISION=$(syseeprom.py 0x27)
echo "Revision: ${REVISION}"
# Basic Info
CPU_NAME=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | cut -d '@' -f 1 | sed 's/^[ \t]*//;s/[ \t]*$//')
echo "CPU NAME: ${CPU_NAME}"
if [ $(lscpu | grep -c 'CPU max MHz') -gt 0 ]; then
CPU_FREQ=$(lscpu | grep 'CPU max MHz' | cut -d ':' -f 2 | cut -d '.' -f 1 | sed 's/^[[:space:]]*//')
else
CPU_FREQ=$(lscpu | grep 'CPU MHz' | cut -d ':' -f 2 | cut -d '.' -f 1 | sed 's/^[[:space:]]*//')
fi
echo -n "CPU FREQ: ${CPU_FREQ} MHz ........"
if [ ${CPU_FREQ} -ge ${TST_FREQ} ]; then
echo "pass"
else
echo "FAIL"
fi
CPU_CORE=$(awk -F: '/model name/ {core++} END {print core}' /proc/cpuinfo)
echo -n "CPU CORE: ${CPU_CORE} ..............."
if [ ${CPU_CORE} -ge ${TST_CORE} ]; then
echo "pass"
else
echo "FAIL"
fi
RAM_SIZE=$(grep MemTotal /proc/meminfo | awk '{print $2}')
RAM_SIZE=$(expr ${RAM_SIZE} / 1024) # MB
RAM_SIZE=$(expr ${RAM_SIZE} + 1023)
RAM_SIZE=$(expr ${RAM_SIZE} / 1024) # GB
echo -n "RAM SIZE: ${RAM_SIZE} GB ..........."
if [ ${RAM_SIZE} -ge ${TST_RAMSZ} ]; then
echo "pass"
else
echo "FAIL"
fi
DISK_SIZE=$(lsblk -d | grep disk | head -1 | awk '{print $4}' | cut -d 'G' -f 1)
echo -n "DISK: ${DISK_SIZE} GB ..........."
if [ $(expr ${DISK_SIZE} \>= ${TST_DISKSZ}) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
# CPU tests
SHA_TIME=$(cpu_benchmark sha256sum)
echo -n "SHA256: ${SHA_TIME} sec ........."
if [ $(echo "${SHA_TIME} <= ${TST_SHA}" | bc) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
BZ2_TIME=$(cpu_benchmark bzip2)
echo -n "BZIP2: ${BZ2_TIME} sec ........."
if [ $(echo "${BZ2_TIME} <= ${TST_BZ2}" | bc) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
AES_TIME=$(cpu_benchmark openssl enc -e -aes-256-cbc -pass pass:12345678 | sed '/^\*\*\* WARNING : deprecated key derivation used\.$/d;/^Using -iter or -pbkdf2 would be better\.$/d')
echo -n "AES256: ${AES_TIME} sec ........."
if [ $(echo "${AES_TIME} <= ${TST_AES}" | bc) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
# Disk tests
DISK_RD=$(ioping -DRL -w 5 ./ | tail -n 2 | head -n 1 | cut -d ',' -f 4 | awk '{print $1}')
echo -n "DISK READ: ${DISK_RD} MB/s ......"
if [ $(echo "${DISK_RD} >= ${TST_DISKRD}" | bc) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
rm -f dummy.bin
DISK_WR=$(dd if=/dev/zero of=dummy.bin bs=64k count=16k conv=fdatasync 2>&1 | tail -1 | awk '{print $10}')
rm -f dummy.bin
echo -n "DISK WRITE: ${DISK_WR} MB/s ......."
if [ $(echo "${DISK_WR} >= ${TST_DISKWR}" | bc) -eq 1 ]; then
echo "pass"
else
echo "FAIL"
fi
# Report
rm -f ${CSV}
echo "Platform,HwSKU,Revision,Processor,CPU cores,Frequency(MHz),RAM(G),Disk(G),SHA256(s),bzip2(s),AES(s),sequential read(MiB/s),sequential write(MiB/s)," >> ${CSV}
echo -n "${PLATFORM}," >> ${CSV}
echo -n "${HWSKU}," >> ${CSV}
echo -n "${REVISION}," >> ${CSV}
echo -n "${CPU_NAME}," >> ${CSV}
echo -n "${CPU_CORE}," >> ${CSV}
echo -n "${CPU_FREQ}," >> ${CSV}
echo -n "${RAM_SIZE}," >> ${CSV}
echo -n "${DISK_SIZE}," >> ${CSV}
echo -n "${SHA_TIME}," >> ${CSV}
echo -n "${BZ2_TIME}," >> ${CSV}
echo -n "${AES_TIME}," >> ${CSV}
echo -n "${DISK_RD}," >> ${CSV}
echo -n "${DISK_WR}," >> ${CSV}
echo "" >> ${CSV}