9ns: Add fs_files and tree_files
[akaros.git] / kern / kfs / lockprov.sh
1 #!/bin/bash
2
3 # will run lock_test with whatever arguments are passed in.  default arguments
4 # are -wMAX_VCORES and -l10000.
5
6 # TODO: take a param up to MAXVC for how many cores we preempt per loop
7 # TODO: make a program that does the preemption, instead of the script.  it
8 # takes around 2ms to spawn, run, and wait on a program, which messes with the
9 # timing.  When we do this, pull in the vcore shuffling code from prov.c and
10 # have that be an option.
11 # TODO: have better options for the two preempt styles (periodic, vs total)
12 #
13 # Run this from looper.sh for multiple runs.
14
15 if [[ $# -lt 2 ]]
16 then
17         echo Usage: $0 PREEMPT_DELAY_USEC ARGS_FOR_LOCK_TEST
18         exit
19 fi
20
21 PREEMPT_DELAY=$1
22
23 shift
24
25 # for suppressing output later (no /dev/null, and also append doesn't work)
26 echo "" >> tmpfile
27
28 # retval of max_vcores is the value
29 max_vcores
30 MAXVC=$?
31 # pth_test exists to hog the machine
32 pthread_test 100 999999999 $MAXVC >> tmpfile 2>&1 &
33 PTHPID=$!
34 echo Launch pth_test, pid was $PTHPID
35
36 # if arguments, like -w are repeated, the second one is used
37 lock_test -w $MAXVC -l 10000 $@ &
38 LOCKPID=$!
39 echo Launch lock_test, pid was $LOCKPID
40
41 # while lock_test is still alive, we preempt every so often, then give it back.
42 # using the retval of prov -p$LOCKPID to tell us if lock_test is around
43 RET=0
44 INC=0
45
46 # This is the preempt and never return, hoping to catch deadlocks
47 prov -tc -p$LOCKPID -m >> tmpfile 2>&1
48
49 usleep $PREEMPT_DELAY
50
51 prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
52 prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
53
54 # giving it vc3, which it already has.  this is just a test on process existence
55 while [ $RET -eq 0 ]; do
56         prov -tc -p$LOCKPID -v3 >> tmpfile 2>&1
57         RET=$?
58         usleep $PREEMPT_DELAY
59 done
60
61 ## This is the preempt, return, preempt return cycle
62 #while [ $RET -eq 0 ]; do
63 #       prov -tc -p$LOCKPID -m >> tmpfile 2>&1
64 #       RET=$?
65 #
66 #       usleep $PREEMPT_DELAY
67 #
68 #       prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
69 #       prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
70 #
71 #       # the extra preempts here are to make us wait longer, to see gaps where we
72 #       # "locked up" more clearly.
73 #       usleep $PREEMPT_DELAY
74 #       usleep $PREEMPT_DELAY
75 #       usleep $PREEMPT_DELAY
76 #       usleep $PREEMPT_DELAY
77 #       usleep $PREEMPT_DELAY
78 #
79 #       let INC=$INC+1
80 #done
81
82 ## This is the 'run for a bit, preempt a lot just once, then return all style
83 #prov -tc -p$LOCKPID -m >> tmpfile 2>&1
84 #usleep $PREEMPT_DELAY
85 #prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
86 #prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
87 #prov -tc -p$PTHPID -v3 >> tmpfile 2>&1
88 #prov -tc -p$PTHPID -v4 >> tmpfile 2>&1
89 #prov -tc -p$PTHPID -v5 >> tmpfile 2>&1
90 #prov -tc -p$PTHPID -v6 >> tmpfile 2>&1
91 #prov -tc -p$PTHPID -v7 >> tmpfile 2>&1
92 #prov -tc -p$PTHPID -v8 >> tmpfile 2>&1
93 #prov -tc -p$PTHPID -v9 >> tmpfile 2>&1
94 #usleep $PREEMPT_DELAY
95 #prov -tc -p$LOCKPID -m >> tmpfile 2>&1
96 #
97 #while [ $RET -eq 0 ]; do
98 #       prov -tc -p$LOCKPID -m >> tmpfile 2>&1
99 #       RET=$?
100 #       usleep $PREEMPT_DELAY
101 #done
102
103 echo All done, killing pth_test.  Did $INC prov-preempt loops.
104 kill -9 $PTHPID