From ed5045179836f32b60e5092c123e6f47da27beba Mon Sep 17 00:00:00 2001 From: John Kacur Date: Wed, 9 Dec 2020 12:11:44 -0500 Subject: [PATCH 1/3] rt-tests: determine_maximum_mpps.sh: Add a menu to get user settings. Incorporate the functionality of the get_cpuinfo_mhz.sh script into determine_maximum_mpps.sh so that get_cpuinfo_mhz.sh can be removed. Currently determine_maximum_mpps.sh (part of queuelat) asks the user to edit the PREAMBLE in the script to set the environment. Get rid of this by creating a menu that allows the user the set these variables from a menu when running the script. Here is the output from running the script with the -h option ./src/queuelat/determine_maximum_mpps.sh -h Usage: determine_maximum_mpps.sh [OPTIONS] -c cpulist List of processors to run on. The default is processor 0 Numbers are separated by commas and may include ranges. Eg. 0,3,7-11 -m maxlat maximum latency in nanoseconds. The default is 20000 if the maximum is exceeded, that run of queuelat quits -n cycles Estimated number of cycles it takes to process one packet The default is 300 -f Set the scheduling policy to SCHED_FIFO. This is the default if not specified -r Set the scheduling policy to SCHED_RR. -p priority default priority = 1. Valid numbers are from 1 to 99 -h help print this help message and exit Signed-off-by: John Kacur diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh index f785147f1bbd..fdede472728c 100755 --- a/src/queuelat/determine_maximum_mpps.sh +++ b/src/queuelat/determine_maximum_mpps.sh @@ -6,12 +6,84 @@ # A script to determine the maximum mpps. Logic: # Increase mpps in 0.5 units # -# NOTE: please set "PREAMBLE" to the command line you use for -# -PREAMBLE="taskset -c 2 chrt -f 1" MAXLAT="20000" CYCLES_PER_PACKET="300" OUTFILE=/usr/tmp/outfile +PRIO=1 +CPULIST=0 +SCHED="" + +usage() +{ + echo "Usage:" + echo "$(basename $0) [OPTIONS]" + echo + echo "-c cpulist" + echo " List of processors to run on. The default is processor 0" + echo " Numbers are separated by commas and may include ranges. Eg. 0,3,7-11" + echo "-m maxlat" + echo " maximum latency in nanoseconds. The default is 20000" + echo " if the maximum is exceeded, that run of queuelat quits" + echo "-n cycles" + echo " Estimated number of cycles it takes to process one packet" + echo " The default is 300" + echo "-f" + echo " Set the scheduling policy to SCHED_FIFO." + echo " This is the default if not specified" + echo "-r" + echo " Set the scheduling policy to SCHED_RR". + echo "-p priority" + echo " default priority = 1. Valid numbers are from 1 to 99" + echo "-h" + echo " help" + echo " print this help message and exit" + exit +} + +get_cpuinfo_mhz() +{ + grep "cpu MHz" /proc/cpuinfo | cut -f 3 -d " " | sort -rn | head -n1 +} + +# Check that the scheduling policy hasn't already been set +# Exit with an error message if it has +check_sched() +{ + if [ "${SCHED}" != "" ]; then + echo "Specify -f or -r, but not both" + usage + fi +} + +# Process command line options +while getopts ":c:frp:m:n:h" opt; do + case ${opt} in + c ) CPULIST="${OPTARG}" ;; + m ) MAXLAT="${OPTARG}" ;; + n ) CYCLES_PER_PACKET="${OPTARG}" ;; + f ) check_sched; SCHED="-f" ;; + r ) check_sched; SCHED="-r" ;; + p ) PRIO="${OPTARG}" ;; + h ) usage ;; + * ) echo "no such option"; usage ;; + esac +done + +shift $((OPTIND -1 )) + +# If the user hasn't specified a scheduling policy +# then set it to the default SCHED_FIFO +if [ "${SCHED}" == "" ]; then + SCHED="-f" +fi + +# Error checking that the user entered a priority between 1 and 99 +if [[ "${PRIO}" -lt "1" ]] || [[ "${PRIO}" -gt "99" ]]; then + echo "PRIO must be a number between 1 and 99" + usage +fi + +PREAMBLE="taskset -c ${CPULIST} chrt ${SCHED} ${PRIO}" echo "Determining maximum mpps the machine can handle" echo "Will take a few minutes to determine mpps value" @@ -21,7 +93,7 @@ for mpps in $(seq 3 3 50); do echo testing "$mpps" Mpps OUTFILE=$(mktemp) - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ ! -z "$exceeded" ]; then @@ -37,7 +109,7 @@ for mpps in $(seq $first_mpps -1 3); do echo testing "$mpps" Mpps OUTFILE=$(mktemp) - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ -z "$exceeded" ]; then @@ -54,7 +126,7 @@ for mpps in $(seq "$second_mpps" 0.3 $first_mpps); do echo testing "$mpps" Mpps OUTFILE=$(mktemp) - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ ! -z "$exceeded" ]; then @@ -71,7 +143,7 @@ for mpps in $(seq "$third_mpps" -0.1 3); do echo testing "$mpps" Mpps OUTFILE=$(mktemp) - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ -z "$exceeded" ]; then @@ -90,7 +162,7 @@ while [ $queuelat_failure == 1 ]; do echo "$mpps Mpps" for i in $(seq 1 10); do - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 30 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ ! -z "$exceeded" ]; then @@ -113,7 +185,7 @@ while [ $queuelat_failure == 1 ]; do echo -n "Starting 10 minutes run with " echo "$mpps Mpps" - $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 600 > "$OUTFILE" + $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz)" -p "$mpps" -t 600 > "$OUTFILE" exceeded=$(grep exceeded "$OUTFILE") if [ ! -z "$exceeded" ]; then -- 2.26.2