Commit 4af44c23 authored by John Kariuki's avatar John Kariuki Committed by Darek Stojaczyk
Browse files

nvme/perf: add bdevperf



Adding capability to use bdevperf to this script. We
need to use bdevperf to demonstrate performance of up
to 10 million IOPS per core. fio overhead limits that
number to less than 3 million IOPS/core.

Signed-off-by: default avatarJohn Kariuki <John.K.Kariuki@intel.com>
Change-Id: Iad81fc73a961b05e168befbed01bf800b9888564
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/459695


Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarKarol Latecki <karol.latecki@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent ed486dc4
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ BASE_DIR=$(readlink -f $(dirname $0))
ROOT_DIR=$(readlink -f $BASE_DIR/../../..)
PLUGIN_DIR_NVME=$ROOT_DIR/examples/nvme/fio_plugin
PLUGIN_DIR_BDEV=$ROOT_DIR/examples/bdev/fio_plugin
BDEVPERF_DIR=$ROOT_DIR/test/bdev/bdevperf
. $ROOT_DIR/scripts/common.sh || exit 1
. $ROOT_DIR/test/common/autotest_common.sh
NVME_FIO_RESULTS=$BASE_DIR/result.json
@@ -50,7 +51,7 @@ function get_numa_node(){
				echo $(cat /sys/bus/pci/devices/$bdf/numa_node)
			fi
		done
	elif [ "$plugin" = "bdev" ]; then
	elif [ "$plugin" = "bdev" ] || [ "$plugin" = "bdevperf" ]; then
		local bdevs=$(discover_bdevs $ROOT_DIR $BASE_DIR/bdev.conf)
		for name in $disks; do
			local bdev_bdf=$(jq -r ".[] | select(.name==\"$name\").driver_specific.nvme.pci_address" <<< $bdevs)
@@ -72,7 +73,7 @@ function get_disks(){
				echo "$bdf"
			fi
		done
	elif [ "$plugin" = "bdev" ]; then
	elif [ "$plugin" = "bdev" ] || [ "$plugin" = "bdevperf" ]; then
		local bdevs=$(discover_bdevs $ROOT_DIR $BASE_DIR/bdev.conf)
		echo $(jq -r '.[].name' <<< $bdevs)
	else
@@ -239,6 +240,21 @@ function get_results(){
	esac
}

function get_bdevperf_results(){
	case "$1" in
		iops)
		iops=$(grep Total $NVME_FIO_RESULTS | awk -F 'Total' '{print $2}' | awk '{print $2}')
		iops=${iops%.*}
		echo $iops
		;;
		bw_Kibs)
		bw_MBs=$(grep Total $NVME_FIO_RESULTS | awk -F 'Total' '{print $2}' | awk '{print $4}')
		bw_MBs=${bw_MBs%.*}
		echo $(( $bw_MBs * 1024 ))
		;;
	esac
}

function run_spdk_nvme_fio(){
	local plugin=$1
	echo "** Running fio test, this can take a while, depending on the run-time and ramp-time setting."
@@ -259,6 +275,12 @@ function run_nvme_fio(){
	sleep 1
}

function run_bdevperf(){
	echo "** Running bdevperf test, this can take a while, depending on the run-time setting."
	echo $($BDEVPERF_DIR/bdevperf -c $BASE_DIR/bdev.conf -q $IODEPTH -o $BLK_SIZE -w $RW -M $MIX -t $RUNTIME)
	sleep 1
}

function usage()
{
	set +x
@@ -316,7 +338,7 @@ done
trap 'rm -f *.state $BASE_DIR/bdev.conf; print_backtrace' ERR SIGTERM SIGABRT
mkdir -p $BASE_DIR/results
date="$(date +'%m_%d_%Y_%H%M%S')"
if [ $PLUGIN = "bdev" ]; then
if [[ $PLUGIN == "bdev" ]] || [[ $PLUGIN == "bdevperf" ]]; then
	$ROOT_DIR/scripts/gen_nvme.sh >> $BASE_DIR/bdev.conf
fi

+49 −31
Original line number Diff line number Diff line
@@ -88,6 +88,12 @@ do
			qd=$IODEPTH
		fi

		if [ $PLUGIN = "bdevperf" ]; then
			run_bdevperf > $NVME_FIO_RESULTS
			iops_disks[$k]=$((${iops_disks[$k]} + $(get_bdevperf_results iops)))
			bw[$k]=$((${bw[$k]} + $(get_bdevperf_results bw_Kibs)))
			cp $NVME_FIO_RESULTS $BASE_DIR/results/$result_dir/perf_results_${MIX}_${PLUGIN}_${no_cores}cpus_${date}_${k}_disks_${j}.output
		else
			create_fio_config $k $PLUGIN "$disk_names" "$disks_numa" "$cores"
			desc="Running Test: Blocksize=${BLK_SIZE} Workload=$RW MIX=${MIX} qd=${IODEPTH} io_plugin/driver=$PLUGIN"

@@ -116,6 +122,7 @@ do
			cp $NVME_FIO_RESULTS $BASE_DIR/results/$result_dir/perf_results_${MIX}_${PLUGIN}_${no_cores}cpus_${date}_${k}_disks_${j}.json
			cp $BASE_DIR/config.fio $BASE_DIR/results/$result_dir/config_${MIX}_${PLUGIN}_${no_cores}cpus_${date}_${k}_disks_${j}.fio
			rm -f $BASE_DIR/config.fio
		fi

		#if tested on only one number of disk
		if $ONEWORKLOAD; then
@@ -127,12 +134,23 @@ done
for (( k=$DISKNO; k >= 1; k-=2 ))
do
	iops_disks[$k]=$((${iops_disks[$k]} / $REPEAT_NO))

	if [ $PLUGIN != "bdevperf" ]; then
		mean_lat_disks_usec[$k]=$((${mean_lat_disks_usec[$k]} / $REPEAT_NO))
		p99_lat_disks_usec[$k]=$((${p99_lat_disks_usec[$k]} / $REPEAT_NO))
		p99_99_lat_disks_usec[$k]=$((${p99_99_lat_disks_usec[$k]} / $REPEAT_NO))
		stdev_disks_usec[$k]=$((${stdev_disks_usec[$k]} / $REPEAT_NO))
		mean_slat_disks_usec[$k]=$((${mean_slat_disks_usec[$k]} / $REPEAT_NO))
		mean_clat_disks_usec[$k]=$((${mean_clat_disks_usec[$k]} / $REPEAT_NO))
	else
		mean_lat_disks_usec[$k]=0
		p99_lat_disks_usec[$k]=0
		p99_99_lat_disks_usec[$k]=0
		stdev_disks_usec[$k]=0
		mean_slat_disks_usec[$k]=0
		mean_clat_disks_usec[$k]=0
	fi

	bw[$k]=$((${bw[$k]} / $REPEAT_NO))

	printf "%s,%s,%s,%s,%s,%s,%s,%s,%s\n" ${k} ${iops_disks[$k]} ${mean_lat_disks_usec[$k]} ${p99_lat_disks_usec[$k]}\