#!/bin/bash DEV="/dev/md0"; DIR="/mnt/test" ISIZE=256 PROGS="/home/benchmrks/tools_12_08/sbin" PROF="large-create-128T" run() { typeset LINEID="$1" typeset LOGFILE="$2" typeset CMD="$3" echo "$CMD" # fields of time output: # # LINEID: a tag to identify the line (mkfs, fsck, ...) # %e: Elapsed real time (in seconds) /usr/bin/time -o "$LOGFILE" -a -f "$LINEID %e" $CMD } # TEST umount $DEV if df | grep $DEV then echo "ERROR: $DEV in use" 1>&2 exit 1 fi for filesystem in \ "ext4dev data=writeback,barrier=0 ^flex_bg,^uninit_groups" \ "ext4dev data=writeback,nodelalloc,barrier=0 ^flex_bg,^uninit_groups" \ "ext4dev data=writeback,barrier=0 ^flex_bg,uninit_groups" \ "ext4dev data=writeback,nomballoc,barrier=0 ^flex_bg,uninit_groups" \ "ext4dev data=writeback,nomballoc,nodelalloc,barrier=0 ^flex_bg,uninit_groups" \ "ext4dev data=writeback,journal_async_commit,barrier=0 ^flex_bg,uninit_groups" \ "ext4dev data=writeback,barrier=0 uninit_groups,flex_bg -G64" \ "ext4dev data=writeback,nomballoc,barrier=0 uninit_groups,flex_bg -G64" \ "ext4dev data=writeback,nomballoc,nodelalloc,barrier=0 uninit_groups,flex_bg -G64" \ "ext4dev data=writeback,journal_async_commit,barrier=0 uninit_groups,flex_bg -G64"\ "ext3 data=writeback,barrier=0 defaults" \ "xfs defaults,barrier=0 defaults" \ "btrfs subvol=." \ "ext4dev data=writeback,journal_checksum,barrier=0 uninit_groups,flex_bg -G64" do FS=${filesystem%% *} OPT=${filesystem#* } OPT1=${OPT#* } OPT2=${OPT%% *} OPT3=${OPT1% *} LOGFILE="rw_${FS}_${OPT3}_${OPT2}" rm -f "$LOGFILE*" if [ "$FS" = "xfs" ] then CMD="mkfs -t $FS -f $DEV" elif [ "$FS" = "btrfs" ] then CMD="mkfs.$FS $DEV" elif [ "$FS" = "ext3" ] then CMD="$PROGS/mkfs.ext3 -I $ISIZE $DEV" else if [ "$OPT1" = "defaults" ] then CMD="$PROGS/mkfs.ext4 -I $ISIZE -E test_fs $DEV" else CMD="$PROGS/mkfs.ext4 -I $ISIZE -E test_fs -O $OPT1 $DEV" fi fi echo $CMD if ! $CMD > /dev/null then echo "Failed !" exit 1 fi echo mount -t $FS -o $OPT2 $DEV $DIR if ! mount -t $FS -o $OPT2 $DEV $DIR then echo "Failed !" exit 1 fi #flush all caches echo 3 > /proc/sys/vm/drop_caches if [ "$FS" = "btrfs" ] then ffsb $PROF"_btrfs" > ${LOGFILE}_FFSB else ffsb $PROF > ${LOGFILE}_FFSB fi if [ "$FS" = "xfs" ] then FILES=$(ls $DIR/data | wc -w) echo "nbfrags= " > ${LOGFILE}_filefrag xfs_bmap $DIR/data/datafile* | grep -v data | wc -l >> ${LOGFILE}_filefrag echo "nbfiles= $FILES" >> ${LOGFILE}_filefrag else $PROGS/filefrag $DIR/data/datafile* | grep "found" > ${LOGFILE}_filefrag fi #flush all caches echo 3 > /proc/sys/vm/drop_caches echo umount $DEV while ! umount $DEV do echo "Retry..." sleep 5 echo umount $DEV done if [ "$FS" = "xfs" ] then run "xfs_repair" "$LOGFILE" "xfs_repair $DEV" elif [ "$FS" = "btrfs" ] then run "btrfsck" "$LOGFILE" "btrfsck -fy $DEV" else run "fsck" "$LOGFILE" "$PROGS/e2fsck -fy $DEV" fi done