Memory Management Overhead

Source code: oils/benchmarks/gc.sh

GC Stats

task elapsed ms max gc millis total gc millis allocated MB max rss MB num allocated num gc points num gc done gc threshold num growths max survived shell label
parse.configure-cpython 29 4 10 12.0 18.2 471,252 1,282 6 413,132 5 206,566 osh-native
parse.configure-cpython 32 4 10 12.0 18.7 471,252 1,282 6 413,140 5 206,570 osh-nosouffle
parse.configure-coreutils 118 18 54 45.9 51.9 1,637,991 4,764 12 1,056,630 6 787,836 osh-native
parse.configure-coreutils 129 19 55 45.9 52.1 1,637,990 4,764 12 1,056,638 6 787,840 osh-nosouffle
parse.abuild 8 1 2 2.6 8.8 102,780 180 3 86,618 1 43,309 osh-native
parse.abuild 9 1 2 2.6 9.2 102,780 180 3 86,626 1 43,313 osh-nosouffle
ex.compute-fib 20 0 2 2.8 8.5 576,705 22,608 12 50,000 0 2,976 osh-native
ex.compute-fib 25 0 2 2.8 8.7 576,705 22,608 12 50,000 0 2,981 osh-nosouffle
ex.bashcomp-parse-help 170 0 4 11.6 9.2 990,260 15,258 21 50,000 0 3,957 osh-native
ex.bashcomp-parse-help 175 0 4 11.6 9.8 990,259 15,258 21 50,000 0 3,966 osh-nosouffle
ex.abuild-print-help 17 1 2 3.0 9.6 117,247 277 3 83,980 1 41,990 osh-native
ex.abuild-print-help 18 1 2 3.0 10.1 117,246 277 3 83,988 1 41,994 osh-nosouffle

Resource Usage

parse.configure-cpython

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
5 4 1 1.7 dash -
11 10 1 3.5 bash -
62 39 27 3.5 zsh -
15 11 4 28.8 bumpleak/osh mut
16 10 6 29.6 _bin/cxx-opt+bumproot/osh mut
18 11 8 30.0 _bin/cxx-opt+bumpsmall/osh mut+alloc
21 17 4 25.6 osh-native mut+alloc
24 18 6 26.1 osh-native mut+alloc+free
29 25 4 18.2 osh-native mut+alloc+free+gc
31 28 3 18.2 osh-native mut+alloc+free+gc+exit
25 19 6 26.0 osh-nosouffle mut+alloc
27 21 6 26.3 osh-nosouffle mut+alloc+free
32 27 5 18.7 osh-nosouffle mut+alloc+free+gc
33 27 6 18.7 osh-nosouffle mut+alloc+free+gc+exit
33 24 9 32.4 _bin/cxx-opt+nopool/osh mut+alloc
41 34 7 22.7 _bin/cxx-opt+nopool/osh mut+alloc+free+gc

parse.configure-coreutils

Parsing the autoconf-generated configure script from GNU coreutils.

Note that unlike other shells, osh -n retains all nodes on purpose. (See the parser benchmark).

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
18 18 0 1.7 dash -
38 38 0 3.7 bash -
229 144 99 3.7 zsh -
47 31 17 84.9 bumpleak/osh mut
52 38 14 85.1 _bin/cxx-opt+bumproot/osh mut
59 43 16 87.2 _bin/cxx-opt+bumpsmall/osh mut+alloc
70 46 24 73.8 osh-native mut+alloc
80 50 30 75.5 osh-native mut+alloc+free
118 102 16 51.9 osh-native mut+alloc+free+gc
127 107 20 52.5 osh-native mut+alloc+free+gc+exit
79 53 26 74.2 osh-nosouffle mut+alloc
91 63 28 76.0 osh-nosouffle mut+alloc+free
129 114 15 52.1 osh-nosouffle mut+alloc+free+gc
136 122 14 52.9 osh-nosouffle mut+alloc+free+gc+exit
105 72 33 97.9 _bin/cxx-opt+nopool/osh mut+alloc
165 136 30 73.1 _bin/cxx-opt+nopool/osh mut+alloc+free+gc

parse.abuild

Parsing abuild from Alpine Linux.

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
1 1 0 1.7 dash -
3 2 1 3.3 bash -
5 2 2 3.5 zsh -
5 4 1 11.6 bumpleak/osh mut
6 3 2 12.6 _bin/cxx-opt+bumproot/osh mut
6 4 2 13.1 _bin/cxx-opt+bumpsmall/osh mut+alloc
6 3 3 10.6 osh-native mut+alloc
7 6 1 10.6 osh-native mut+alloc+free
8 5 3 8.8 osh-native mut+alloc+free+gc
8 6 2 9.0 osh-native mut+alloc+free+gc+exit
7 6 1 11.1 osh-nosouffle mut+alloc
8 5 3 11.1 osh-nosouffle mut+alloc+free
9 7 2 9.2 osh-nosouffle mut+alloc+free+gc
9 8 1 9.4 osh-nosouffle mut+alloc+free+gc+exit
9 7 2 11.8 _bin/cxx-opt+nopool/osh mut+alloc
10 8 2 9.8 _bin/cxx-opt+nopool/osh mut+alloc+free+gc

ex.compute-fib

A synthetic benchmark for POSIX shell arithmetic.

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
9 8 1 1.6 dash -
29 28 1 3.3 bash -
17 14 3 3.3 zsh -
18 13 5 33.7 bumpleak/osh mut
19 14 5 32.4 _bin/cxx-opt+bumproot/osh mut
22 17 5 34.1 _bin/cxx-opt+bumpsmall/osh mut+alloc
25 13 12 27.0 osh-native mut+alloc
28 21 7 27.4 osh-native mut+alloc+free
20 17 3 8.5 osh-native mut+alloc+free+gc
20 18 2 8.5 osh-native mut+alloc+free+gc+exit
30 23 6 27.5 osh-nosouffle mut+alloc
32 28 4 27.8 osh-nosouffle mut+alloc+free
25 23 2 8.7 osh-nosouffle mut+alloc+free+gc
24 20 4 8.9 osh-nosouffle mut+alloc+free+gc+exit
39 29 10 36.3 _bin/cxx-opt+nopool/osh mut+alloc
28 23 5 9.8 _bin/cxx-opt+nopool/osh mut+alloc+free+gc

ex.bashcomp-parse-help

A realistic bash-completion workload.

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
96 95 1 3.5 bash -
169 139 30 57.2 bumpleak/osh mut
180 155 25 56.6 _bin/cxx-opt+bumproot/osh mut
185 152 33 57.0 _bin/cxx-opt+bumpsmall/osh mut+alloc
197 161 36 48.8 osh-native mut+alloc
200 171 29 50.9 osh-native mut+alloc+free
170 145 25 9.2 osh-native mut+alloc+free+gc
170 146 24 9.0 osh-native mut+alloc+free+gc+exit
199 163 36 49.2 osh-nosouffle mut+alloc
207 174 33 51.4 osh-nosouffle mut+alloc+free
175 155 20 9.8 osh-nosouffle mut+alloc+free+gc
175 154 21 9.8 osh-nosouffle mut+alloc+free+gc+exit
218 178 40 65.1 _bin/cxx-opt+nopool/osh mut+alloc
199 177 22 10.4 _bin/cxx-opt+nopool/osh mut+alloc+free+gc

ex.abuild-print-help

Running abuild -h from Alpine Linux.

elapsed ms user ms sys ms max rss MB shell label shell runtime opts
7 1 6 4.1 dash -
13 8 5 4.8 bash -
11 5 6 3.8 zsh -
14 7 7 13.9 bumpleak/osh mut
15 9 6 13.3 _bin/cxx-opt+bumproot/osh mut
17 11 6 14.2 _bin/cxx-opt+bumpsmall/osh mut+alloc
15 11 4 11.5 osh-native mut+alloc
16 9 8 11.8 osh-native mut+alloc+free
17 11 6 9.6 osh-native mut+alloc+free+gc
17 13 5 9.6 osh-native mut+alloc+free+gc+exit
17 9 8 11.9 osh-nosouffle mut+alloc
18 13 6 12.3 osh-nosouffle mut+alloc+free
18 13 5 10.1 osh-nosouffle mut+alloc+free+gc
18 13 6 10.1 osh-nosouffle mut+alloc+free+gc+exit
18 6 12 13.2 _bin/cxx-opt+nopool/osh mut+alloc
19 14 6 10.4 _bin/cxx-opt+nopool/osh mut+alloc+free+gc