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