1*94c4a1e1SFrank Piva#!/bin/bash 2*94c4a1e1SFrank Piva# SPDX-License-Identifier: MIT or GPL-2.0-only 3*94c4a1e1SFrank Piva 4*94c4a1e1SFrank Pivaexport LO_IMG_SZ=1G 5*94c4a1e1SFrank Piva 6*94c4a1e1SFrank Piva_create_loop_image() { 7*94c4a1e1SFrank Piva local type=$1 8*94c4a1e1SFrank Piva local my_size=$2 9*94c4a1e1SFrank Piva 10*94c4a1e1SFrank Piva local my_file=`mktemp -p ${UBLK_TMP_DIR} ublk_loop_${type}_${my_size}_XXXXX` 11*94c4a1e1SFrank Piva truncate -s ${my_size} ${my_file} 12*94c4a1e1SFrank Piva 13*94c4a1e1SFrank Piva my_size=`stat --printf="%s" ${my_file}` 14*94c4a1e1SFrank Piva local my_count=`expr ${my_size} / 1048576` 15*94c4a1e1SFrank Piva 16*94c4a1e1SFrank Piva dd if=/dev/zero of=$my_file bs=1M count=${my_count} oflag=direct > /dev/null 2>&1 17*94c4a1e1SFrank Piva echo $my_file 18*94c4a1e1SFrank Piva} 19*94c4a1e1SFrank Piva 20*94c4a1e1SFrank Piva_remove_loop_image() { 21*94c4a1e1SFrank Piva local file=$1 22*94c4a1e1SFrank Piva 23*94c4a1e1SFrank Piva [ -f "$file" ] && rm -f $file 24*94c4a1e1SFrank Piva} 25*94c4a1e1SFrank Piva 26*94c4a1e1SFrank Piva__remove_kernel_loop_dev() { 27*94c4a1e1SFrank Piva local DEV=$1 28*94c4a1e1SFrank Piva losetup -d $DEV 29*94c4a1e1SFrank Piva udevadm settle 30*94c4a1e1SFrank Piva} 31*94c4a1e1SFrank Piva 32*94c4a1e1SFrank Piva__create_kernel_loop_dev() { 33*94c4a1e1SFrank Piva local my_file=`echo $T_TYPE_PARAMS | awk '{print $(NF)}'` 34*94c4a1e1SFrank Piva if eval $T_TYPE $T_TYPE_PARAMS > /dev/null 2>&1; then 35*94c4a1e1SFrank Piva local my_dev=`losetup -l | grep "${my_file}" | awk '{print $1}'` 36*94c4a1e1SFrank Piva udevadm settle 37*94c4a1e1SFrank Piva echo $my_dev 38*94c4a1e1SFrank Piva else 39*94c4a1e1SFrank Piva echo "" 40*94c4a1e1SFrank Piva fi 41*94c4a1e1SFrank Piva} 42*94c4a1e1SFrank Piva 43*94c4a1e1SFrank Piva__run_loop_dev_perf() 44*94c4a1e1SFrank Piva{ 45*94c4a1e1SFrank Piva local JOBS=$1 46*94c4a1e1SFrank Piva local DEV=`__create_kernel_loop_dev` 47*94c4a1e1SFrank Piva 48*94c4a1e1SFrank Piva if [ "$DEV" == "" ]; then 49*94c4a1e1SFrank Piva export T_TYPE_PARAMS=${T_TYPE_PARAMS//--direct-io=on/" "} 50*94c4a1e1SFrank Piva DEV=`__create_kernel_loop_dev` 51*94c4a1e1SFrank Piva fi 52*94c4a1e1SFrank Piva 53*94c4a1e1SFrank Piva echo -e "\t$T_TYPE $T_TYPE_PARAMS, fio: ($DEV libaio, dio, io jobs $JOBS)..." 54*94c4a1e1SFrank Piva __run_dev_perf_no_create "loop" $JOBS $DEV 55*94c4a1e1SFrank Piva 56*94c4a1e1SFrank Piva __remove_kernel_loop_dev $DEV 57*94c4a1e1SFrank Piva} 58