repro 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  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 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). 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. preproc "" 0 r${size} 10 ${rMB[$size]}
  177. run read $size 10
  178. done
  179. done
  180. fi
  181. if [ "$whichexps" = "fig7" -o "$whichexps" = "all" ]; then
  182. echo "Running Figure 7 experiments..."
  183. for iter in $(seq 1 $numiters); do
  184. # Figure 7(a)
  185. logname='fig7a'
  186. for num in 4 8 16 32 64; do
  187. preproc "c:$((num*20))" 10 i19 $num 41
  188. run bsearch 20 $num
  189. done
  190. for num in 4 8 16 32 64; do
  191. preproc "m:$((num*20)) c:$((num*20))" 20 r20 $((num*20)) 76
  192. run bbsearch 20 $num
  193. done
  194. # Figure 7(b,c)
  195. logname='fig7bc'
  196. for size in 16 18 20 22 24 26 28 30; do
  197. preproc "c:${size}" 1 i$((size-1)) 1 ${iMB[$((size-1))]}
  198. run bsearch $size 1
  199. done
  200. for size in 16 18 20 22 24 26 28 30; do
  201. preproc "m:${size} c:${size}" 1 r${size} ${size} ${rMB[$size]}
  202. run bbsearch $size 1
  203. done
  204. done
  205. fi
  206. if [ "$whichexps" = "fig8" -o "$whichexps" = "all" ]; then
  207. echo "Running Figure 8 experiments..."
  208. for iter in $(seq 1 $numiters); do
  209. # Figure 8(a)
  210. logname='fig8a'
  211. for num in 4 8 16 32; do
  212. preproc "m:$((num*57)) a:$(( (num*19+63)/64 )) s:$((num*18)) c:$((num*38))" 35 i19.3 ${num} 68
  213. run heap -m 20 -d 20 -i 0 -e ${num} -opt 1 -s 0
  214. done
  215. for num in 4 8 16 32; do
  216. preproc "m:$((num*57)) a:$(( (num*19+63)/64 )) s:$((num*18)) c:$((num*38))" 35 r20 $((num*108)) 76
  217. run heap -m 20 -d 20 -i 0 -e ${num} -opt 0 -s 0
  218. done
  219. # Figure 8(b,c)
  220. logname='fig8bc'
  221. for size in 16 18 20 22 24 26 28 30; do
  222. preproc "m:$((size*3-3)) a:1 s:$((size-2)) c:$((size*2-2))" 3 i$((size-1)).3 1 ${i3MB[$((size-1))]}
  223. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 1 -s 0
  224. done
  225. for size in 16 18 20 22 24 26 28 30; do
  226. preproc "m:$((size*3-3)) a:1 s:$((size-2)) c:$((size*2-2))" 3 r${size} $((size*6-12)) ${rMB[$size]}
  227. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 0 -s 0
  228. done
  229. done
  230. fi
  231. if [ "$whichexps" = "tab3" -o "$whichexps" = "all" ]; then
  232. echo "Running Table 3 experiments..."
  233. for iter in $(seq 1 $numiters); do
  234. # Table 3
  235. logname='tab3'
  236. for size in 16 20 24; do
  237. run -p m:$((size*2-1)) r5:1 i4:1 c:5
  238. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 1 -s 0
  239. run -p m:$((size-1)) c:$((size-1))
  240. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 0 -s 0
  241. done
  242. done
  243. fi
  244. if [ "$whichexps" = "tab4" -o "$whichexps" = "all" ]; then
  245. echo "Running Table 4 experiments..."
  246. for iter in $(seq 1 $numiters); do
  247. # Table 4
  248. logname='tab4'
  249. preproc "a:8 s:171 c:50" 3 r17 28 ${rMB[17]}
  250. run avl -m 16 -i 1 -e 0 -opt 1 -s 0
  251. preproc "a:10 s:201 c:60" 3 r21 33 ${rMB[21]}
  252. run avl -m 20 -i 1 -e 0 -opt 1 -s 0
  253. preproc "a:12 s:237 c:72" 3 r25 39 ${rMB[25]}
  254. run avl -m 24 -i 1 -e 0 -opt 1 -s 0
  255. preproc "m:1 a:30 s:867 r16.2:2 c:72" 26 r16 72 ${rMB[16]}
  256. run avl -m 16 -i 0 -e 1 -opt 1 -s 0
  257. preproc "m:1 a:36 s:1047 r20.2:2 c:87" 263 r20 87 ${rMB[20]}
  258. run avl -m 20 -i 0 -e 1 -opt 1 -s 0
  259. preproc "m:1 a:43 s:1263 r24.2:2 c:105" 3950 r24 105 ${rMB[24]}
  260. run avl -m 24 -i 0 -e 1 -opt 1 -s 0
  261. done
  262. fi
  263. if [ "$whichexps" = "fig9" -o "$whichexps" = "all" ]; then
  264. echo "Running Figure 9 experiments..."
  265. for iter in $(seq 1 $numiters); do
  266. # Table 4
  267. logname='fig9'
  268. 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
  269. run heapsampler 64 10
  270. 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
  271. run heapsampler 128 10
  272. 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
  273. run heapsampler 256 10
  274. 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
  275. run heapsampler 512 10
  276. 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
  277. run heapsampler 1024 10
  278. 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
  279. run heapsampler 2048 10
  280. 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
  281. run heapsampler 64 30
  282. 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
  283. run heapsampler 128 30
  284. 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
  285. run heapsampler 256 30
  286. 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
  287. run heapsampler 512 30
  288. 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
  289. run heapsampler 1024 30
  290. 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
  291. run heapsampler 2048 30
  292. 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
  293. run heapsampler 128 100
  294. 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
  295. run heapsampler 256 100
  296. 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
  297. run heapsampler 512 100
  298. 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
  299. run heapsampler 1024 100
  300. 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
  301. run heapsampler 2048 100
  302. 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
  303. run heapsampler 512 300
  304. 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
  305. run heapsampler 1024 300
  306. 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
  307. run heapsampler 2048 300
  308. done
  309. fi
  310. now=`date`
  311. echo "$now: Experiments complete"
  312. # If you specified a custom log suffix, you're going to be parsing the
  313. # outputs differently.
  314. if [ "$LOGSUFFIX" = "" ]; then
  315. parse data/*.out > data/prac.dat
  316. echo
  317. echo "# Figure 6(a)"
  318. egrep 'PRACOnln read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  319. echo
  320. egrep 'PRACTotl read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  321. echo
  322. echo "# Figure 6(b)"
  323. egrep 'PRACOnln read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  324. echo
  325. egrep 'PRACTotl read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  326. echo
  327. echo "# Figure 6(c)"
  328. egrep 'PRACOnln read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  329. echo
  330. egrep 'PRACTotl read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  331. echo
  332. echo "# Figure 7(a)"
  333. egrep 'BasicPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  334. echo
  335. egrep 'BasicPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  336. echo
  337. egrep 'OptPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  338. echo
  339. egrep 'OptPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  340. echo
  341. echo "# Figure 7(b)"
  342. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  343. echo
  344. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  345. echo
  346. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  347. echo
  348. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  349. echo
  350. echo "# Figure 7(c)"
  351. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  352. echo
  353. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  354. echo
  355. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  356. echo
  357. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  358. echo
  359. echo "# Figure 8(a)"
  360. egrep 'BasicPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  361. echo
  362. egrep 'BasicPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  363. echo
  364. egrep 'OptPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  365. echo
  366. egrep 'OptPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  367. echo
  368. echo "# Figure 8(b)"
  369. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  370. echo
  371. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  372. echo
  373. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  374. echo
  375. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  376. echo
  377. echo "# Figure 8(c)"
  378. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  379. echo
  380. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  381. echo
  382. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  383. echo
  384. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  385. echo
  386. echo "# Table 3"
  387. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  388. echo
  389. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  390. echo
  391. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  392. echo
  393. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  394. echo
  395. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  396. echo
  397. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  398. echo
  399. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  400. echo
  401. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  402. echo
  403. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  404. echo
  405. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  406. echo
  407. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  408. echo
  409. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  410. echo
  411. echo "# Table 4"
  412. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  413. echo
  414. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  415. echo
  416. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  417. echo
  418. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  419. echo
  420. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  421. echo
  422. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  423. echo
  424. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  425. echo
  426. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  427. echo
  428. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  429. echo
  430. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  431. echo
  432. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  433. echo
  434. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  435. echo
  436. echo '# Heap Sampler'
  437. egrep 'PRACTotl heapsampler [0-9]+ [0-9]+ .* s' data/prac.dat | sort -k3,3n -k4,4n
  438. echo
  439. echo "# End figures"
  440. fi