[[!comment format=mdwn username="joey" subject="""comment 5""" date="2019-01-14T21:18:17Z" content=""" After switching many internal types to ByteString. (Note that stack build --profile built this with -O, not -O2, so it's not as fast as it ought to be, but the cost centers are probably fairly accurate still.) Mon Jan 14 17:17 2019 Time and Allocation Profiling Report (Final) git-annex +RTS -p -RTS find total time = 3.07 secs (3074 ticks @ 1000 us, 1 processor) total alloc = 1,880,855,184 bytes (excludes profiling overheads) COST CENTRE MODULE SRC %time %alloc inAnnex'.checkindirect Annex.Content Annex/Content.hs:(106,9)-(121,39) 31.6 41.0 splitc Utility.Split Utility/Split.hs:(24,1)-(26,25) 4.8 5.2 keyFile' Annex.Locations Annex/Locations.hs:(518,1)-(524,30) 4.5 5.2 encodeW8 Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:(189,1)-(191,70) 3.1 3.6 >>=.\ Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:(146,9)-(147,44) 2.5 0.7 _encodeFilePath Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:(111,1)-(114,49) 2.5 2.7 >>=.\.succ' Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:146:13-76 2.2 0.2 fileKey' Annex.Locations Annex/Locations.hs:(532,1)-(541,41) 2.2 1.5 getState Annex Annex.hs:(254,1)-(257,27) 2.1 0.4 getAnnexLinkTarget'.probesymlink Annex.Link Annex/Link.hs:77:9-62 1.9 2.5 w82s Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:217:1-15 1.8 5.2 keyPath Annex.Locations Annex/Locations.hs:(551,1)-(553,23) 1.7 3.5 keyFile'.esc Annex.Locations Annex/Locations.hs:(520,9)-(524,30) 1.6 4.7 fileKey'.go Annex.Locations Annex/Locations.hs:535:9-63 1.6 1.6 s2w8 Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:214:1-15 1.3 3.5 withPtr Basement.Block.Base Basement/Block/Base.hs:(395,1)-(404,31) 1.3 0.5 parseLinkTarget Annex.Link Annex/Link.hs:(247,1)-(255,25) 1.2 3.8 parseKeyVariety Types.Key Types/Key.hs:(135,1)-(184,41) 1.2 0.0 assertLocal Git Git.hs:(123,1)-(129,28) 0.8 1.6 decodeBS' Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:151:1-31 0.6 2.4 Notice that the percent of time inAnnex' went up from 14.1% to 31.6%. That and getAnnexLinkTarget are the meat of the IO, so it's good for them to get a higher percent of the CPU, to the extent they're IO bound. It seems like getAnnexLinkTarget also lost a lot of non-IO overhead. There are still some overheads from conversion to and from ByteString, but the above does seem like a good improvement. Mon Jan 14 17:56 2019 Time and Allocation Profiling Report (Final) git-annex +RTS -p -RTS find --not --in web total time = 7.62 secs (7622 ticks @ 1000 us, 1 processor) total alloc = 1,908,064,368 bytes (excludes profiling overheads) COST CENTRE MODULE SRC %time %alloc catObjectDetails.\ Git.CatFile Git/CatFile.hs:(83,88)-(91,97) 6.5 3.8 catchDefaultIO Utility.Exception Utility/Exception.hs:57:1-53 6.4 2.5 parseResp Git.CatFile Git/CatFile.hs:(141,1)-(152,28) 4.9 5.0 MAIN MAIN 4.6 0.4 >>=.\ Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:(146,9)-(147,44) 4.6 1.7 >>=.\.succ' Data.Attoparsec.Internal.Types Data/Attoparsec/Internal/Types.hs:146:13-76 4.1 0.7 getState Annex Annex.hs:(254,1)-(257,27) 2.7 1.1 simplifyPath Utility.Path Utility/Path.hs:(38,1)-(50,48) 2.6 6.8 splitc Utility.Split Utility/Split.hs:(24,1)-(26,25) 2.5 5.1 keyFile' Annex.Locations Annex/Locations.hs:(518,1)-(524,30) 1.7 5.2 getAnnexLinkTarget'.probesymlink Annex.Link Annex/Link.hs:77:9-62 1.7 2.6 journalFile Annex.Journal Annex/Journal.hs:(107,1)-(112,33) 1.7 5.7 catches Control.Monad.Catch src/Control/Monad/Catch.hs:(795,1)-(799,76) 1.7 2.7 query.send Git.CatFile Git/CatFile.hs:137:9-32 1.6 0.5 delEntry Utility.Env Utility/Env.hs:(57,1)-(60,48) 1.6 0.8 encodeW8 Utility.FileSystemEncoding Utility/FileSystemEncoding.hs:(189,1)-(191,70) 1.4 3.5 query Git.CatFile Git/CatFile.hs:(130,1)-(138,26) 1.3 0.0 Notice that allocations dropped by 1/3rd! Otherwise, not a large change here.. """]]