CHECK_GRANT=${CHECK_GRANT:-"yes"}
GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}
-if [ $UID -ne 0 ]; then
- echo "Warning: running as non-root uid $UID"
- RUNAS_ID="$UID"
- RUNAS=""
-else
- RUNAS_ID=${RUNAS_ID:-500}
- RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
-
- # $RUNAS_ID may get set incorrectly somewhere else
- if [ $RUNAS_ID -eq 0 ]; then
- echo "Error: \$RUNAS_ID set to 0, but \$UID is also 0!"
- exit 1
- fi
-fi
-
export NAME=${NAME:-local}
SAVE_PWD=$PWD
[ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo
[ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo
-rm -rf $DIR/[Rdfs][1-9]*
+rm -rf $DIR/[Rdfs][0-9]*
+
+# $RUNAS_ID may get set incorrectly somewhere else
+[ $UID -eq 0 -a $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID is also 0!"
check_runas_id $RUNAS_ID $RUNAS
umask 077
+OLDDEBUG="`sysctl -n lnet.debug 2> /dev/null`"
+sysctl -w lnet.debug=-1 2> /dev/null || true
test_0() {
touch $DIR/$tfile
$CHECKSTAT -t file $DIR/$tfile || error
}
run_test 119c "Testing for direct read hitting hole"
-LDLM_POOL_CTL_RECALC=1
-LDLM_POOL_CTL_SHRINK=2
-
-disable_pool_recalc() {
- for NSD in $LPROC/ldlm/namespaces/*$1*; do
- if test -f $NSD/pool/control; then
- CONTROL=`cat $NSD/pool/control`
- CONTROL=$((CONTROL & ~LDLM_POOL_CTL_RECALC))
- echo "$CONTROL" > $NSD/pool/control
- fi
- done
-}
-
-enable_pool_recalc() {
- for NSD in $LPROC/ldlm/namespaces/*$1*; do
- if test -f $NSD/pool/control; then
- CONTROL=`cat $NSD/pool/control`
- CONTROL=$((CONTROL | LDLM_POOL_CTL_RECALC))
- echo "$CONTROL" > $NSD/pool/control
- fi
- done
-}
-
-disable_pool_shrink() {
- for NSD in $LPROC/ldlm/namespaces/*$1*; do
- if test -f $NSD/pool/control; then
- CONTROL=`cat $NSD/pool/control`
- CONTROL=$((CONTROL & ~LDLM_POOL_CTL_SHRINK))
- echo "$CONTROL" > $NSD/pool/control
- fi
- done
-}
-
-enable_pool_shrink() {
- for NSD in $LPROC/ldlm/namespaces/*$1*; do
- if test -f $NSD/pool/control; then
- CONTROL=`cat $NSD/pool/control`
- CONTROL=$((CONTROL | LDLM_POOL_CTL_SHRINK))
- echo "$CONTROL" > $NSD/pool/control
- fi
- done
-}
-
-disable_pool() {
- disable_pool_shrink $1
- disable_pool_recalc $1
-}
-
-enable_pool() {
- enable_pool_shrink $1
- enable_pool_recalc $1
-}
-
-lru_resize_enable()
-{
- enable_pool osc
- enable_pool "filter-$FSNAME"
- enable_pool mdc
- enable_pool "mds-$FSNAME"
-}
-
-lru_resize_disable()
-{
- disable_pool osc
- disable_pool "filter-$FSNAME"
- disable_pool mdc
- disable_pool "mds-$FSNAME"
-}
-
test_120a() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
cancel_lru_locks mdc
stat $DIR/$tdir > /dev/null
can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120a "Early Lock Cancel: mkdir test"
test_120b() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
cancel_lru_locks mdc
stat $DIR/$tdir > /dev/null
can1=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
can2=`awk '/ldlm_cancel/ {print $2}' $LPROC/ldlm/services/ldlm_canceld/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120b "Early Lock Cancel: create test"
test_120c() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
mkdir -p $DIR/$tdir/d1 $DIR/$tdir/d2
touch $DIR/$tdir/d1/f1
cancel_lru_locks mdc
blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120c "Early Lock Cancel: link test"
test_120d() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
touch $DIR/$tdir
cancel_lru_locks mdc
stat $DIR/$tdir > /dev/null
blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120d "Early Lock Cancel: setattr test"
test_120e() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
dd if=/dev/zero of=$DIR/$tdir/f1 count=1
cancel_lru_locks mdc
cancel_lru_locks osc
blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120e "Early Lock Cancel: unlink test"
test_120f() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
mkdir -p $DIR/$tdir/d1 $DIR/$tdir/d2
dd if=/dev/zero of=$DIR/$tdir/d1/f1 count=1
dd if=/dev/zero of=$DIR/$tdir/d2/f2 count=1
blk2=`awk '/ldlm_bl_callback/ {print $2}' $LPROC/ldlm/services/ldlm_cbd/stats`
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120f "Early Lock Cancel: rename test"
test_120g() {
[ -z "`grep early_lock_cancel $LPROC/mdc/*/connect_flags`" ] && \
skip "no early lock cancel on server" && return 0
- lru_resize_disable
+ lru_resize_disable mdc
+ lru_resize_disable osc
count=10000
echo create $count files
mkdir -p $DIR/$tdir
echo total: $((can2-can1)) cancels, $((blk2-blk1)) blockings
sleep 2
# wait for commitment of removal
- lru_resize_enable
+ lru_resize_enable mdc
+ lru_resize_enable osc
}
run_test 120g "Early Lock Cancel: performance test"
test_121() { #bug #10589
rm -rf $DIR/$tfile
- writes=`dd if=/dev/zero of=$DIR/$tfile count=1 2>&1 | awk 'BEGIN { FS="+" } /out/ {print $1}'`
+ writes=$(LANG=C dd if=/dev/zero of=$DIR/$tfile count=1 2>&1 | awk -F '+' '/out/ {print $1}')
#define OBD_FAIL_LDLM_CANCEL_RACE 0x310
sysctl -w lustre.fail_loc=0x310
cancel_lru_locks osc > /dev/null
- reads=`dd if=$DIR/$tfile of=/dev/null 2>&1 | awk 'BEGIN { FS="+" } /in/ {print $1}'`
+ reads=$(LANG=C dd if=$DIR/$tfile of=/dev/null 2>&1 | awk -F '+' '/in/ {print $1}')
sysctl -w lustre.fail_loc=0
[ "$reads" -eq "$writes" ] || error "read" $reads "blocks, must be" $writes
}
run_test 121 "read cancel race ========="
-cmd_cancel_lru_locks() {
- NS=$1
- test "x$NS" = "x" && NS="mdc"
- for d in `find $LPROC/ldlm/namespaces | grep $NS`; do
- if test -f $d/lru_size; then
- cancel_lru_locks $d
- fi
- done
-}
-
test_124a() {
[ -z "`grep lru_resize $LPROC/mdc/*/connect_flags`" ] && \
skip "no lru resize on server" && return 0
- cmd_cancel_lru_locks "mdc"
- lru_resize_enable
-
- # we want to test main pool functionality, that is cancel based on SLV
- # this is why shrinkers are disabled
- disable_pool_shrink "mds-$FSNAME"
- disable_pool_shrink mdc
-
NR=2000
mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
# use touch to produce $NR new locks
log "create $NR files at $DIR/$tdir"
- for ((i=0;i<$NR;i++)); do touch $DIR/$tdir/f$i; done
+ createmany -o $DIR/$tdir/f $NR ||
+ error "failed to create $NR files in $DIR/$tdir"
+ cancel_lru_locks mdc
+ ls -l $DIR/$tdir > /dev/null
+
NSDIR=""
LRU_SIZE=0
- for d in `find $LPROC/ldlm/namespaces | grep mdc-`; do
- if test -f $d/lru_size; then
- LRU_SIZE=`cat $d/lru_size`
- if test $LRU_SIZE -gt 0; then
- log "using $d namespace"
- NSDIR=$d
- break
- fi
+ for F in $LPROC/ldlm/namespaces/*mdc-*/lru_size; do
+ LRU_SIZE=$(cat $F)
+ if [ $LRU_SIZE -gt $(default_lru_size) ]; then
+ NSDIR=$(dirname $F)
+ log "using $(basename $NSDIR) namespace"
+ break
fi
done
- if test -z $NSDIR; then
- skip "No cached locks created!"
- return 0
- fi
-
- if test $LRU_SIZE -lt 100; then
+ if [ -z "$NSDIR" -o $LRU_SIZE -lt $(default_lru_size) ]; then
skip "Not enough cached locks created!"
return 0
fi
# in the case of CMD, LRU_SIZE_B != $NR in most of cases
LVF=$(($MAX_HRS * 60 * 60 * $LIMIT / $SLEEP))
LRU_SIZE_B=$LRU_SIZE
- log "make client drop locks $LVF times faster so that ${SLEEP}s is enough to cancel $LRU_SIZE_B lock(s)"
+ log "make client drop locks $LVF times faster so that ${SLEEP}s is enough to cancel $LRU_SIZE lock(s)"
OLD_LVF=`cat $NSDIR/pool/lock_volume_factor`
echo "$LVF" > $NSDIR/pool/lock_volume_factor
log "sleep for $((SLEEP+SLEEP_ADD))s"
[ $LRU_SIZE_B -gt $LRU_SIZE_A ] || {
error "No locks dropped in "$((SLEEP+SLEEP_ADD))"s. LRU size: $LRU_SIZE_A"
- lru_resize_enable
unlinkmany $DIR/$tdir/f $NR
return
}
log "Dropped "$((LRU_SIZE_B-LRU_SIZE_A))" locks in "$((SLEEP+SLEEP_ADD))"s"
- lru_resize_enable
log "unlink $NR files at $DIR/$tdir"
unlinkmany $DIR/$tdir/f $NR
}
run_test 124a "lru resize ======================================="
-set_lru_size() {
- NS=$1
- SIZE=$2
- test "x$NS" = "x" && NS="mdc"
- test "x$SIZE" = "x" && SIZE="0"
- test $SIZE -lt 0 && SIZE="0"
- test $SIZE -gt 0 && ACTION="disabled" || ACTION="enabled"
- for d in `find $LPROC/ldlm/namespaces | grep $NS`; do
- if test -f $d/lru_size; then
- log "$(basename $d):"
- log " lru resize $ACTION"
- log " lru_size=$SIZE"
- echo $SIZE > $d/lru_size
- fi
- done
-}
-
-get_lru_size() {
- NS=$1
- test "x$NS" = "x" && NS="mdc"
- for d in `find $LPROC/ldlm/namespaces | grep $NS`; do
- if test -f $d/lru_size; then
- log "$(basename $d):"
- log " lru_size=$(cat $d/lru_size)"
- fi
- done
-}
-
test_124b() {
[ -z "`grep lru_resize $LPROC/mdc/*/connect_flags`" ] && \
skip "no lru resize on server" && return 0
+ # even for cmd no matter what metadata namespace to use for getting
+ # the limit, we use appropriate.
NSDIR=`find $LPROC/ldlm/namespaces | grep mdc | head -1`
LIMIT=`cat $NSDIR/pool/limit`
- NR_CPU=$(awk '/processor/' /proc/cpuinfo | wc -l)
- # 100 locks here is default value for non-shrinkable lru as well
- # as the order to switch to static lru managing policy
- # define LDLM_DEFAULT_LRU_SIZE (100 * num_online_cpus())
- LDLM_DEFAULT_LRU_SIZE=$((100 * NR_CPU))
-
- NR=$((LIMIT-(LIMIT/3)))
- log "starting lru resize disable cycle"
- set_lru_size "mdc-" $LDLM_DEFAULT_LRU_SIZE
-
+ NR=$(($(default_lru_size)*20))
+ if [ $NR -gt $LIMIT ]; then
+ NR=$LIMIT
+ fi
+ lru_resize_disable mdc
mkdir -p $DIR/$tdir/disable_lru_resize ||
- error "failed to create $DIR/$tdir/disable_lru_resize"
+ error "failed to create $DIR/$tdir/disable_lru_resize"
createmany -o $DIR/$tdir/disable_lru_resize/f $NR
log "doing ls -la $DIR/$tdir/disable_lru_resize 3 times"
+ cancel_lru_locks mdc
stime=`date +%s`
- ls -la $DIR/$tdir/disable_lru_resize > /dev/null
- ls -la $DIR/$tdir/disable_lru_resize > /dev/null
- ls -la $DIR/$tdir/disable_lru_resize > /dev/null
+ PID=""
+ ls -la $DIR/$tdir/disable_lru_resize > /dev/null &
+ PID="$PID $!"
+ sleep 2
+ ls -la $DIR/$tdir/disable_lru_resize > /dev/null &
+ PID="$PID $!"
+ sleep 2
+ ls -la $DIR/$tdir/disable_lru_resize > /dev/null &
+ PID="$PID $!"
+ wait $PID
etime=`date +%s`
nolruresize_delta=$((etime-stime))
log "ls -la time: $nolruresize_delta seconds"
- get_lru_size "mdc-"
-
- log "starting lru resize enable cycle"
- mkdir -p $DIR/$tdir/enable_lru_resize ||
- error "failed to create $DIR/$tdir/enable_lru_resize"
+ log "lru_size = $(cat $NSDIR/lru_size)"
+ unlinkmany $DIR/$tdir/disable_lru_resize/f $NR
- # 0 locks means here flush lru and switch to lru resize policy
- set_lru_size "mdc-" 0
+ lru_resize_enable mdc
+ mkdir -p $DIR/$tdir/enable_lru_resize ||
+ error "failed to create $DIR/$tdir/enable_lru_resize"
createmany -o $DIR/$tdir/enable_lru_resize/f $NR
log "doing ls -la $DIR/$tdir/enable_lru_resize 3 times"
+ cancel_lru_locks mdc
stime=`date +%s`
- ls -la $DIR/$tdir/enable_lru_resize > /dev/null
- ls -la $DIR/$tdir/enable_lru_resize > /dev/null
- ls -la $DIR/$tdir/enable_lru_resize > /dev/null
+ PID=""
+ ls -la $DIR/$tdir/enable_lru_resize > /dev/null &
+ PID="$PID $!"
+ sleep 2
+ ls -la $DIR/$tdir/enable_lru_resize > /dev/null &
+ PID="$PID $!"
+ sleep 2
+ ls -la $DIR/$tdir/enable_lru_resize > /dev/null &
+ PID="$PID $!"
+ wait $PID
etime=`date +%s`
lruresize_delta=$((etime-stime))
log "ls -la time: $lruresize_delta seconds"
- get_lru_size "mdc-"
+ log "lru_size = $(cat $NSDIR/lru_size)"
- if test $lruresize_delta -gt $nolruresize_delta; then
+ if [ $lruresize_delta -gt $nolruresize_delta ]; then
log "ls -la is $(((lruresize_delta - $nolruresize_delta) * 100 / $nolruresize_delta))% slower with lru resize enabled"
- elif test $nolruresize_delta -gt $lruresize_delta; then
+ elif [ $nolruresize_delta -gt $lruresize_delta ]; then
log "ls -la is $(((nolruresize_delta - $lruresize_delta) * 100 / $nolruresize_delta))% faster with lru resize enabled"
else
log "lru resize performs the same with no lru resize"
fi
+ unlinkmany $DIR/$tdir/enable_lru_resize/f $NR
}
run_test 124b "lru resize (performance test) ======================="