193 lines
6.3 KiB
Diff
193 lines
6.3 KiB
Diff
|
From ed5045179836f32b60e5092c123e6f47da27beba Mon Sep 17 00:00:00 2001
|
||
|
From: John Kacur <jkacur@redhat.com>
|
||
|
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 <jkacur@redhat.com>
|
||
|
|
||
|
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
|
||
|
|