more profiling
This commit is contained in:
parent
a197cf743d
commit
a8734698eb
1 changed files with 42 additions and 0 deletions
|
@ -0,0 +1,42 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""more profiling"""
|
||||||
|
date="2016-09-26T19:59:43Z"
|
||||||
|
content="""
|
||||||
|
Instead of profiling `git annex copy --to remote`, I profiled `git annex
|
||||||
|
find --not --in web`, which needs to do the same kind of location log lookup.
|
||||||
|
|
||||||
|
total time = 12.41 secs (12413 ticks @ 1000 us, 1 processor)
|
||||||
|
total alloc = 8,645,057,104 bytes (excludes profiling overheads)
|
||||||
|
|
||||||
|
COST CENTRE MODULE %time %alloc
|
||||||
|
|
||||||
|
adjustGitEnv Git.Env 21.4 37.0
|
||||||
|
catchIO Utility.Exception 13.2 2.8
|
||||||
|
spanList Data.List.Utils 12.6 17.9
|
||||||
|
parsePOSIXTime Logs.TimeStamp 6.1 5.0
|
||||||
|
catObjectDetails.receive Git.CatFile 5.9 2.1
|
||||||
|
startswith Data.List.Utils 5.7 3.8
|
||||||
|
md5 Data.Hash.MD5 5.1 7.9
|
||||||
|
join Data.List.Utils 2.4 6.0
|
||||||
|
readFileStrictAnyEncoding Utility.Misc 2.2 0.5
|
||||||
|
|
||||||
|
The adjustGitEnv overhead is a surprise! It seems it is getting called once
|
||||||
|
per file, and allocating a new copy of the environment each time. Call stack:
|
||||||
|
withIndex calls withIndexFile calls addGitEnv calls adjustGitEnv.
|
||||||
|
Looks like simply making gitEnv be cached at startup would avoid most of
|
||||||
|
the adjustGitEnv slowdown.
|
||||||
|
|
||||||
|
(The catchIO overhead is a false reading; the detailed profile shows
|
||||||
|
that all its time and allocations are inherited. getAnnexLinkTarget
|
||||||
|
is running catchIO in the expensive case, so readSymbolicLink is
|
||||||
|
the actual expensive bit.)
|
||||||
|
|
||||||
|
The parsePOSIXTime comes from reading location logs. It's implemented
|
||||||
|
using a generic Data.Time.Format.parseTime, which uses a format string
|
||||||
|
"%s%Qs". A custom parser that splits into seconds and picoseconds
|
||||||
|
and simply reads both numbers might be more efficient.
|
||||||
|
|
||||||
|
catObjectDetails.receive is implemented using mostly String and could
|
||||||
|
probably be sped up by being converted to use ByteString.
|
||||||
|
"""]]
|
Loading…
Reference in a new issue