Contents
Comparisons with other static approaches
We compare below the musketeer to the previous static techniques that we reimplemented. We exercise the different implementations on the benchmarks classic, fast and debian for TSO. In the table, (m) is our tool musketeer. (p) is the delay set analysis of Pensieve. (v) is the Visual Studio policy. (e) places a fence after each access to shared memory. (n) is the naive method of [19, p. 288], i.e. a fence on each delay.
A short analysis of these results regarding the precision:
- the Visual Studio (unsound in general) would infer 38 fences for memcached against 18 by musketeer (see (V) and (M)).
- The times between musketeer and pensieve are comparable but musketeer is much more precise (see (P) and (M)).
- The method could have appeared too imprecise to be used on larger
programs. We note it is not the case. Indeed,
- we applied musketeer to large programs (e.g. memcached). As Section 2 of the paper shows, the overhead between memcached fenced by musketeer and without fences is very low. Thus musketeer is precise enough to not insert too many fences; otherwise this overhead would be much higher.
- as the table shows, musketeer is the most precise of the sound methods.
program | (m) | (p) | (v) | (e) | (n) | |||||
time | fences | time | fences | time | fences | time | fences | time | fences | |
classic | ||||||||||
dekker | 0.01s | 3 | 0.01s | 16 | <0.01s | 0 | 0.01s | 18 | 0.01s | 16 |
peterson | 0.01s | 2 | 0.01s | 6 | <0.01s | 0 | 0.01s | 10 | 0.01s | 6 |
lamport | 0.01s | 4 | 0.01s | 10 | <0.01s | 0 | 0.01s | 20 | 0.01s | 18 |
szymanski | 0.01s | 4 | 0.01s | 12 | <0.01s | 0 | 0.01s | 12 | 0.01s | 12 |
parker | 0.02s | 3 | 0.02s | 7 | 0.01s | 11 | 0.01s | 21 | 0.01s | 9 |
fast | ||||||||||
Cil | 0.02s | 3 | 0.02s | 5 | 0.01s | 26 | 0.01s | 20 | 0.02s | 13 |
CL | 0.02s | 2 | 0.02s | 8 | 0.02s | 12 | 0.02s | 12 | 0.02s | 10 |
Fif | 0.05s | 2 | 0.05s | 33 | 0.04s | 0 | 0.05s | 28 | 0.05s | 37 |
Lif | 0.04s | 0 | 0.03s | 29 | 0.03s | 0 | 0.03s | 14 | 0.04s | 32 |
Anc | 0.17s | 0 | 0.06s | 44 | 0.05s | 0 | 0.06s | 13 | 0.06s | 48 |
Har | 0.33s | 0 | 0.19s | 71 | 0.18s | 0 | 0.19s | 15 | 0.19s | 94 |
Laz | 0.05s | 0 | 0.04s | 13 | 0.04s | 0 | 0.04s | 3 | 0.04s | 17 |
MS | 0.09s | 0 | 0.05s | 15 | 0.05s | 0 | 0.05s | 3 | 0.05s | 42 |
MS2 | 0.02s | 0 | 0.02s | 12 | 0.02s | 0 | 0.02s | 3 | 0.02s | 18 |
CQs | 0.13s | 0 | 0.12s | 0 | 0.18s | 0 | 0.18s | 0 | 0.12s | 2 |
debian | ||||||||||
memcached | 38.19s | 18 | 0.54s | 124 | 0.51s | 38 | 0.51s | 417 | 0.53s | 173 |
blktrace | 10.55s | 0 | 0.11s | 48 | 0.07s | 31 | 0.06s | 140 | 0.08s | 162 |
clamsmtp | 100.79s | 0 | 0.34s | 0 | 0.06s | 4 | 0.05s | 10 | 0.06s | 2 |
dnshistory | 39.60s | 8 | 0.25s | 211 | 0.14s | 4 | 0.14s | 367 | 0.18s | 70 |
duma | 0.04s | 0 | 0.04s | 2 | 0.04s | 13 | 0.04s | 38 | 0.04s | 1 |
lf tiltdemo | 73.74s | 0 | 0.43s | 12 | 0.09s | 4 | 0.09s | 26 | 0.09s | 11 |
lf regtest | 98.41s | 0 | 0.55s | 16 | 0.10s | 4 | 0.09s | 28 | 0.09s | 11 |
ghostess | 175.29s | 0 | 0.62s | 59 | 0.29s | 4 | 0.29s | 248 | 0.41s | 678 |
lingot | 5.65s | 0 | 0.25s | 12 | 0.21s | 4 | 0.20s | 68 | 0.23s | 89 |
proxsmtp | 211.46s | 0 | 0.45s | 0 | 0.07s | 4 | 0.06s | 10 | 0.06s | 5 |
ptunnel | 115.38s | 6 | 0.34s | 452 | 0.09s | 4 | 0.09s | 111 | 0.24s | 626 |
see | 60.30s | 11 | 0.60s | 268 | 0.30s | 4 | 0.29s | 290 | 0.36s | 33 |
timemachine | 0.62s | 1 | 0.10s | 15 | 0.08s | 11 | 0.08s | 158 | 0.10s | 35 |
weborf | 230.21s | 16 | 0.61s | 0 | 0.17s | 4 | 0.16s | 14 | 0.18s | 39 |