use dd and lmdd for proper direct/buffered IO on linux and irix
authorDavid Disseldorp <ddiss@sgi.com>
Tue, 24 Jul 2007 16:08:47 +0000 (16:08 +0000)
committerDavid Disseldorp <ddiss@sgi.com>
Tue, 24 Jul 2007 16:08:47 +0000 (16:08 +0000)
Merge of master-melb:xfs-cmds:29214a by kenmcd.

170
171
172
173
174
common.filestreams

diff --git a/170 b/170
index 4e9a9c2ebaf04b8458df3cd9920f98fae3e454b7..0b4b0a8b53c02da0959f4f84fceb485b9de205d8 100644 (file)
--- a/170
+++ b/170
@@ -29,6 +29,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.filestreams
 
 # real QA test starts here
 _supported_fs xfs
@@ -36,8 +37,6 @@ _supported_os IRIX Linux
 
 _require_scratch
 
-. ./common.filestreams
-
 _check_filestreams_support || _notrun "filestreams not available"
 
 # test small stream, multiple I/O per file, 30s timeout
diff --git a/171 b/171
index b98b5404ce9d5de189980e0099f7cee826a9eeae..0cd391041d2e44a5ae8b955942f134e4e007b476 100644 (file)
--- a/171
+++ b/171
@@ -29,6 +29,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.filestreams
 
 # real QA test starts here
 _supported_fs xfs
@@ -36,8 +37,6 @@ _supported_os IRIX Linux
 
 _require_scratch
 
-. ./common.filestreams
-
 _check_filestreams_support || _notrun "filestreams not available"
 
 # test large numbers of files, single I/O per file, 120s timeout
diff --git a/172 b/172
index e76e9e77870c2e740980bd358370a1340baf7353..03983a81473bb9ca7f67c2afe9223f60b66da90c 100644 (file)
--- a/172
+++ b/172
@@ -29,6 +29,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.filestreams
 
 # real QA test starts here
 _supported_fs xfs
@@ -36,8 +37,6 @@ _supported_os IRIX Linux
 
 _require_scratch
 
-. ./common.filestreams
-
 _check_filestreams_support || _notrun "filestreams not available"
 
 # test reaper works by setting timeout low. Expected to fail
diff --git a/173 b/173
index 2d2e08071f731e875b93f2ec4c46f13c1bef9b17..8bd779567e204308da101b3f805c2440d63962b8 100644 (file)
--- a/173
+++ b/173
@@ -29,6 +29,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.filestreams
 
 # real QA test starts here
 _supported_fs xfs
@@ -36,8 +37,6 @@ _supported_os IRIX Linux
 
 _require_scratch
 
-. ./common.filestreams
-
 _check_filestreams_support || _notrun "filestreams not available"
 
 # test large number of streams, multiple I/O per file, 120s timeout
diff --git a/174 b/174
index 9ad23021c3a9108daf3a390a5f265e42c11dfe89..0b984bca37bbcb97b7f0e4a04a7e1460815474a0 100644 (file)
--- a/174
+++ b/174
@@ -16,6 +16,7 @@ echo "QA output created by $seq"
 
 here=`pwd`
 tmp=/tmp/$$
+rm -f $seq.full
 status=1    # failure is the default!
 trap "_cleanup; exit \$status" 0 1 2 3 15
 
@@ -28,6 +29,7 @@ _cleanup()
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.filestreams
 
 # real QA test starts here
 _supported_fs xfs
@@ -35,8 +37,6 @@ _supported_os IRIX Linux
 
 _require_scratch
 
-. ./common.filestreams
-
 _check_filestreams_support || _notrun "filestreams not available"
 
 # test number of streams greater than AGs. Expected to fail.
index 9994b7b1a33ac0c894be1b354bdc5c5e46363625..b385271cf5a6a1db5b646140f323317886b3ea22 100644 (file)
@@ -40,30 +40,38 @@ _set_stream_timeout_centisecs()
 
 _do_stream()
 {
-        local directory_name=$1
-        local files=$2
-        local file_size=$3
-        local bsize=$4
+       local directory_name=$1
+       local files=$2
+       local file_size=$3
+       local bsize=$4
        local iflag=$5
        local dio=$6
+       local blocks_in_file=`expr $file_size / $bsize`
 
-        mkdir $directory_name
+       mkdir $directory_name
        if [ "$iflag" = "1" -a "$HOSTOS" != "IRIX" ]; then
                $XFS_IO_PROG -x -c "chattr +S" $directory_name \
                        || _fail "chattr of filestream flag"
        fi
-        cd $directory_name
-        local i=1
-       local oflags=""
-       if [ "$dio" = "1" ]; then
-               oflags="-d"
+       cd $directory_name
+
+       local dd_cmd=""
+       if [ "$HOSTOS" == "IRIX" ]; then
+               # for irix use lmdd
+               dd_cmd="lmdd"
+               [ "$dio" = "1" ] && dd_cmd="$dd_cmd odirect=1"
+       else
+               # for linux use dd
+               dd_cmd="dd"
+               [ "$dio" = "1" ] && dd_cmd="$dd_cmd oflag=direct"
        fi
-        while [ $i -le $files ]; do
-               $XFS_IO_PROG -f -c \
-                       "pwrite $oflags -i /dev/zero -b $bsize 0 ${file_size}" \
-                       frame-${i} >/dev/null
-                i=`expr $i + 1`
-        done
+       dd_cmd="$dd_cmd if=/dev/zero bs=${bsize} count=${blocks_in_file}"
+
+       local i=1
+       while [ $i -le $files ]; do
+               $dd_cmd of=frame-${i} 2>&1 | grep -v records | grep -v secs
+               i=`expr $i + 1`
+       done
 }
 
 _filter_agno()