OSH Parser Performance

We time $sh -n $file for various files under various shells, and repeat then run under cachegrind for stable metrics.

Source code: oil/benchmarks/osh-parser.sh

Raw files

Summary

Instructions Per Line (via cachegrind)

Lower numbers are generally better, but each shell recognizes a different language, and OSH uses a more thorough parsing algorithm. In thousands of "I refs".

shell label total lines thousand irefs per line
bash 118,863 15.1
dash 111,674 2.3

(zsh isn't measured because zsh -n unexpectedly forks.)

Average Parsing Rate, Measured on Two Machines (lines/ms)

Shell startup time is included in the elapsed time measurements, but long files are chosen to minimize its effect.

shell label total lines host no-host
dash 111,674 2,745
bash 118,863 690
osh-cpython 118,863 12

Per-File Measurements

Time and Memory

shell label elapsed ms user ms sys ms max rss MB num lines filename
dash 1 2 0 1 2,698 Build.sh
bash 5 5 0 3 2,698 Build.sh
osh-cpython 277 250 27 20 2,698 Build.sh
dash 2 1 1 1 2,512 abuild
bash 6 5 1 3 2,512 abuild
osh-cpython 365 345 21 21 2,512 abuild
dash 9 8 1 2 20,489 configure
bash 33 33 0 3 20,489 configure
osh-cpython 1,820 1,786 34 42 20,489 configure
dash 21 19 2 2 69,779 configure-coreutils
bash 79 78 1 3 69,779 configure-coreutils
osh-cpython 5,330 5,252 77 86 69,779 configure-coreutils
bash 5 4 1 3 2,029 configure-helper.sh
osh-cpython 263 236 28 20 2,029 configure-helper.sh
dash 1 1 0 1 1,733 functions
bash 4 3 1 3 1,733 functions
osh-cpython 259 235 24 20 1,733 functions
dash 4 4 0 2 9,661 ltmain.sh
bash 17 16 1 4 9,661 ltmain.sh
osh-cpython 863 828 36 28 9,661 ltmain.sh
dash 1 1 0 1 1,679 t4014-format-patch.sh
bash 3 2 2 3 1,679 t4014-format-patch.sh
osh-cpython 95 79 16 18 1,679 t4014-format-patch.sh
dash 1 0 1 1 3,123 t9300-fast-import.sh
bash 5 3 2 3 3,123 t9300-fast-import.sh
osh-cpython 100 79 21 18 3,123 t9300-fast-import.sh
bash 16 15 1 3 5,160 test-cmd-util.sh
osh-cpython 775 744 31 26 5,160 test-cmd-util.sh

Instruction Counts

shell label irefs num lines filename
dash 6,416,010 2,698 Build.sh
bash 35,958,882 2,698 Build.sh
dash 7,042,147 2,512 abuild
bash 43,761,475 2,512 abuild
dash 53,261,640 20,489 configure
bash 349,702,388 20,489 configure
dash 151,770,612 69,779 configure-coreutils
bash 886,197,417 69,779 configure-coreutils
bash 47,119,375 2,029 configure-helper.sh
dash 4,652,224 1,733 functions
bash 28,169,399 1,733 functions
dash 23,597,230 9,661 ltmain.sh
bash 172,930,991 9,661 ltmain.sh
dash 3,166,564 1,679 t4014-format-patch.sh
bash 25,314,918 1,679 t4014-format-patch.sh
dash 4,357,271 3,123 t9300-fast-import.sh
bash 41,138,083 3,123 t9300-fast-import.sh
bash 161,950,200 5,160 test-cmd-util.sh

Shell and Host Details

shell label shell id
bash bash-c134e4e3
dash dash-308ec8e6
osh-cpython osh-36be0cc8
host label host id
no-host no-host-e5b8d3ee

Raw Data

filename
no-host.2024-09-19__02-27-15.cachegrind.tsv
no-host.2024-09-19__02-27-15.times.csv