repro 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  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). 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" -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. ../docker/run-experiment $* >> data/$logfile
  72. }
  73. # Run preprocessing, being careful to not exceed available memory. We
  74. # typically preprocess a bunch of small resources that will easily fit
  75. # in memory, as well as a number of instances of one large resource. We
  76. # create the small resources and as many of the instances of the large
  77. # resource first we can (with -p), and then more batches of instances of
  78. # the large resource (with -a, which means to append the newly created
  79. # resources to the storage file, rather than overwriting old ones).
  80. # Arguments:
  81. # $1: a string (containing embedded whitespace) of the required small
  82. # resources
  83. # $2: the mb required by P0 to create the small resources
  84. # $3: the name of the large resource
  85. # $4: the number of instances of the large resource we want
  86. # $5: the mb required by P0 to create one instance of the large resource
  87. preproc() {
  88. small_mb=$2
  89. large_left=$4
  90. large_mb_each=$5
  91. # the maximum number of instances of the large resource we can
  92. # create along with the small ones
  93. num_large=$(( (max_preproc_p0_mb-small_mb)/large_mb_each ))
  94. if [ $num_large -gt $large_left ]; then
  95. num_large=$large_left
  96. fi
  97. run -p $1 ${3}:${num_large}
  98. large_left=$((large_left-num_large))
  99. # the maximum number of instances of the large resource we can
  100. # create in a batch on their own
  101. max_large_batch=$((max_preproc_p0_mb/large_mb_each))
  102. if [ $max_large_batch = 0 ]; then
  103. echo "Not enough memory"
  104. return
  105. fi
  106. while [ $large_left -gt 0 ]; do
  107. num_large=$large_left
  108. if [ $num_large -gt $max_large_batch ]; then
  109. num_large=$max_large_batch
  110. fi
  111. run -a ${3}:${num_large}
  112. large_left=$((large_left-num_large))
  113. done
  114. }
  115. # The number of MB needed for P0 to create different kinds of resources
  116. # of different sizes
  117. declare -A rMB
  118. 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)
  119. declare -A r2MB
  120. r2MB=([16]=9 [18]=32 [20]=125 [22]=494 [24]=1970 [26]=7870 [28]=31470 [30]=125850)
  121. declare -A iMB
  122. iMB=([15]=4 [17]=12 [19]=41 [21]=152 [23]=595 [25]=2364 [27]=9441 [29]=37753)
  123. declare -A i3MB
  124. i3MB=([15]=6 [17]=20 [19]=72 [21]=286 [23]=968 [25]=3955 [27]=15800 [29]=62950)
  125. # Parse the output logs. We run this in the docker in case you don't
  126. # have perl installed on the host.
  127. # Arguments: a list of logfiles
  128. parse() {
  129. if [ "$PRAC_PARSE_HOST" = "1" ]; then
  130. ./parse_logs $*
  131. else
  132. cat $* | docker exec -w /root/prac/repro -i prac_p0 ./parse_logs
  133. fi
  134. }
  135. # A very small kick-the-tires test to ensure everything compiled and
  136. # built properly
  137. if [ "$whichexps" = "test" ]; then
  138. echo "Running test experiment..."
  139. logname='test'
  140. run -o read 16 1
  141. echo
  142. echo "# Test output"
  143. echo
  144. parse data/prac_test.out${LOGSUFFIX}
  145. echo
  146. echo "# End test output"
  147. echo
  148. exit
  149. fi
  150. # Be able to run a single experiment specified on the command line
  151. if [ "$whichexps" = "single" ]; then
  152. echo "Running single experiment..."
  153. shift
  154. run $*
  155. exit
  156. fi
  157. now=`date`
  158. echo "$now: Starting experiments"
  159. if [ "$whichexps" = "fig6" -o "$whichexps" = "all" ]; then
  160. echo "Running Figure 6 experiments..."
  161. for iter in $(seq 1 $numiters); do
  162. # Figure 6(a)
  163. logname='fig6a'
  164. for num in 16 32 64 128 256 512 1024 2048; do
  165. preproc "" 0 r20 $num 76
  166. run read 20 $num
  167. done
  168. # Figure 6(b,c)
  169. logname='fig6bc'
  170. for size in 16 18 20 22 24 26 28 30; do
  171. preproc "" 0 r${size} 10 ${rMB[$size]}
  172. run read $size 10
  173. done
  174. done
  175. fi
  176. if [ "$whichexps" = "fig7" -o "$whichexps" = "all" ]; then
  177. echo "Running Figure 7 experiments..."
  178. for iter in $(seq 1 $numiters); do
  179. # Figure 7(a)
  180. logname='fig7a'
  181. for num in 4 8 16 32 64; do
  182. preproc "c:$((num*20))" 10 i19 $num 41
  183. run bsearch 20 $num
  184. done
  185. for num in 4 8 16 32 64; do
  186. preproc "m:$((num*20)) c:$((num*20))" 20 r20 $((num*20)) 76
  187. run bbsearch 20 $num
  188. done
  189. # Figure 7(b,c)
  190. logname='fig7bc'
  191. for size in 16 18 20 22 24 26 28; do
  192. preproc "c:${size}" 1 i$((size-1)) 1 ${iMB[$((size-1))]}
  193. run bsearch $size 1
  194. done
  195. for size in 16 18 20 22 24 26 28; do
  196. preproc "m:${size} c:${size}" 1 r${size} ${size} ${rMB[$size]}
  197. run bbsearch $size 1
  198. done
  199. done
  200. fi
  201. if [ "$whichexps" = "fig8" -o "$whichexps" = "all" ]; then
  202. echo "Running Figure 8 experiments..."
  203. for iter in $(seq 1 $numiters); do
  204. # Figure 8(a)
  205. logname='fig8a'
  206. for num in 4 8 16 32; do
  207. preproc "m:$((num*57)) a:$((num*19)) s:$((num*18)) c:$((num*38))" 35 i19.3 ${num} 68
  208. run heap -m 20 -d 20 -i 0 -e ${num} -opt 1 -s 0
  209. done
  210. for num in 4 8 16 32; do
  211. preproc "m:$((num*57)) a:$((num*19)) s:$((num*18)) c:$((num*38))" 35 r20 ${num} 76
  212. run heap -m 20 -d 20 -i 0 -e ${num} -opt 0 -s 0
  213. done
  214. # Figure 8(b,c)
  215. logname='fig8bc'
  216. for size in 16 18 20 22 24 26 28 30; do
  217. preproc "m:$((size*3-3)) a:$((size-1)) s:$((size-2)) c:$((size*2-2))" 3 i$((size-1)).3 1 ${i3MB[$((size-1))]}
  218. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 1 -s 0
  219. done
  220. for size in 16 18 20 22 24 26 28 30; do
  221. preproc "m:$((size*3-3)) a:$((size-1)) s:$((size-2)) c:$((size*2-2))" 3 r${size} $((size*6-12)) ${rMB[$size]}
  222. run heap -m ${size} -d ${size} -i 0 -e 1 -opt 0 -s 0
  223. done
  224. done
  225. fi
  226. if [ "$whichexps" = "tab3" -o "$whichexps" = "all" ]; then
  227. echo "Running Table 3 experiments..."
  228. for iter in $(seq 1 $numiters); do
  229. # Table 3
  230. logname='tab3'
  231. for size in 16 20 24; do
  232. run -p m:$((size*2-1)) r5:1 i4:1 c:5
  233. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 1 -s 0
  234. run -p m:$((size-1)) c:$((size-1))
  235. run heap -m ${size} -d $((size-1)) -i 1 -e 0 -opt 0 -s 0
  236. done
  237. done
  238. fi
  239. if [ "$whichexps" = "tab4" -o "$whichexps" = "all" ]; then
  240. echo "Running Table 4 experiments..."
  241. for iter in $(seq 1 $numiters); do
  242. # Table 4
  243. logname='tab4'
  244. preproc "a:8 s:171 c:50" 3 r17 28 ${rMB[17]}
  245. run avl -m 16 -i 1 -e 0 -opt 1 -s 0
  246. preproc "a:10 s:201 c:60" 3 r21 33 ${rMB[21]}
  247. run avl -m 20 -i 1 -e 0 -opt 1 -s 0
  248. preproc "a:12 s:237 c:72" 3 r25 39 ${rMB[25]}
  249. run avl -m 24 -i 1 -e 0 -opt 1 -s 0
  250. preproc "m:1 a:30 s:867 r16.2:2 c:72" 26 r16 72 ${rMB[16]}
  251. run avl -m 16 -i 0 -e 1 -opt 1 -s 0
  252. preproc "m:1 a:36 s:1047 r20.2:2 c:87" 263 r20 87 ${rMB[20]}
  253. run avl -m 20 -i 0 -e 1 -opt 1 -s 0
  254. preproc "m:1 a:43 s:1263 r24.2:2 c:105" 3950 r24 105 ${rMB[24]}
  255. run avl -m 24 -i 0 -e 1 -opt 1 -s 0
  256. done
  257. fi
  258. if [ "$whichexps" = "heapsampler" -o "$whichexps" = "all" ]; then
  259. echo "Running heap sampler experiments..."
  260. for iter in $(seq 1 $numiters); do
  261. # Table 4
  262. logname='heapsampler'
  263. 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
  264. run heapsampler 64 10
  265. 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
  266. run heapsampler 128 10
  267. 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
  268. run heapsampler 256 10
  269. 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
  270. run heapsampler 512 10
  271. 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
  272. run heapsampler 1024 10
  273. 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
  274. run heapsampler 2048 10
  275. 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
  276. run heapsampler 64 30
  277. 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
  278. run heapsampler 128 30
  279. 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
  280. run heapsampler 256 30
  281. 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
  282. run heapsampler 512 30
  283. 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
  284. run heapsampler 1024 30
  285. 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
  286. run heapsampler 2048 30
  287. 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
  288. run heapsampler 128 100
  289. 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
  290. run heapsampler 256 100
  291. 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
  292. run heapsampler 512 100
  293. 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
  294. run heapsampler 1024 100
  295. 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
  296. run heapsampler 2048 100
  297. 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
  298. run heapsampler 512 300
  299. 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
  300. run heapsampler 1024 300
  301. 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
  302. run heapsampler 2048 300
  303. done
  304. fi
  305. now=`date`
  306. echo "$now: Experiments complete"
  307. # If you specified a custom log suffix, you're going to be parsing the
  308. # outputs differently.
  309. if [ "$LOGSUFFIX" = "" ]; then
  310. parse data/*.out > data/prac.dat
  311. echo
  312. echo "# Figure 6(a)"
  313. egrep 'PRACOnln read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  314. echo
  315. egrep 'PRACTotl read 20 (16|32|64|128|256|512|1024|2048) .* s$' data/prac.dat | sort -k4 -n
  316. echo
  317. echo "# Figure 6(b)"
  318. egrep 'PRACOnln read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  319. echo
  320. egrep 'PRACTotl read ([0-9]+) 10 .* s$' data/prac.dat | sort -k3 -n
  321. echo
  322. echo "# Figure 6(c)"
  323. egrep 'PRACOnln read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  324. echo
  325. egrep 'PRACTotl read ([0-9]+) 10 .* KiB$' data/prac.dat | sort -k3 -n
  326. echo
  327. echo "# Figure 7(a)"
  328. egrep 'BasicPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  329. echo
  330. egrep 'BasicPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  331. echo
  332. egrep 'OptPRACOnln bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  333. echo
  334. egrep 'OptPRACTotl bsearch 20 (4|8|16|32|64) .* s$' data/prac.dat | sort -k4 -n
  335. echo
  336. echo "# Figure 7(b)"
  337. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  338. echo
  339. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  340. echo
  341. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  342. echo
  343. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  344. echo
  345. echo "# Figure 7(c)"
  346. egrep 'BasicPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  347. echo
  348. egrep 'BasicPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  349. echo
  350. egrep 'OptPRACOnln bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  351. echo
  352. egrep 'OptPRACTotl bsearch ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  353. echo
  354. echo "# Figure 8(a)"
  355. egrep 'BasicPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  356. echo
  357. egrep 'BasicPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  358. echo
  359. egrep 'OptPRACOnln heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  360. echo
  361. egrep 'OptPRACTotl heapExt 20 (4|8|16|32) .* s$' data/prac.dat | sort -k4 -n
  362. echo
  363. echo "# Figure 8(b)"
  364. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  365. echo
  366. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  367. echo
  368. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  369. echo
  370. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* s$' data/prac.dat | sort -k3 -n
  371. echo
  372. echo "# Figure 8(c)"
  373. egrep 'BasicPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  374. echo
  375. egrep 'BasicPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  376. echo
  377. egrep 'OptPRACOnln heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  378. echo
  379. egrep 'OptPRACTotl heapExt ([0-9]+) 1 .* KiB$' data/prac.dat | sort -k3 -n
  380. echo
  381. echo "# Table 3"
  382. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  383. echo
  384. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  385. echo
  386. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  387. echo
  388. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  389. echo
  390. egrep 'BasicPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  391. echo
  392. egrep 'BasicPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  393. echo
  394. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  395. echo
  396. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  397. echo
  398. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  399. echo
  400. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  401. echo
  402. egrep 'OptPRACPreprc heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  403. echo
  404. egrep 'OptPRACOnln heapIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  405. echo
  406. echo "# Table 4"
  407. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  408. echo
  409. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  410. echo
  411. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  412. echo
  413. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  414. echo
  415. egrep 'OptPRACPreprc avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  416. echo
  417. egrep 'OptPRACOnln avlIns [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  418. echo
  419. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  420. echo
  421. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* s$' data/prac.dat | sort -k3 -n
  422. echo
  423. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  424. echo
  425. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* latencies$' data/prac.dat | sort -k3 -n
  426. echo
  427. egrep 'OptPRACPreprc avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  428. echo
  429. egrep 'OptPRACOnln avlDel [0-9]+ 1 .* KiB$' data/prac.dat | sort -k3 -n
  430. echo
  431. echo '# Heap Sampler'
  432. egrep 'PRACTotl heapsampler [0-9]+ [0-9]+ .* s' data/prac.dat | sort -k3,3n -k4,4n
  433. echo
  434. echo "# End figures"
  435. fi