repro 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. #!/bin/bash
  2. # Reproduce the PRAC experiments from our paper:
  3. # Sajin Sasy, Adithya Vadapalli, Ian Goldberg. PRAC: Round-Efficient
  4. # 3-Party MPC for Dynamic Data Structures
  5. # cd into the directory containing this script (from the bash faq 028)
  6. if [[ $BASH_SOURCE = */* ]]; then
  7. cd -- "${BASH_SOURCE%/*}/" || exit
  8. fi
  9. # Allow running only subsets of the experiment suite. Valid values are
  10. # "test", "all", "none". ("none" is useful if you just want to re-parse
  11. # the output of existing logs.) You can also say "single" followed by
  12. # all the arguments to "run" (below) to run a single experiment; for
  13. # example:
  14. # ./repro single read 20 1
  15. if [ "$1" = "" ]; then
  16. whichexps="test"
  17. else
  18. whichexps="$1"
  19. fi
  20. # The number of operations per run; the graphs in the paper use 3
  21. if [ "$whichexps" = "single" -o "$2" = "" ]; then
  22. # If there's an explicit experiment on the command line, don't read
  23. # the next argument as the number of operations. $numops will be
  24. # ignored, anyway, since it will be specified as part of the
  25. # command.
  26. numiters=3
  27. else
  28. numiters="$2"
  29. fi
  30. # The maximum amount of memory to use (in GB). Set the environment
  31. # variable PRAC_MAXGB to increase it beyond 16 (don't set it lower
  32. # than 16).
  33. if [ "$PRAC_MAXGB" = "" ]; then
  34. maxgb=16
  35. elif [ "$PRAC_MAXGB" -gt 16 ]; then
  36. maxgb=$PRAC_MAXGB
  37. else
  38. maxgb=16
  39. fi
  40. logname='log'
  41. # Run one experiment
  42. # The arguments are just the arguments to run-experiment
  43. run() {
  44. now=`date`
  45. echo "$now: Running $* ..."
  46. logfile="prac_${logname}.out${LOGSUFFIX}"
  47. mkdir -p data
  48. echo "Max GB: $maxgb" >> data/$logfile
  49. ../docker/run-experiment $* >> data/$logfile
  50. }
  51. # Parse the output logs. We run this in the docker in case you don't
  52. # have perl installed on the host.
  53. # Arguments: a list of logfiles
  54. parse() {
  55. if [ "$RAMEN_PARSE_HOST" = "1" ]; then
  56. ./parse_logs $*
  57. else
  58. cat $* | docker exec -w /root/prac/repro -i prac_p0 ./parse_logs
  59. fi
  60. }
  61. # A very small kick-the-tires test to ensure everything compiled and
  62. # built properly
  63. if [ "$whichexps" = "test" ]; then
  64. echo "Running test experiment..."
  65. logname='test'
  66. run -o read 16 1
  67. echo
  68. echo "# Test output"
  69. echo
  70. parse data/prac_test.out${LOGSUFFIX}
  71. echo
  72. echo "# End test output"
  73. echo
  74. exit
  75. fi
  76. # Be able to run a single experiment specified on the command line
  77. if [ "$whichexps" = "single" ]; then
  78. echo "Running single experiment..."
  79. shift
  80. run $*
  81. exit
  82. fi
  83. now=`date`
  84. echo "$now: Starting experiments"
  85. if [ "$whichexps" = "fig6" -o "$whichexps" = "all" ]; then
  86. echo "Running Figure 6 experiments..."
  87. for iter in $(seq 1 $numiters); do
  88. # Figure 6(a)
  89. logname='fig6a'
  90. for num in 16 32 64 128 256 512 1024 2048; do
  91. run -p r20:$num
  92. run read 20 $num
  93. done
  94. # Figure 6(b,c)
  95. logname='fig6bc'
  96. for size in 16 18 20 22 24 26 28 30; do
  97. run -p r${size}:10
  98. run read $size 10
  99. done
  100. done
  101. fi
  102. if [ "$whichexps" = "fig7" -o "$whichexps" = "all" ]; then
  103. echo "Running Figure 7 experiments..."
  104. for iter in $(seq 1 $numiters); do
  105. # Figure 7(a)
  106. logname='fig7a'
  107. for num in 4 8 16 32 64; do
  108. run -p i19:$num c:$((num*20))
  109. run bsearch 20 $num
  110. done
  111. for num in 4 8 16 32 64; do
  112. run -p m:$((num*20)) r20:$((num*20)) c:$((num*20))
  113. run bbsearch 20 $num
  114. done
  115. # Figure 7(b,c)
  116. logname='fig7bc'
  117. for size in 16 18 20 22 24 26 28; do
  118. run -p i$((size-1)):1 c:${size}
  119. run bsearch $size 1
  120. done
  121. for size in 16 18 20 22 24 26 28; do
  122. run -p m:${size} r${size}:${size} c:${size}
  123. run bbsearch $size 1
  124. done
  125. done
  126. fi
  127. if [ "$whichexps" = "fig8" -o "$whichexps" = "all" ]; then
  128. echo "Running Figure 8 experiments..."
  129. for iter in $(seq 1 $numiters); do
  130. # Figure 8(a)
  131. logname='fig8a'
  132. for num in 4 8 16 32; do
  133. run -p m:$((num*57)) a:$((num*19)) s:$((num*18)) i19.3:${num} c:$((num*38))
  134. run heap -m 20 -d 20 -i 0 -e ${num} -opt 1 -s 0
  135. done
  136. for num in 4 8 16 32; do
  137. run -p m:$((num*57)) a:$((num*19)) s:$((num*18)) r20:$((num*108)) c:$((num*38))
  138. run heap -m 20 -d 20 -i 0 -e ${num} -opt 0 -s 0
  139. done
  140. # Figure 8(b,c)
  141. logname='fig8bc'
  142. for size in 16 18 20 22 24 26 28 30; do
  143. run -p m:$((size*3-3)) a:$((size-1)) s:$((size-2)) i$((size-1)).3:1 c:$((size*2-2))
  144. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 1 -s 0
  145. done
  146. for size in 16 18 20 22 24 26 28 30; do
  147. run -p m:$((size*3-3)) a:$((size-1)) s:$((size-2)) r${size}:$((size*6-12)) c:$((size*2-2))
  148. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 0 -s 0
  149. done
  150. done
  151. fi
  152. if [ "$whichexps" = "tab3" -o "$whichexps" = "all" ]; then
  153. echo "Running Table 3 experiments..."
  154. for iter in $(seq 1 $numiters); do
  155. # Table 3
  156. logname='tab3'
  157. for size in 16 20 24; do
  158. run -p m:$((size*2-1)) r5:1 i4:1 c:5
  159. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 1 -s 0
  160. run -p m:$((size-1)) c:$((size-1))
  161. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 0 -s 0
  162. done
  163. done
  164. fi
  165. if [ "$whichexps" = "tab4" -o "$whichexps" = "all" ]; then
  166. echo "Running Table 4 experiments..."
  167. for iter in $(seq 1 $numiters); do
  168. # Table 4
  169. logname='tab4'
  170. run -p a:8 s:171 r17:28 c:50
  171. run avl -m 16 -i 1 -e 0 -opt 1 -s 0
  172. run -p a:10 s:201 r21:33 c:60
  173. run avl -m 20 -i 1 -e 0 -opt 1 -s 0
  174. run -p a:12 s:237 r25:39 c:72
  175. run avl -m 24 -i 1 -e 0 -opt 1 -s 0
  176. run -p m:1 a:30 s:867 r16:72 r16.2:2 c:72
  177. run avl -m 16 -i 0 -e 1 -opt 1 -s 0
  178. run -p m:1 a:36 s:1047 r20:87 r20.2:2 c:87
  179. run avl -m 20 -i 0 -e 1 -opt 1 -s 0
  180. run -p m:1 a:43 s:1263 r24:105 r24.2:2 c:105
  181. run avl -m 24 -i 0 -e 1 -opt 1 -s 0
  182. done
  183. fi
  184. now=`date`
  185. echo "$now: Experiments complete"
  186. # If you specified a custom log suffix, you're going to be parsing the
  187. # outputs differently.
  188. if [ "$LOGSUFFIX" = "" ]; then
  189. parse data/*.out > data/prac.dat
  190. echo
  191. echo "# Figure 6(a)"
  192. egrep 'PRACOnln read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  193. echo
  194. egrep 'PRACTotl read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  195. echo
  196. echo "# Figure 6(b)"
  197. egrep 'PRACOnln read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  198. echo
  199. egrep 'PRACTotl read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  200. echo
  201. echo "# Figure 6(c)"
  202. egrep 'PRACOnln read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  203. echo
  204. egrep 'PRACTotl read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  205. echo
  206. echo "# Figure 7(a)"
  207. egrep 'BasicPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  208. echo
  209. egrep 'BasicPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  210. echo
  211. egrep 'OptPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  212. echo
  213. egrep 'OptPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  214. echo
  215. echo "# Figure 7(b)"
  216. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  217. echo
  218. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  219. echo
  220. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  221. echo
  222. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  223. echo
  224. echo "# Figure 7(c)"
  225. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  226. echo
  227. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  228. echo
  229. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  230. echo
  231. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  232. echo
  233. echo "# Figure 8(a)"
  234. egrep 'BasicPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  235. echo
  236. egrep 'BasicPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  237. echo
  238. egrep 'OptPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  239. echo
  240. egrep 'OptPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  241. echo
  242. echo "# Figure 8(b)"
  243. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  244. echo
  245. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  246. echo
  247. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  248. echo
  249. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  250. echo
  251. echo "# Figure 8(c)"
  252. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  253. echo
  254. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  255. echo
  256. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  257. echo
  258. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  259. echo
  260. echo "# Table 3"
  261. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  262. echo
  263. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  264. echo
  265. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  266. echo
  267. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  268. echo
  269. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  270. echo
  271. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  272. echo
  273. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  274. echo
  275. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  276. echo
  277. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  278. echo
  279. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  280. echo
  281. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  282. echo
  283. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  284. echo
  285. echo "# Table 4"
  286. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  287. echo
  288. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  289. echo
  290. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  291. echo
  292. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  293. echo
  294. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  295. echo
  296. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  297. echo
  298. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  299. echo
  300. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  301. echo
  302. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  303. echo
  304. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  305. echo
  306. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  307. echo
  308. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  309. echo
  310. echo "# End figures"
  311. fi