MAX=$2
MAX_MB=${RACER_MAX_MB:-8}
+. $LUSTRE/tests/test-framework.sh
+
OSTCOUNT=${OSTCOUNT:-$($LFS df $DIR 2> /dev/null | grep -c OST)}
+layout=(raid0 raid0)
+
+# check if it supports PFL layout
+[[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.0) ]] &&
+ layout+=(pfl pfl pfl)
+
+# check if it supports DoM
+[[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.53) ]] &&
+ layout+=(dom dom)
+
+echo "layout: ${layout[*]}"
+
while /bin/true; do
file=$((RANDOM % MAX))
# $RANDOM is between 0 and 32767, and we want $blockcount in 64kB units
blockcount=$((RANDOM * MAX_MB / 32 / 64))
stripecount=$((RANDOM % (OSTCOUNT + 1)))
- [ $OSTCOUNT -gt 0 ] &&
- $LFS setstripe -c $stripecount $DIR/$file 2> /dev/null
- dd if=/dev/zero of=$DIR/$file bs=64k count=$blockcount 2> /dev/null
+
+ [ $stripecount -gt 0 ] && {
+ stripesize=$(((RANDOM % 16 + 1) * 64))K
+ pattern=${layout[$RANDOM % ${#layout[*]}]}
+
+ case $pattern in
+ dom) opt="-E $stripesize -L mdt -E eof -c $stripecount -S 1M" ;;
+ pfl) opt="-E 1M -S $stripesize -E eof -c $stripecount -S 2M" ;;
+ raid0) opt="-S $stripesize -c $stripecount" ;;
+ esac
+
+ $LFS setstripe $opt $DIR/$file 2> /dev/null || true
+ }
+
+ # offset between 0 and 16MB (256 64k chunks), with 1/2 at offset 0
+ seek=$((RANDOM / 64)); [ $seek -gt 256 ] && seek=0
+ dd if=/dev/zero of=$DIR/$file bs=64k count=$blockcount \
+ seek=$seek 2> /dev/null || true
done