commit racer scripts
authorErez Zadok <ezk@cs.sunysb.edu>
Mon, 18 Apr 2022 21:14:54 +0000 (17:14 -0400)
committerErez Zadok <ezk@cs.sunysb.edu>
Mon, 18 Apr 2022 21:14:54 +0000 (17:14 -0400)
racer/dir_create.sh [new file with mode: 0755]
racer/file_concat.sh [new file with mode: 0755]
racer/file_create.sh [new file with mode: 0755]
racer/file_link.sh [new file with mode: 0755]
racer/file_list.sh [new file with mode: 0755]
racer/file_rename.sh [new file with mode: 0755]
racer/file_rm.sh [new file with mode: 0755]
racer/file_symlink.sh [new file with mode: 0755]
racer/racer-fsl.sh [new file with mode: 0755]
racer/racer.sh [new file with mode: 0755]

diff --git a/racer/dir_create.sh b/racer/dir_create.sh
new file mode 100755 (executable)
index 0000000..d4858b3
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+create(){
+    echo "asdf" > "$DIR/$file/$file/$file"
+    #echo -n "d"
+}
+
+cleanup() {
+       echo "mkdir $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    mkdir -p "$DIR/$file/$file/" 2> /dev/null
+    create 2> /dev/null
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 1000 ]; then
+       echo "mkdir $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_concat.sh b/racer/file_concat.sh
new file mode 100755 (executable)
index 0000000..e1c35b9
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+concat(){
+    cat "$DIR/$file" >> "$DIR/$new_file"
+    cat "$DIR/$file/$file/$file" >> "$DIR/$new_file"
+    #echo -n "C"
+}
+
+cleanup() {
+       echo "concat $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    new_file=$((RANDOM % MAX_FILES))
+    concat 2> /dev/null
+    COUNT=$((COUNT + 2))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 1000 ]; then
+       echo "concat $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_create.sh b/racer/file_create.sh
new file mode 100755 (executable)
index 0000000..8d85081
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+SIZE=${SIZE:-$((256 * 1024))}
+
+NUM_CREATED=0
+
+create() {
+    CHUNKSIZE=$(((RANDOM % 8) + 16))
+    CHUNKS=$((RANDOM * SIZE / 32768 / $CHUNKSIZE))
+    NUM_CREATED=$((NUM_CREATED + 1))
+    dd if=/dev/zero of="$DIR/$file" bs=$CHUNKSIZE count=$CHUNKS
+    #echo -n "f"
+}
+
+cleanup() {
+       echo "write $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    create 2> /dev/null
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 100 ]; then
+       echo "write $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_link.sh b/racer/file_link.sh
new file mode 100755 (executable)
index 0000000..fe4cc51
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+cleanup() {
+       echo "link $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    new_file=$((RANDOM % MAX_FILES))
+    ln $file "$DIR/$new_file" 2> /dev/null
+    #echo -n "l"
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 1000 ]; then
+       echo "link $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_list.sh b/racer/file_list.sh
new file mode 100755 (executable)
index 0000000..bece657
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+cleanup() {
+       echo "ls -R $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    ls -R "$DIR/" > /dev/null 2> /dev/null &
+    #echo -n "L"
+
+    wait
+    sleep 1
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 20 ]; then
+       echo "ls -R $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_rename.sh b/racer/file_rename.sh
new file mode 100755 (executable)
index 0000000..293471c
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+cleanup() {
+       echo "rename $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    new_file=$((RANDOM % MAX_FILES))
+    mv "$DIR/$file" "$DIR/$new_file" 2> /dev/null
+    #echo -n "n"
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 1000 ]; then
+       echo "rename $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_rm.sh b/racer/file_rm.sh
new file mode 100755 (executable)
index 0000000..4cc2d9c
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+cleanup() {
+       echo "rm -r $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    rm -rf "$DIR/$file" 2> /dev/null
+    #echo -n "u"
+    sleep 1
+    COUNT=$((COUNT + 1))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 20 ]; then
+       echo "rm -r $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/file_symlink.sh b/racer/file_symlink.sh
new file mode 100755 (executable)
index 0000000..b5bd7ba
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+PRT_INTVL=${PRT_INTVL:-10}
+
+DIR=$1
+MAX_FILES=$2
+
+cleanup() {
+       echo "symlink $COUNT ops"
+}
+
+trap cleanup EXIT
+
+LAST_TIME=$SECONDS
+COUNT=0
+LAST_COUNT=0
+while /bin/true ; do 
+    file=$((RANDOM % MAX_FILES))
+    new_file=$((RANDOM % MAX_FILES))
+    ln -s $file "$DIR/$new_file" 2> /dev/null
+    ln -s $file/$file/$file "$DIR/$new_file" 2> /dev/null
+    #echo -n "s"
+    COUNT=$((COUNT + 2))
+    if [ $((SECONDS - LAST_TIME)) -gt $PRT_INTVL -o $LAST_COUNT -gt 1000 ]; then
+       echo "symlink $COUNT ops"
+       LAST_COUNT=0
+       LAST_TIME=$SECONDS
+    fi
+done
diff --git a/racer/racer-fsl.sh b/racer/racer-fsl.sh
new file mode 100755 (executable)
index 0000000..876800e
--- /dev/null
@@ -0,0 +1,141 @@
+#!/bin/bash
+
+MAX_FILES=${MAX_FILES:-20}
+DIR=${DIR:-$1}
+CLEANUP_WAIT=${CLEANUP_WAIT:-100}
+CHECK_INTVL=${CHECK_INTVL:-5}
+
+DURATION=${DURATION:-$2}
+DURATION=${DURATION:-$((60*5))}
+export PRT_INTVL=${PRT_INTVL:-10}
+
+NUM_THREADS=${NUM_THREADS:-$3}
+NUM_CPUS=$(grep -c '^processor' /proc/cpuinfo)
+[ $NUM_CPUS -lt 1 ] && NUM_CPUS=1
+NUM_THREADS=${NUM_THREADS:-$((NUM_CPUS * 2))}
+
+PROGNAME=`basename $0`
+
+if [ -z "$DIR" ]; then
+       echo "usage: $PROGNAME {dir} [duration] [num_threads]" 1>&2
+       exit 1
+fi
+
+if [ -e "$DIR" -a ! -d "$DIR" ]; then
+       echo "$0: '$DIR' and '`basename $DIR`' are not directories"
+       exit 1
+fi
+
+if [ ! -d "$DIR" ] && ! mkdir "$DIR"; then
+       echo "$PROGNAME: FAIL: error creating '$DIR'"
+       exit 1
+fi
+
+PROGLIST="file_create.sh dir_create.sh file_rm.sh file_rename.sh file_link.sh \
+         file_symlink.sh file_list.sh file_concat.sh"
+
+# problems: rename + dir_create: ebusy umount lower
+# problems: rename + create/concat: oops umount lower
+# problems: rename + dir_create + concat: ebuzy umount lower
+
+# when all are on, we get dozens of extra BC refs; use rwsem=write in rename
+
+PROGLIST=""
+PROGLIST="$PROGLIST file_rename.sh"
+PROGLIST="$PROGLIST file_rm.sh"
+PROGLIST="$PROGLIST file_list.sh"
+PROGLIST="$PROGLIST file_create.sh"
+PROGLIST="$PROGLIST file_concat.sh"
+PROGLIST="$PROGLIST dir_create.sh"
+PROGLIST="$PROGLIST file_symlink.sh"
+PROGLIST="$PROGLIST file_link.sh"
+
+
+echo PROGLIST:$PROGLIST;sleep 1
+
+racer_running()
+{
+       RUNNING=1
+       if [ "$1" = "-r" ]; then # report if running
+               SHOW_RUNNING=echo
+               SHOW_STOPPED=:
+               shift
+       else
+               SHOW_RUNNING=:
+               SHOW_STOPPED=echo
+       fi
+
+       for PROG in $PROGLIST; do
+               killall -0 -q $PROG && RUNNING=0 &&
+                       $SHOW_RUNNING "$PROGNAME: $PROG still running" || \
+                       $SHOW_STOPPED "$PROGNAME: $PROG no longer running"
+       done
+
+       return $RUNNING
+}
+
+racer_cleanup()
+{
+       echo "$PROGNAME: cleaning up"
+       for PROG in $PROGLIST; do
+               killall -q $PROG
+       done
+       trap 0
+}
+
+echo "$PROGNAME: run for ${DURATION}s with $NUM_THREADS threads. CTRL-C to exit"
+trap racer_cleanup 2
+
+cd `dirname $0`
+for N in `seq 1 $NUM_THREADS`; do
+       for PROG in $PROGLIST; do
+               eval ./$PROG "$DIR" $MAX_FILES $N 2>/dev/null &
+       done
+done
+
+RAN=0
+while racer_running && [ $RAN -lt $DURATION ]; do
+       sleep $CHECK_INTVL
+       RAN=$((RAN + CHECK_INTVL))
+       echo "$PROGNAME: running ${RAN}s (of ${DURATION}s) at `date` (`date +%s`)"
+done
+racer_cleanup
+
+# Check our to see whether our test DIR is still available.
+df "$DIR"
+RC=$?
+if [ $RC -eq 0 ]; then
+       echo "$PROGNAME: we survived for $RAN seconds."
+else
+       echo "$PROGNAME: FAIL: 'df $DIR' failed with $RC."
+       exit $RC
+fi
+
+WAITED=0
+while racer_running -r && [ $WAITED -lt $CLEANUP_WAIT ]; do
+       sleep $CHECK_INTVL
+       WAITED=$((WAITED + CHECK_INTVL))
+done
+if [ $WAITED -ge $CLEANUP_WAIT ]; then
+       echo "$PROGNAME: FAIL: processes still running after ${CLEANUP_WAIT}s"
+       exit 2
+fi
+/bin/rm -f /var/tmp/s.out
+STRACE="strace -e file -o /var/tmp/s.out.$$"
+$STRACE rm -rf "$DIR"
+RC=$?
+if [ $RC -eq 0 ]; then
+       echo "$PROGNAME: we cleaned up '$DIR' successfully."
+else
+       echo "$PROGNAME: FAIL: 'rm -rf $DIR' failed with $RC.\a"
+       exit $RC
+       sync
+       echo "SLEEP 10... then try again...\a"
+       sleep 10
+       sync
+       rm -rf "$DIR"
+       RC=$?
+       echo RC=$RC
+fi
+
+exit $RC
diff --git a/racer/racer.sh b/racer/racer.sh
new file mode 100755 (executable)
index 0000000..97736a9
--- /dev/null
@@ -0,0 +1,112 @@
+#!/bin/bash
+
+MAX_FILES=${MAX_FILES:-20}
+DIR=${DIR:-$1}
+CLEANUP_WAIT=${CLEANUP_WAIT:-100}
+CHECK_INTVL=${CHECK_INTVL:-5}
+
+DURATION=${DURATION:-$2}
+DURATION=${DURATION:-$((60*5))}
+export PRT_INTVL=${PRT_INTVL:-10}
+
+NUM_THREADS=${NUM_THREADS:-$3}
+NUM_CPUS=$(grep -c '^processor' /proc/cpuinfo)
+[ $NUM_CPUS -lt 1 ] && NUM_CPUS=1
+NUM_THREADS=${NUM_THREADS:-$((NUM_CPUS * 2))}
+
+PROGNAME=`basename $0`
+
+if [ -z "$DIR" ]; then
+       echo "usage: $PROGNAME {dir} [duration] [num_threads]" 1>&2
+       exit 1
+fi
+
+if [ -e "$DIR" -a ! -d "$DIR" ]; then
+       echo "$0: '$DIR' and '`basename $DIR`' are not directories"
+       exit 1
+fi
+
+if [ ! -d "$DIR" ] && ! mkdir "$DIR"; then
+       echo "$PROGNAME: FAIL: error creating '$DIR'"
+       exit 1
+fi
+
+PROGLIST="file_create.sh dir_create.sh file_rm.sh file_rename.sh file_link.sh \
+         file_symlink.sh file_list.sh file_concat.sh"
+
+racer_running()
+{
+       RUNNING=1
+       if [ "$1" = "-r" ]; then # report if running
+               SHOW_RUNNING=echo
+               SHOW_STOPPED=:
+               shift
+       else
+               SHOW_RUNNING=:
+               SHOW_STOPPED=echo
+       fi
+
+       for PROG in $PROGLIST; do
+               killall -0 -q $PROG && RUNNING=0 &&
+                       $SHOW_RUNNING "$PROGNAME: $PROG still running" || \
+                       $SHOW_STOPPED "$PROGNAME: $PROG no longer running"
+       done
+       
+       return $RUNNING
+}
+
+racer_cleanup()
+{
+       echo "$PROGNAME: cleaning up"
+       for PROG in $PROGLIST; do
+               killall -q $PROG
+       done
+       trap 0
+}
+
+echo "$PROGNAME: run for ${DURATION}s with $NUM_THREADS threads. CTRL-C to exit"
+trap racer_cleanup 2
+
+cd `dirname $0`
+for N in `seq 1 $NUM_THREADS`; do
+       for PROG in $PROGLIST; do
+               eval ./$PROG "$DIR" $MAX_FILES $N 2>/dev/null &
+       done
+done
+
+RAN=0
+while racer_running && [ $RAN -lt $DURATION ]; do
+       sleep $CHECK_INTVL
+       RAN=$((RAN + CHECK_INTVL))
+       echo "$PROGNAME: running ${RAN}s at `date` (`date +%s`)"
+done
+racer_cleanup
+
+# Check our to see whether our test DIR is still available.
+df "$DIR"
+RC=$?
+if [ $RC -eq 0 ]; then
+       echo "$PROGNAME: we survived for $RAN seconds."
+else
+       echo "$PROGNAME: FAIL: 'df $DIR' failed with $RC."
+       exit $RC
+fi
+
+WAITED=0
+while racer_running -r && [ $WAITED -lt $CLEANUP_WAIT ]; do
+       sleep $CHECK_INTVL
+       WAITED=$((WAITED + CHECK_INTVL))
+done
+if [ $WAITED -ge $CLEANUP_WAIT ]; then
+       echo "$PROGNAME: FAIL: processes still running after ${CLEANUP_WAIT}s"
+       exit 2
+fi
+
+rm -rf "$DIR"
+RC=$?
+if [ $RC -eq 0 ]; then
+       echo "$PROGNAME: we cleaned up '$DIR' successfully."
+else
+       echo "$PROGNAME: FAIL: 'rm -rf $DIR' failed with $RC."
+fi
+exit $RC