Adds lock_test
[akaros.git] / kern / kfs / lockprov.sh
1 #!/bin/ash
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
10
11 if [ $# -lt 2 ]
12 then
13         echo Usage: $0 PREEMPT_DELAY_USEC ARGS_FOR_LOCK_TEST
14         exit
15 fi
16
17 PREEMPT_DELAY=$1
18 shift
19
20 # for suppressing output later (no /dev/null, and also append doesn't work)
21 echo "" >> tmpfile
22
23 # retval of max_vcores is the value
24 max_vcores
25 MAXVC=$?
26 # pth_test exists to hog the machine
27 pthread_test 100 999999999999999 $MAXVC >> tmpfile 2>&1 &
28 PTHPID=$!
29 echo Launch pth_test, pid was $PTHPID
30
31 # if arguments, like -w are repeated, the second one is used
32 lock_test -w $MAXVC -l 10000 $@ &
33 LOCKPID=$!
34 echo Launch lock_test, pid was $LOCKPID
35
36 # while lock_test is still alive, we preempt every so often, then give it back.
37 # using the retval of prov -p$LOCKPID to tell us if lock_test is around
38 RET=0
39 INC=0
40 while [ $RET -eq 0 ]; do
41         prov -tc -p$LOCKPID -m >> tmpfile 2>&1
42         RET=$?
43
44         usleep $PREEMPT_DELAY
45         
46         prov -tc -p$PTHPID -v1 >> tmpfile 2>&1
47         #prov -tc -p$PTHPID -v2 >> tmpfile 2>&1
48
49         usleep $PREEMPT_DELAY
50
51         let INC=$INC+1
52 done
53
54 echo All done, killing pth_test.  Did $INC prov-preempt loops.
55 kill -9 $PTHPID