测试SMR HDD的时候,有一个需求是这样的。
取100个连续的zone IO在zone间随机,zone内部有序。并记录性能。
其实就是选100个连续的zone ,随机打乱跑顺序写。脚本也很简单分两个步骤:第一生成100个1到100的随机数。第二步利用这个100个随机数作为zone的行号跑IO
第一步生成1到100个不重复的随机数
while true;do
random_num=`echo $(( $RANDOM % 100 + 1))`
if [ -f "random_num.txt" ]
then
num_100=`cat random_num.txt|wc -l`
if [ $num_100 == 100 ]
then
break
else
if [[ -z "$(cat random_num.txt|grep ^${random_num}$)" ]]
then
echo $random_num >>random_num.txt
fi
fi
else
echo $random_num >>random_num.txt
fi
done
第二步其实就是利用zbd工具取100个sma的zone跑IO了
zbd report -i /dev/$1 |grep -i swr |sed -n '6001,6100p'>${hdd}_smr_100.txt
for num in `cat random_num.txt`;do
ofst=`cat ${hdd}_smr_100.txt |sed -n ${num}p |awk '{print $5}'|sed 's/,//g'`
fio -filename=/dev/$hdd -direct=1 -zonemode=zbd --offset=$ofst -iodepth=8 -thread -rw=write --max_open_zones=128 -ioengine=libaio -bs=64k -numjobs=1 --size=1z -group_reporting -name=job_name --loops=1 >smr_${hdd}_${ofst}_write.txt
done
完整脚本如下:
while true;do
random_num=`echo $(( $RANDOM % 100 + 1))`
if [ -f "random_num.txt" ]
then
num_100=`cat random_num.txt|wc -l`
if [ $num_100 == 100 ]
then
break
else
if [[ -z "$(cat random_num.txt|grep ^${random_num}$)" ]]
then
echo $random_num >>random_num.txt
fi
fi
else
echo $random_num >>random_num.txt
fi
done
zbd report -i /dev/$1 |grep -i swr |sed -n '6001,6100p'>${hdd}_smr_100.txt
for num in `cat random_num.txt`;do
ofst=`cat ${hdd}_smr_100.txt |sed -n ${num}p |awk '{print $5}'|sed 's/,//g'`
fio -filename=/dev/$hdd -direct=1 -zonemode=zbd --offset=$ofst -iodepth=8 -thread -rw=write --max_open_zones=128 -ioengine=libaio -bs=64k -numjobs=1 --size=1z -group_reporting -name=job_name --loops=1 >smr_${hdd}_${ofst}_write.txt
done
关于zbd的工具介绍 详情查看
https://zonedstorage.io/docs/tools/libzbd