Hello,
without the patch (callgrind_annotate):
26,300,937 ???:_platform_strcmp [libsystem_platform.dylib]
13,288,306 Src/parse.c:ecstrcode [Src/zsh]
4,486,910 Src/hashtable.c:hasher [Src/zsh]
after:
2,661,459 ???:_platform_strcmp [libsystem_platform.dylib]
2,588,524 Src/parse.c:ecstrcode [Src/zsh]
5,959,019 Src/hashtable.c:hasher [Src/zsh]
So, for ecstrcode & hasher, the gain is 10.5 million, the loss is 1.5 million. Shell startup time measured with:
% repeat 10 { time /usr/local/bin/zsh-5.3.1-dev-0 -i -c exit }
drops from 205 ms to 192 ms.
With additional has_token() patch, it's 205 ms to 190 ms. I think this can be assumed to be 15-20ms.
The 9 million gained shows that this is a serious optimization. Three more such optimizations, and gain would be 45-60 ms, a noticable difference.
Data: https://github.com/zdharma/hacking-private/tree/master/startup-dump-opt
Any ideas maybe, of what more can be done? I'm trying to add meaning to my functions-lexicon feature (automatically managed functions, loaded via autoload -w ...zwc). Dumps seem to be quite optimially mmapped, not sure where to look for something else related to Eprog.
--
Sebastian Gniazdowski
psprint /at/ zdharma.org
Attachment:
silence_ecstrcode.diff
Description: Binary data
Attachment:
less_has_token.diff
Description: Binary data
repeat 10 { time /usr/local/bin/zsh-5.3.1-dev-0 -i -c exit }
O2, optimized (hasher use):
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 94% cpu 0,189 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,06s system 95% cpu 0,198 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,06s system 94% cpu 0,193 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,06s system 94% cpu 0,200 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,190 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 94% cpu 0,193 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 94% cpu 0,190 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,06s system 94% cpu 0,196 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,188 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,12s user 0,05s system 94% cpu 0,189 total
0.189 + 0.198 + 0.193 + 0.200 + 0.190 + 0.193 + 0.190 + 0.196 + 0.188 + 0.189 => 1.926 / 10 = 0.192
O2, no optimizations:
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 94% cpu 0,200 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,201 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,209 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,203 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,205 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,15s user 0,05s system 95% cpu 0,216 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,207 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,06s system 95% cpu 0,208 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,206 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,14s user 0,05s system 95% cpu 0,199 total
0.200 + 0.201 + 0.209 + 0.203 + 0.205 + 0.216 + 0.207 + 0.208 + 0.206 + 0.199 => 2.054 / 10 = 0.205
O2, additional has_token optimization (more 0.18* results, 5 vs 3)
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 94% cpu 0,192 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,189 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,191 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 94% cpu 0,189 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,190 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,06s system 93% cpu 0,203 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,12s user 0,05s system 94% cpu 0,187 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,12s user 0,05s system 95% cpu 0,185 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,13s user 0,05s system 95% cpu 0,193 total
/usr/local/bin/zsh-5.3.1-dev-0 -i -c exit 0,12s user 0,05s system 94% cpu 0,184 total
0.192 + 0.189 + 0.191 + 0.189 + 0.190 + 0.203 + 0.187 + 0.185 + 0.193 + 0.184 => 1.903 / 10 = 0.190
source "$HOME/.zplugin/bin/zplugin.zsh"
autoload -Uz _zplugin
(( ${+_comps} )) && _comps[zplugin]=_zplugin
autoload -Uz compinit
compinit
zplugin snippet https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh
zplugin snippet https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/git.zsh
zplugin cdclear -q
zstyle ":plugin:zconvey" check_interval "1"
zstyle ":plugin:zconvey" greeting "text"
zstyle ":plugin:zconvey" expire_seconds "20"
#zmodload zsh/zprof
#() {
fpath[1,0]=( ~/.zplugin/lexicon.zwc )
autoload -Uzw ~/.zplugin/lexicon.zwc
zplugin light psprint zsh-navigation-tools
zplugin light psprint zsh-editing-workbench
zplugin light psprint zsh-cmd-architect
zplugin light psprint zsh-select
zplugin light psprint zprompts
zplugin light psprint zzcomplete
zplugin light rimraf k
zplugin light psprint history-search-multi-word
zplugin light zdharma zbrowse
zplugin light oz safe-paste
zplugin light zsh-users zsh-autosuggestions
zplugin light psprint zcommodore
zplugin light zdharma/fast-syntax-highlighting
zplugin cdreplay
#zprof | head -n 14
#}
# vim:ft=zsh