repro 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  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", "fig6", "fig7", "fig8", "fig9", "tab3", "tab4", "all", "none".
  11. # ("none" is useful if you just want to re-parse the output of existing
  12. # logs.) You can also say "single" followed by all the arguments to
  13. # "run" (below) to run a single experiment; for 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 iterations; 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). if you're using NUMA, where different parties don't all
  33. # share the same memory pool, then instead set:
  34. # - PRAC_P0_MAXGB to the max GB of memory to use in each NUMA node, if
  35. # you have at least three NUMA nodes, and each player gets their own
  36. # numa node
  37. # - PRAC_P02_MAXGB to the max GB of memory to use in each NUMA node, if
  38. # you have two numa nodes, and P0 and P2 are in one, and P1 is in the
  39. # other
  40. # P0 and P1 always use the same amount of memory.
  41. # For preprocessing, in the event the total memory usage exceeds 16GB,
  42. # P2's memory usage is no more than 1% of P0's.
  43. # There's about 5 MB overhead when preprocessing.
  44. if [ "$PRAC_P0_MAXGB" != "" ]; then
  45. # Each party uses its own NUMA memory pool
  46. max_preproc_p0_mb=$((PRAC_P0_MAXGB*1000-5))
  47. max_mb=$((PRAC_P0_MAXGB*3000))
  48. elif [ "$PRAC_P02_MAXGB" != "" ]; then
  49. # P0 and P2 share a NUMA memory pool, P1 gets its own
  50. max_preproc_p0_mb=$((PRAC_P02_MAXGB*990-5))
  51. max_mb=$((PRAC_P02_MAXGB*1990))
  52. elif [[ "$PRAC_MAXGB" != "" && "$PRAC_MAXGB" -gt 16 ]]; then
  53. # All parties share one memory pool
  54. max_preproc_p0_mb=$((PRAC_MAXGB*497-5))
  55. max_mb=$((PRAC_MAXGB*1000))
  56. else
  57. # Default to PRAC_MAXGB=16
  58. export PRAC_MAXGB=16
  59. max_preproc_p0_mb=$((PRAC_MAXGB*497-5))
  60. max_mb=$((PRAC_MAXGB*1000))
  61. fi
  62. logname='log'
  63. # Run one experiment
  64. # The arguments are just the arguments to run-experiment
  65. run() {
  66. now=`date`
  67. echo "$now: Running $* ..."
  68. logfile="prac_${logname}.out${LOGSUFFIX}"
  69. mkdir -p data
  70. echo "Max MB: $max_mb" >> data/$logfile
  71. if [ "$PRAC_USE_SSH" = "1" ]; then
  72. ../docker/run-experiment-ssh $* >> data/$logfile
  73. else
  74. ../docker/run-experiment $* >> data/$logfile
  75. fi
  76. }
  77. # Run preprocessing, being careful to not exceed available memory. We
  78. # typically preprocess a bunch of small resources that will easily fit
  79. # in memory, as well as a number of instances of one large resource. We
  80. # create the small resources and as many of the instances of the large
  81. # resource first we can (with -p), and then more batches of instances of
  82. # the large resource (with -a, which means to append the newly created
  83. # resources to the storage file, rather than overwriting old ones).
  84. # Arguments:
  85. # $1: a string (containing embedded whitespace) of the required small
  86. # resources
  87. # $2: the mb required by P0 to create the small resources
  88. # $3: the name of the large resource
  89. # $4: the number of instances of the large resource we want
  90. # $5: the mb required by P0 to create one instance of the large resource
  91. preproc() {
  92. small_mb=$2
  93. large_left=$4
  94. large_mb_each=$5
  95. # the maximum number of instances of the large resource we can
  96. # create along with the small ones
  97. num_large=$(( (max_preproc_p0_mb-small_mb)/large_mb_each ))
  98. if [ $num_large -gt $large_left ]; then
  99. num_large=$large_left
  100. fi
  101. run -p $1 ${3}:${num_large}
  102. large_left=$((large_left-num_large))
  103. # the maximum number of instances of the large resource we can
  104. # create in a batch on their own
  105. max_large_batch=$((max_preproc_p0_mb/large_mb_each))
  106. if [ $max_large_batch = 0 ]; then
  107. echo "Not enough memory"
  108. return
  109. fi
  110. while [ $large_left -gt 0 ]; do
  111. num_large=$large_left
  112. if [ $num_large -gt $max_large_batch ]; then
  113. num_large=$max_large_batch
  114. fi
  115. run -a ${3}:${num_large}
  116. large_left=$((large_left-num_large))
  117. done
  118. }
  119. # The number of MB needed for P0 to create different kinds of resources
  120. # of different sizes
  121. declare -A rMB
  122. rMB=([16]=6 [17]=11 [18]=20 [19]=38 [20]=76 [21]=150 [22]=297 [23]=593 [24]=1182 [25]=2361 [26]=4720 [27]=9440 [28]=18876 [29]=37755 [30]=75500)
  123. declare -A r2MB
  124. r2MB=([16]=9 [18]=32 [20]=125 [22]=494 [24]=1970 [26]=7870 [28]=31470 [30]=125850)
  125. declare -A iMB
  126. iMB=([15]=4 [17]=12 [19]=41 [21]=152 [23]=595 [25]=2364 [27]=9441 [29]=37753)
  127. declare -A i3MB
  128. i3MB=([15]=6 [17]=20 [19]=72 [21]=286 [23]=968 [25]=3955 [27]=15800 [29]=62950)
  129. # Parse the output logs. We run this in the docker in case you don't
  130. # have perl installed on the host.
  131. # Arguments: a list of logfiles
  132. parse() {
  133. if [ "$PRAC_PARSE_HOST" = "1" ]; then
  134. ./parse_logs $*
  135. else
  136. cat $* | docker exec -w /root/prac/repro -i ${PRAC_DOCKER_PREFIX}prac_p0 ./parse_logs
  137. fi
  138. }
  139. # A very small kick-the-tires test to ensure everything compiled and
  140. # built properly
  141. if [ "$whichexps" = "test" ]; then
  142. echo "Running test experiment..."
  143. logname='test'
  144. run -p r16:1
  145. run read 16 1
  146. echo
  147. echo "# Test output"
  148. echo
  149. parse data/prac_test.out${LOGSUFFIX}
  150. echo
  151. echo "# End test output"
  152. echo
  153. exit
  154. fi
  155. # Be able to run a single experiment specified on the command line
  156. if [ "$whichexps" = "single" ]; then
  157. echo "Running single experiment..."
  158. shift
  159. run $*
  160. exit
  161. fi
  162. now=`date`
  163. echo "$now: Starting experiments"
  164. if [ "$whichexps" = "fig6" -o "$whichexps" = "all" ]; then
  165. echo "Running Figure 6 experiments..."
  166. for iter in $(seq 1 $numiters); do
  167. # Figure 6(a)
  168. logname='fig6a'
  169. for num in 16 32 64 128 256 512 1024 2048; do
  170. preproc "" 0 r20 $num 76
  171. run read 20 $num
  172. done
  173. # Figure 6(b,c)
  174. logname='fig6bc'
  175. for size in 16 18 20 22 24 26 28 30; do
  176. if [ "${rMB[$size]}" -lt "$max_preproc_p0_mb" ]; then
  177. preproc "" 0 r${size} 10 ${rMB[$size]}
  178. run read $size 10
  179. fi
  180. done
  181. done
  182. fi
  183. if [ "$whichexps" = "fig7" -o "$whichexps" = "all" ]; then
  184. echo "Running Figure 7 experiments..."
  185. for iter in $(seq 1 $numiters); do
  186. # Figure 7(a)
  187. logname='fig7a'
  188. for num in 4 8 16 32 64; do
  189. preproc "c:$((num*20))" 10 i19 $num 41
  190. run bsearch 20 $num
  191. done
  192. for num in 4 8 16 32 64; do
  193. preproc "m:$((num*20)) c:$((num*20))" 20 r20 $((num*20)) 76
  194. run bbsearch 20 $num
  195. done
  196. # Figure 7(b,c)
  197. logname='fig7bc'
  198. for size in 16 18 20 22 24 26 28 30; do
  199. if [ "${iMB[$((size-1))]}" -lt "$max_preproc_p0_mb" ]; then
  200. preproc "c:${size}" 1 i$((size-1)) 1 ${iMB[$((size-1))]}
  201. run bsearch $size 1
  202. fi
  203. done
  204. for size in 16 18 20 22 24 26 28 30; do
  205. if [ "${rMB[$size]}" -lt "$max_preproc_p0_mb" ]; then
  206. preproc "m:${size} c:${size}" 1 r${size} ${size} ${rMB[$size]}
  207. run bbsearch $size 1
  208. fi
  209. done
  210. done
  211. fi
  212. if [ "$whichexps" = "fig8" -o "$whichexps" = "all" ]; then
  213. echo "Running Figure 8 experiments..."
  214. for iter in $(seq 1 $numiters); do
  215. # Figure 8(a)
  216. logname='fig8a'
  217. for num in 4 8 16 32; do
  218. preproc "m:$((num*57)) a:$(( (num*19+63)/64 )) s:$((num*18)) c:$((num*38))" 35 i19.3 ${num} 68
  219. run heap -m 20 -d 20 -i 0 -e ${num} -opt 1 -s 0
  220. done
  221. for num in 4 8 16 32; do
  222. preproc "m:$((num*57)) a:$(( (num*19+63)/64 )) s:$((num*18)) c:$((num*38))" 35 r20 $((num*108)) 76
  223. run heap -m 20 -d 20 -i 0 -e ${num} -opt 0 -s 0
  224. done
  225. # Figure 8(b,c)
  226. logname='fig8bc'
  227. for size in 16 18 20 22 24 26 28 30; do
  228. if [ "${i3MB[$((size-1))]}" -lt "$max_preproc_p0_mb" ]; then
  229. preproc "m:$((size*3-3)) a:1 s:$((size-2)) c:$((size*2-2))" 3 i$((size-1)).3 1 ${i3MB[$((size-1))]}
  230. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 1 -s 0
  231. fi
  232. done
  233. for size in 16 18 20 22 24 26 28 30; do
  234. if [ "${rMB[$size]}" -lt "$max_preproc_p0_mb" ]; then
  235. preproc "m:$((size*3-3)) a:1 s:$((size-2)) c:$((size*2-2))" 3 r${size} $((size*6-12)) ${rMB[$size]}
  236. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 0 -s 0
  237. fi
  238. done
  239. done
  240. fi
  241. if [ "$whichexps" = "tab3" -o "$whichexps" = "all" ]; then
  242. echo "Running Table 3 experiments..."
  243. for iter in $(seq 1 $numiters); do
  244. # Table 3
  245. logname='tab3'
  246. for size in 16 20 24; do
  247. run -p m:$((size*2-1)) r5:1 i4:1 c:5
  248. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 1 -s 0
  249. run -p m:$((size-1)) c:$((size-1))
  250. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 0 -s 0
  251. done
  252. done
  253. fi
  254. if [ "$whichexps" = "tab4" -o "$whichexps" = "all" ]; then
  255. echo "Running Table 4 experiments..."
  256. for iter in $(seq 1 $numiters); do
  257. # Table 4
  258. logname='tab4'
  259. preproc "a:8 s:171 c:50" 3 r17 28 ${rMB[17]}
  260. run avl -m 16 -i 1 -e 0 -opt 1 -s 0
  261. preproc "a:10 s:201 c:60" 3 r21 33 ${rMB[21]}
  262. run avl -m 20 -i 1 -e 0 -opt 1 -s 0
  263. preproc "a:12 s:237 c:72" 3 r25 39 ${rMB[25]}
  264. run avl -m 24 -i 1 -e 0 -opt 1 -s 0
  265. preproc "m:1 a:30 s:867 r16.2:2 c:72" 26 r16 72 ${rMB[16]}
  266. run avl -m 16 -i 0 -e 1 -opt 1 -s 0
  267. preproc "m:1 a:36 s:1047 r20.2:2 c:87" 263 r20 87 ${rMB[20]}
  268. run avl -m 20 -i 0 -e 1 -opt 1 -s 0
  269. preproc "m:1 a:43 s:1263 r24.2:2 c:105" 3950 r24 105 ${rMB[24]}
  270. run avl -m 24 -i 0 -e 1 -opt 1 -s 0
  271. done
  272. fi
  273. # The Figure 9 experiments are not run with "all", since they're not
  274. # meant to be run in dockers, but on a live network.
  275. if [ "$whichexps" = "fig9" ]; then
  276. echo "Running Figure 9 experiments..."
  277. for iter in $(seq 1 $numiters); do
  278. # Table 4
  279. logname='fig9'
  280. run -p m:1033 h:7497 a:3 s:118 r1:1 r2:6 r3:57 i1:6 i2:57 i1.3:2 i2.3:4 i3.3:57 c:610
  281. run heapsampler 64 10
  282. run -p m:2121 h:15561 a:6 s:246 r1:1 r2:6 r3:121 i1:6 i2:121 i1.3:2 i2.3:4 i3.3:121 c:1250
  283. run heapsampler 128 10
  284. run -p m:4297 h:31689 a:12 s:502 r1:1 r2:6 r3:249 i1:6 i2:249 i1.3:2 i2.3:4 i3.3:249 c:2530
  285. run heapsampler 256 10
  286. run -p m:8649 h:63945 a:24 s:1014 r1:1 r2:6 r3:505 i1:6 i2:505 i1.3:2 i2.3:4 i3.3:505 c:5090
  287. run heapsampler 512 10
  288. run -p m:17353 h:128457 a:48 s:2038 r1:1 r2:6 r3:1017 i1:6 i2:1017 i1.3:2 i2.3:4 i3.3:1017 c:10210
  289. run heapsampler 1024 10
  290. run -p m:34761 h:257481 a:96 s:4086 r1:1 r2:6 r3:2041 i1:6 i2:2041 i1.3:2 i2.3:4 i3.3:2041 c:20450
  291. run heapsampler 2048 10
  292. run -p m:1278 h:6237 a:4 s:167 r1:1 r2:6 r3:57 i1:6 i2:57 i1.3:2 i2.3:4 i3.3:8 i4.3:49 c:708
  293. run heapsampler 64 30
  294. run -p m:2686 h:14301 a:8 s:359 r1:1 r2:6 r3:121 i1:6 i2:121 i1.3:2 i2.3:4 i3.3:8 i4.3:113 c:1476
  295. run heapsampler 128 30
  296. run -p m:5502 h:30429 a:16 s:743 r1:1 r2:6 r3:249 i1:6 i2:249 i1.3:2 i2.3:4 i3.3:8 i4.3:241 c:3012
  297. run heapsampler 256 30
  298. run -p m:11134 h:62685 a:32 s:1511 r1:1 r2:6 r3:505 i1:6 i2:505 i1.3:2 i2.3:4 i3.3:8 i4.3:497 c:6084
  299. run heapsampler 512 30
  300. run -p m:22398 h:127197 a:64 s:3047 r1:1 r2:6 r3:1017 i1:6 i2:1017 i1.3:2 i2.3:4 i3.3:8 i4.3:1009 c:12228
  301. run heapsampler 1024 30
  302. run -p m:44926 h:256221 a:128 s:6119 r1:1 r2:6 r3:2041 i1:6 i2:2041 i1.3:2 i2.3:4 i3.3:8 i4.3:2033 c:24516
  303. run heapsampler 2048 30
  304. run -p m:3496 h:9891 a:11 s:521 r1:1 r2:6 r3:121 i1:6 i2:121 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:65 c:1800
  305. run heapsampler 128 100
  306. run -p m:7592 h:26019 a:23 s:1161 r1:1 r2:6 r3:249 i1:6 i2:249 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:193 c:3848
  307. run heapsampler 256 100
  308. run -p m:15784 h:58275 a:47 s:2441 r1:1 r2:6 r3:505 i1:6 i2:505 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:449 c:7944
  309. run heapsampler 512 100
  310. run -p m:32168 h:122787 a:95 s:5001 r1:1 r2:6 r3:1017 i1:6 i2:1017 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:961 c:16136
  311. run heapsampler 1024 100
  312. run -p m:64936 h:251811 a:191 s:10121 r1:1 r2:6 r3:2041 i1:6 i2:2041 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:1985 c:32520
  313. run heapsampler 2048 100
  314. run -p m:18994 h:45675 a:57 s:3083 r1:1 r2:6 r3:120 r4:385 i1:6 i2:120 i3:385 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:64 i7.3:128 i8.3:257 c:9613
  315. run heapsampler 512 300
  316. run -p m:40498 h:110187 a:121 s:6667 r1:1 r2:6 r3:120 r4:897 i1:6 i2:120 i3:897 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:64 i7.3:128 i8.3:769 c:20365
  317. run heapsampler 1024 300
  318. run -p m:83506 h:239211 a:249 s:13835 r1:1 r2:6 r3:120 r4:1921 i1:6 i2:120 i3:1921 i1.3:2 i2.3:4 i3.3:8 i4.3:16 i5.3:32 i6.3:64 i7.3:128 i8.3:1793 c:41869
  319. run heapsampler 2048 300
  320. done
  321. fi
  322. now=`date`
  323. echo "$now: Experiments complete"
  324. # If you specified a custom log suffix, you're going to be parsing the
  325. # outputs differently.
  326. if [ "$LOGSUFFIX" = "" ]; then
  327. parse data/*.out > data/prac.dat
  328. echo
  329. echo "# Figure 6(a)"
  330. egrep 'PRACOnln read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  331. echo
  332. egrep 'PRACTotl read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  333. echo
  334. echo "# Figure 6(b)"
  335. egrep 'PRACOnln read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  336. echo
  337. egrep 'PRACTotl read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  338. echo
  339. echo "# Figure 6(c)"
  340. egrep 'PRACOnln read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  341. echo
  342. egrep 'PRACTotl read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  343. echo
  344. echo "# Figure 7(a)"
  345. egrep 'BasicPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  346. echo
  347. egrep 'BasicPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  348. echo
  349. egrep 'OptPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  350. echo
  351. egrep 'OptPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  352. echo
  353. echo "# Figure 7(b)"
  354. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  355. echo
  356. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  357. echo
  358. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  359. echo
  360. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  361. echo
  362. echo "# Figure 7(c)"
  363. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  364. echo
  365. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  366. echo
  367. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  368. echo
  369. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  370. echo
  371. echo "# Figure 8(a)"
  372. egrep 'BasicPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  373. echo
  374. egrep 'BasicPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  375. echo
  376. egrep 'OptPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  377. echo
  378. egrep 'OptPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  379. echo
  380. echo "# Figure 8(b)"
  381. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  382. echo
  383. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  384. echo
  385. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  386. echo
  387. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  388. echo
  389. echo "# Figure 8(c)"
  390. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  391. echo
  392. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  393. echo
  394. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  395. echo
  396. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  397. echo
  398. echo "# Table 3"
  399. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  400. echo
  401. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  402. echo
  403. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  404. echo
  405. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  406. echo
  407. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  408. echo
  409. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  410. echo
  411. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  412. echo
  413. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  414. echo
  415. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  416. echo
  417. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  418. echo
  419. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  420. echo
  421. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  422. echo
  423. echo "# Table 4"
  424. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  425. echo
  426. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  427. echo
  428. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  429. echo
  430. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  431. echo
  432. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  433. echo
  434. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  435. echo
  436. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  437. echo
  438. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  439. echo
  440. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  441. echo
  442. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  443. echo
  444. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  445. echo
  446. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  447. echo
  448. echo '# Figure 9'
  449. egrep 'PRACTotl heapsampler [0-9]+ [0-9]+ .* s' data/prac.dat | sort -k3,3n -k4,4n
  450. echo
  451. echo "# End figures"
  452. fi