test/nvme_perf: use float arithmetics
Using only Bash for calculation in this script results in operating only on integers, which lead to wrong results being saved after test run. For example - submission latency of 0.175usec was saved as 0usec. Change-Id: I6f9924d12189631ab6d0bdc5385e642b6c2aa34f Signed-off-by: Karol Latecki <karol.latecki@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4013 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Michal Berger <michalx.berger@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
195fb4e40e
commit
20df041193
@ -319,57 +319,52 @@ function preconditioning() {
|
||||
rm -f $testdir/config.fio
|
||||
}
|
||||
|
||||
function bc() {
|
||||
$(type -P bc) -l <<< "scale=3; $1"
|
||||
}
|
||||
|
||||
function get_results() {
|
||||
local reads_pct
|
||||
local writes_pct
|
||||
|
||||
reads_pct=$(bc -l <<< "scale=3; $2/100")
|
||||
writes_pct=$(bc -l <<< "scale=3; 1-$reads_pct")
|
||||
reads_pct=$(bc "$2 / 100")
|
||||
writes_pct=$(bc "1 - $reads_pct")
|
||||
case "$1" in
|
||||
iops)
|
||||
iops=$(jq -r '.jobs[] | .read.iops + .write.iops' $TMP_RESULT_FILE)
|
||||
iops=${iops%.*}
|
||||
echo $iops
|
||||
;;
|
||||
mean_lat_usec)
|
||||
mean_lat=$(jq -r ".jobs[] | (.read.lat_ns.mean * $reads_pct + .write.lat_ns.mean * $writes_pct)" $TMP_RESULT_FILE)
|
||||
mean_lat=${mean_lat%.*}
|
||||
echo $((mean_lat / 1000))
|
||||
mean_lat=$(jq -r ".jobs[] | (.read.lat_ns.mean * $reads_pct + .write.lat_ns.mean * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $mean_lat
|
||||
;;
|
||||
p90_lat_usec)
|
||||
p90_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"90.000000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"90.000000\" // 0 * $writes_pct)" $TMP_RESULT_FILE)
|
||||
p90_lat=${p90_lat%.*}
|
||||
echo $((p90_lat / 1000))
|
||||
p90_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"90.000000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"90.000000\" // 0 * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $p90_lat
|
||||
;;
|
||||
p99_lat_usec)
|
||||
p99_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"99.000000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"99.000000\" // 0 * $writes_pct)" $TMP_RESULT_FILE)
|
||||
p99_lat=${p99_lat%.*}
|
||||
echo $((p99_lat / 1000))
|
||||
p99_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"99.000000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"99.000000\" // 0 * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $p99_lat
|
||||
;;
|
||||
p99_99_lat_usec)
|
||||
p99_99_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"99.990000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"99.990000\" // 0 * $writes_pct)" $TMP_RESULT_FILE)
|
||||
p99_99_lat=${p99_99_lat%.*}
|
||||
echo $((p99_99_lat / 1000))
|
||||
p99_99_lat=$(jq -r ".jobs[] | (.read.clat_ns.percentile.\"99.990000\" // 0 * $reads_pct + .write.clat_ns.percentile.\"99.990000\" // 0 * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $p99_99_lat
|
||||
;;
|
||||
stdev_usec)
|
||||
stdev=$(jq -r ".jobs[] | (.read.clat_ns.stddev * $reads_pct + .write.clat_ns.stddev * $writes_pct)" $TMP_RESULT_FILE)
|
||||
stdev=${stdev%.*}
|
||||
echo $((stdev / 1000))
|
||||
stdev=$(jq -r ".jobs[] | (.read.clat_ns.stddev * $reads_pct + .write.clat_ns.stddev * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $stdev
|
||||
;;
|
||||
mean_slat_usec)
|
||||
mean_slat=$(jq -r ".jobs[] | (.read.slat_ns.mean * $reads_pct + .write.slat_ns.mean * $writes_pct)" $TMP_RESULT_FILE)
|
||||
mean_slat=${mean_slat%.*}
|
||||
echo $((mean_slat / 1000))
|
||||
mean_slat=$(jq -r ".jobs[] | (.read.slat_ns.mean * $reads_pct + .write.slat_ns.mean * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $mean_slat
|
||||
;;
|
||||
mean_clat_usec)
|
||||
mean_clat=$(jq -r ".jobs[] | (.read.clat_ns.mean * $reads_pct + .write.clat_ns.mean * $writes_pct)" $TMP_RESULT_FILE)
|
||||
mean_clat=${mean_clat%.*}
|
||||
echo $((mean_clat / 1000))
|
||||
mean_clat=$(jq -r ".jobs[] | (.read.clat_ns.mean * $reads_pct + .write.clat_ns.mean * $writes_pct)/1000" $TMP_RESULT_FILE)
|
||||
echo $mean_clat
|
||||
;;
|
||||
bw_Kibs)
|
||||
bw=$(jq -r ".jobs[] | (.read.bw + .write.bw)" $TMP_RESULT_FILE)
|
||||
bw=${bw%.*}
|
||||
echo $((bw))
|
||||
echo $bw
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@ -378,13 +373,11 @@ function get_bdevperf_results() {
|
||||
case "$1" in
|
||||
iops)
|
||||
iops=$(grep Total $TMP_RESULT_FILE | awk -F 'Total' '{print $2}' | awk '{print $2}')
|
||||
iops=${iops%.*}
|
||||
echo $iops
|
||||
;;
|
||||
bw_Kibs)
|
||||
bw_MBs=$(grep Total $TMP_RESULT_FILE | awk -F 'Total' '{print $2}' | awk '{print $4}')
|
||||
bw_MBs=${bw_MBs%.*}
|
||||
echo $((bw_MBs * 1024))
|
||||
bw_KBs=$(grep Total $TMP_RESULT_FILE | awk -F 'Total' '{print $2}' | awk '{print $4}')
|
||||
bc "$bw_KBs * 1024"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@ -397,16 +390,7 @@ function get_nvmeperf_results() {
|
||||
local min_lat_usec
|
||||
|
||||
read -r iops bw_MBs mean_lat_usec min_lat_usec max_lat_usec <<< $(tr -s " " < $TMP_RESULT_FILE | grep -oP "(?<=Total : )(.*+)")
|
||||
|
||||
# We need to get rid of the decimal spaces due
|
||||
# to use of arithmetic expressions instead of "bc" for calculations
|
||||
iops=${iops%.*}
|
||||
bw_MBs=${bw_MBs%.*}
|
||||
mean_lat_usec=${mean_lat_usec%.*}
|
||||
min_lat_usec=${min_lat_usec%.*}
|
||||
max_lat_usec=${max_lat_usec%.*}
|
||||
|
||||
echo "$iops $(bc <<< "$bw_MBs * 1024") $mean_lat_usec $min_lat_usec $max_lat_usec"
|
||||
echo "$iops $(bc "$bw_MBs * 1024") $mean_lat_usec $min_lat_usec $max_lat_usec"
|
||||
}
|
||||
|
||||
function run_spdk_nvme_fio() {
|
||||
|
@ -257,22 +257,33 @@ if $DPDKMEM; then
|
||||
dpdk_mem_pid=$!
|
||||
fi
|
||||
|
||||
iops_disks=0
|
||||
bw=0
|
||||
min_lat_disks_usec=0
|
||||
max_lat_disks_usec=0
|
||||
mean_lat_disks_usec=0
|
||||
p90_lat_disks_usec=0
|
||||
p99_lat_disks_usec=0
|
||||
p99_99_lat_disks_usec=0
|
||||
stdev_disks_usec=0
|
||||
mean_slat_disks_usec=0
|
||||
mean_clat_disks_usec=0
|
||||
#Run each workolad $REPEAT_NO times
|
||||
for ((j = 0; j < REPEAT_NO; j++)); do
|
||||
if [ $PLUGIN = "spdk-perf-bdev" ]; then
|
||||
run_bdevperf > $TMP_RESULT_FILE
|
||||
iops_disks=$((iops_disks + $(get_bdevperf_results iops)))
|
||||
bw=$((bw + $(get_bdevperf_results bw_Kibs)))
|
||||
iops_disks=$(bc "$iops_disks + $(get_bdevperf_results iops)")
|
||||
bw=$(bc "$bw + $(get_bdevperf_results bw_Kibs)")
|
||||
cp $TMP_RESULT_FILE $result_dir/perf_results_${MIX}_${PLUGIN}_${NO_CORES}cpus_${DATE}_${k}_disks_${j}.output
|
||||
elif [ $PLUGIN = "spdk-perf-nvme" ]; then
|
||||
run_nvmeperf $DISKNO > $TMP_RESULT_FILE
|
||||
read -r iops bandwidth mean_lat min_lat max_lat <<< $(get_nvmeperf_results)
|
||||
|
||||
iops_disks=$((iops_disks + iops))
|
||||
bw=$((bw + bandwidth))
|
||||
mean_lat_disks_usec=$((mean_lat_disks_usec + mean_lat))
|
||||
min_lat_disks_usec=$((min_lat_disks_usec + min_lat))
|
||||
max_lat_disks_usec=$((max_lat_disks_usec + max_lat))
|
||||
iops_disks=$(bc "$iops_disks+$iops")
|
||||
bw=$(bc "$bw+$bandwidth")
|
||||
mean_lat_disks_usec=$(bc "$mean_lat_disks_usec + $mean_lat")
|
||||
min_lat_disks_usec=$(bc "$min_lat_disks_usec + $min_lat")
|
||||
max_lat_disks_usec=$(bc "$max_lat_disks_usec + $max_lat")
|
||||
|
||||
cp $TMP_RESULT_FILE $result_dir/perf_results_${MIX}_${PLUGIN}_${NO_CORES}cpus_${DATE}_${k}_disks_${j}.output
|
||||
else
|
||||
@ -294,16 +305,15 @@ for ((j = 0; j < REPEAT_NO; j++)); do
|
||||
elif [[ $RW = *"write"* ]]; then
|
||||
rwmixread=0
|
||||
fi
|
||||
iops_disks=$((iops_disks + $(get_results iops $rwmixread)))
|
||||
mean_lat_disks_usec=$((mean_lat_disks_usec + $(get_results mean_lat_usec $rwmixread)))
|
||||
p90_lat_disks_usec=$((p90_lat_disks_usec + $(get_results p90_lat_usec $rwmixread)))
|
||||
p99_lat_disks_usec=$((p99_lat_disks_usec + $(get_results p99_lat_usec $rwmixread)))
|
||||
p99_99_lat_disks_usec=$((p99_99_lat_disks_usec + $(get_results p99_99_lat_usec $rwmixread)))
|
||||
stdev_disks_usec=$((stdev_disks_usec + $(get_results stdev_usec $rwmixread)))
|
||||
|
||||
mean_slat_disks_usec=$((mean_slat_disks_usec + $(get_results mean_slat_usec $rwmixread)))
|
||||
mean_clat_disks_usec=$((mean_clat_disks_usec + $(get_results mean_clat_usec $rwmixread)))
|
||||
bw=$((bw + $(get_results bw_Kibs $rwmixread)))
|
||||
iops_disks=$(bc "$iops_disks + $(get_results iops $rwmixread)")
|
||||
mean_lat_disks_usec=$(bc "$mean_lat_disks_usec + $(get_results mean_lat_usec $rwmixread)")
|
||||
p90_lat_disks_usec=$(bc "$p90_lat_disks_usec + $(get_results p90_lat_usec $rwmixread)")
|
||||
p99_lat_disks_usec=$(bc "$p99_lat_disks_usec + $(get_results p99_lat_usec $rwmixread)")
|
||||
p99_99_lat_disks_usec=$(bc "$p99_99_lat_disks_usec + $(get_results p99_99_lat_usec $rwmixread)")
|
||||
stdev_disks_usec=$(bc "$stdev_disks_usec + $(get_results stdev_usec $rwmixread)")
|
||||
mean_slat_disks_usec=$(bc "$mean_slat_disks_usec + $(get_results mean_slat_usec $rwmixread)")
|
||||
mean_clat_disks_usec=$(bc "$mean_clat_disks_usec + $(get_results mean_clat_usec $rwmixread)")
|
||||
bw=$(bc "$bw + $(get_results bw_Kibs $rwmixread)")
|
||||
|
||||
cp $TMP_RESULT_FILE $result_dir/perf_results_${MIX}_${PLUGIN}_${NO_CORES}cpus_${DATE}_${k}_disks_${j}.json
|
||||
cp $testdir/config.fio $result_dir/config_${MIX}_${PLUGIN}_${NO_CORES}cpus_${DATE}_${k}_disks_${j}.fio
|
||||
@ -325,32 +335,18 @@ if $DPDKMEM; then
|
||||
fi
|
||||
|
||||
#Write results to csv file
|
||||
iops_disks=$((iops_disks / REPEAT_NO))
|
||||
bw=$((bw / REPEAT_NO))
|
||||
iops_disks=$(bc "$iops_disks / $REPEAT_NO")
|
||||
bw=$(bc "$bw / $REPEAT_NO")
|
||||
if [[ "$PLUGIN" =~ "plugin" ]]; then
|
||||
mean_lat_disks_usec=$((mean_lat_disks_usec / REPEAT_NO))
|
||||
p90_lat_disks_usec=$((p90_lat_disks_usec / REPEAT_NO))
|
||||
p99_lat_disks_usec=$((p99_lat_disks_usec / REPEAT_NO))
|
||||
p99_99_lat_disks_usec=$((p99_99_lat_disks_usec / REPEAT_NO))
|
||||
stdev_disks_usec=$((stdev_disks_usec / REPEAT_NO))
|
||||
mean_slat_disks_usec=$((mean_slat_disks_usec / REPEAT_NO))
|
||||
mean_clat_disks_usec=$((mean_clat_disks_usec / REPEAT_NO))
|
||||
elif [[ "$PLUGIN" == "spdk-perf-bdev" ]]; then
|
||||
mean_lat_disks_usec=0
|
||||
p90_lat_disks_usec=0
|
||||
p99_lat_disks_usec=0
|
||||
p99_99_lat_disks_usec=0
|
||||
stdev_disks_usec=0
|
||||
mean_slat_disks_usec=0
|
||||
mean_clat_disks_usec=0
|
||||
mean_lat_disks_usec=$(bc "$mean_lat_disks_usec / $REPEAT_NO")
|
||||
p90_lat_disks_usec=$(bc "$p90_lat_disks_usec / $REPEAT_NO")
|
||||
p99_lat_disks_usec=$(bc "$p99_lat_disks_usec / $REPEAT_NO")
|
||||
p99_99_lat_disks_usec=$(bc "$p99_99_lat_disks_usec / $REPEAT_NO")
|
||||
stdev_disks_usec=$(bc "$stdev_disks_usec / $REPEAT_NO")
|
||||
mean_slat_disks_usec=$(bc "$mean_slat_disks_usec / $REPEAT_NO")
|
||||
mean_clat_disks_usec=$(bc "$mean_clat_disks_usec / $REPEAT_NO")
|
||||
elif [[ "$PLUGIN" == "spdk-perf-nvme" ]]; then
|
||||
mean_lat_disks_usec=$((mean_lat_disks_usec / REPEAT_NO))
|
||||
p90_lat_disks_usec=0
|
||||
p99_lat_disks_usec=0
|
||||
p99_99_lat_disks_usec=0
|
||||
stdev_disks_usec=0
|
||||
mean_slat_disks_usec=0
|
||||
mean_clat_disks_usec=0
|
||||
mean_lat_disks_usec=$(bc "$mean_lat_disks_usec/$REPEAT_NO")
|
||||
fi
|
||||
|
||||
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" ${DISKNO} ${iops_disks} ${mean_lat_disks_usec} ${p90_lat_disks_usec} ${p99_lat_disks_usec} \
|
||||
|
Loading…
Reference in New Issue
Block a user