1#!/usr/bin/env bash 2set -xe 3 4err_wipe() { 5 [[ -n $devs ]] || return 0 6 local _devs 7 8 _devs=($devs) _devs=("${_devs[@]/#//dev/}") 9 10 umount "${_devs[@]}" || : 11 wipefs --all "${_devs[@]}" || : 12} 13 14MAKE="make -j$(($(nproc) * 2))" 15 16if [[ $1 == "spdk_vhost_scsi" ]]; then 17 devs="" 18 for entry in /sys/block/sd*; do 19 if grep -Eq '(INTEL|RAWSCSI|LIO-ORG)' $entry/device/vendor; then 20 devs+="$(basename $entry) " 21 fi 22 done 23elif [[ $1 == "spdk_vhost_blk" ]]; then 24 devs=$( 25 cd /sys/block 26 echo vd* 27 ) 28fi 29 30fs=$2 31 32trap "err_wipe; exit 1" SIGINT SIGTERM EXIT 33 34for fs in $fs; do 35 for dev in $devs; do 36 i=0 37 parted_cmd="parted -s /dev/${dev}" 38 39 echo "INFO: Creating partition table on disk using: $parted_cmd mklabel gpt" 40 $parted_cmd mklabel gpt 41 while ! ($parted_cmd print | grep -q gpt); do 42 [[ $i -lt 100 ]] || break 43 i=$((i + 1)) 44 sleep 0.1 45 done 46 $parted_cmd mkpart SPDK_TEST 2048s 100% 47 48 mkfs_cmd="mkfs.$fs" 49 if [[ $fs == "ntfs" ]] || [[ $fs == "btrfs" ]]; then 50 mkfs_cmd+=" -f" 51 fi 52 mkfs_cmd+=" /dev/${dev}1" 53 echo "INFO: Creating filesystem using: $mkfs_cmd" 54 i=0 55 until wipefs -a /dev/${dev}1; do 56 [[ $i -lt 100 ]] || break 57 i=$((i + 1)) 58 echo "Waiting for /dev/${dev}1" 59 sleep 0.1 60 done 61 $mkfs_cmd 62 63 mkdir -p /mnt/${dev}dir 64 mount -o sync /dev/${dev}1 /mnt/${dev}dir 65 66 fio --name="integrity" --bsrange=4k-512k --iodepth=128 --numjobs=1 --direct=1 \ 67 --thread=1 --group_reporting=1 --rw=randrw --rwmixread=70 \ 68 --filename=/mnt/${dev}dir/test_file --verify=md5 --do_verify=1 \ 69 --verify_backlog=1024 --fsync_on_close=1 --runtime=20 --time_based=1 \ 70 --size=512m --verify_state_save=0 71 72 # Print out space consumed on target device 73 df -h /dev/$dev 74 done 75 76 for dev in $devs; do 77 umount /mnt/${dev}dir 78 rm -rf /mnt/${dev}dir 79 stats=($(cat /sys/block/$dev/stat)) 80 wipefs --all "/dev/$dev" 81 82 echo "" 83 echo "$dev stats" 84 printf "READ IO cnt: % 8u merges: % 8u sectors: % 8u ticks: % 8u\n" \ 85 ${stats[0]} ${stats[1]} ${stats[2]} ${stats[3]} 86 printf "WRITE IO cnt: % 8u merges: % 8u sectors: % 8u ticks: % 8u\n" \ 87 ${stats[4]} ${stats[5]} ${stats[6]} ${stats[7]} 88 printf "in flight: % 8u io ticks: % 8u time in queue: % 8u\n" \ 89 ${stats[8]} ${stats[9]} ${stats[10]} 90 echo "" 91 done 92done 93 94trap - SIGINT SIGTERM EXIT 95