1# SPDX-License-Identifier: GPL-2.0 2#!/bin/bash 3 4export QCOW2_IMG_SZ=2G 5 6_create_qcow2_null_image() { 7 local type=$1 8 local size=$2 9 local my_file=`mktemp -p ${UBLK_TMP_DIR} ublk_${type}_${size}_XXXXX.qcow2` 10 qemu-img create -f qcow2 $my_file $size > /dev/null 2>&1 11 echo $my_file 12} 13 14_qcow2_image_alloc_data() { 15 local my_dev=`__create_nbd_dev "$1"` 16 local my_size=`blockdev --getsz $my_dev` 17 local my_count=`expr ${my_size} / 2048` 18 19 dd if=/dev/zero of=$my_dev bs=1M count=${my_count} oflag=direct > /dev/null 2>&1 20 __remove_nbd_dev $my_dev 21} 22 23_create_qcow2_image() { 24 local type=$1 25 local size=$2 26 27 local file=`_create_qcow2_null_image $type $size` 28 if [ "$type" == "data" ]; then 29 local nbd_params="-c /dev/nbd11 -n --aio=native $file" 30 _qcow2_image_alloc_data "$nbd_params" 31 fi 32 echo $file 33} 34 35_check_qcow2_image() { 36 local my_file=$1 37 qemu-img check -r leaks $my_file > ${UBLK_TMP} 2>&1 38 [ $? -ne 0 ] && echo "qcow2 image $my_file is broken" && cat ${UBLK_TMP} && exit 39} 40 41_remove_qcow2_image() { 42 local file=$1 43 44 if [ -f "$file" ]; then 45 _check_qcow2_image $file 46 rm -f $file 47 fi 48} 49 50 51__remove_nbd_dev() { 52 local DEV=$1 53 sync $DEV 54 qemu-nbd -d $DEV > /dev/null 2>&1 55 udevadm settle 56} 57 58__create_nbd_dev() { 59 local nbd_params="$1" 60 local DEV=`echo ${nbd_params} | awk '{ for(i=1; i<=NF; ++i) if (substr($i, 1, 8) == "/dev/nbd") printf $i}'` 61 modprobe nbd > /dev/null 2>&1 62 qemu-nbd -d $DEV > /dev/null 2>&1 63 eval qemu-nbd ${nbd_params} > /dev/null 2>&1 64 echo "$DEV" 65 udevadm settle 66} 67 68__run_nbd_dev_perf() 69{ 70 local JOBS=$1 71 local DEV=`__create_nbd_dev "${T_TYPE_PARAMS}"` 72 73 echo -e "\t$T_TYPE $T_TYPE_PARAMS, fio($DEV, libaio, dio, io jobs $JOB)..." 74 __run_dev_perf_no_create "nbd" $JOBS $DEV 75 76 __remove_nbd_dev $DEV 77} 78