initial code repo
[stor4nfv.git] / src / ceph / src / script / smr_benchmark / linearSMRCopy.sh
diff --git a/src/ceph/src/script/smr_benchmark/linearSMRCopy.sh b/src/ceph/src/script/smr_benchmark/linearSMRCopy.sh
new file mode 100755 (executable)
index 0000000..f35437c
--- /dev/null
@@ -0,0 +1,69 @@
+#! /bin/bash
+
+# copy a linear file from srcFile to destination SMRDisk in a loop until writeSize MBs is written
+# SMRDisk is the SMR Host Aware / Host Managed Disk eg. /dev/sdb
+
+usage(){
+       echo "linearSMRCopy.sh <srcFile> <SMRDisk> <writeSize (MB)>"
+}
+
+if [ "$#" -lt 3 ]; then
+       usage
+       exit
+fi
+
+if [ "$(id -u)" != "0" ]; then
+       echo "Please run as sudo user"
+       exit
+fi
+
+if which zbc_open_zone > /dev/null 2>&1 && which zbc_read_zone > /dev/null 2>&1 && which zbc_write_zone > /dev/null 2>&1 ; then
+       echo "libzbc commands present... refreshing zones"
+       # reset all write pointers before starting to write
+       sudo zbc_reset_write_ptr /dev/sdb -1
+else
+       echo "libzbc commands not detected. Please install libzbc"
+       exit
+fi
+
+srcFile=$1
+SMRDisk=$2
+writeSize=$3
+iosize=10240
+
+numberOfSectors=$(($writeSize * 2048))
+
+smrZoneStart=33554432 # TODO query this from SMR drive
+
+#dd if=$srcFile of=$destDisk seek=$smrZoneStart bs=512
+
+fileSize=`stat --printf="%s" $srcFile`
+
+if [ "$(($fileSize % 512))" -ne 0 ]; then
+       echo "$srcFile not 512 byte aligned"
+       exit
+fi
+
+sectorsLeftToWrite=$(($fileSize / 512))
+
+znum=64 # TODO query this from SMR Drive
+
+zoneLength=524288 # number of sectors in each zone TODO query from SMR drive
+
+writeOffset=$smrZoneStart
+
+sectorsLeftToWrite=$numberOfSectors
+
+echo "write begin sectors Left = $sectorsLeftToWrite, writeOffset = $writeOffset zone Num = $znum"
+
+while [ "$sectorsLeftToWrite" -gt 0 ]; 
+do
+       sudo zbc_open_zone $SMRDisk $znum 
+        sudo time zbc_write_zone -f $srcFile -loop $SMRDisk $znum $iosize
+       sudo zbc_close_zone /dev/sdb $znum
+       writeOffset=$(($writeOffset+$zoneLength))
+       znum=$(($znum+1))
+       sectorsLeftToWrite=$(($sectorsLeftToWrite - $zoneLength))
+done
+
+echo "write end sectors Left = $sectorsLeftToWrite, writeOffset = $writeOffset zone Num = $znum"