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
 | |
| 
 |