Re: [PATCH v2 3/3] grep: disable threading in all but worktree case
From: Jeff King <hidden>
Date: 2016-06-15 22:52:41
On Sat, Dec 24, 2011 at 05:55:14PM +0700, Nguyen Thai Ngoc Duy wrote:
On Sat, Dec 24, 2011 at 2:07 PM, Jeff King [off-list ref] wrote:quoted
The case where we would most expect the setup cost to be drowned out is using a more complex regex, grepping tree objects. There we have a baseline of: $ time git grep 'a.*c' HEAD >/dev/null real 0m5.684s user 0m5.472s sys 0m0.196s $ time git ls-tree --name-only -r HEAD | xargs git grep 'a.*c' HEAD -- >/dev/null real 0m10.906s user 0m10.725s sys 0m0.240s Here, we still almost double our time. It looks like we don't use the same pathspec matching code in this case. But we do waste a lot of extra time zlib-inflating the trees in "ls-tree", only to do it separately in "grep".I assume this is gree_tree(), we have another form of pathspec matching here: tree_entry_interesting() and it's still a bunch of strcmp inside. Does strcmp show up in perf report?
Yes, but not nearly as high. The top of the report is:
+ 32.16% git libc-2.13.so [.] re_search_internal
+ 17.82% git libz.so.1.2.3.4 [.] 0xe986
+ 7.81% git git [.] look_ahead
+ 6.24% git libc-2.13.so [.] __strncmp_sse42
+ 4.08% git git [.] tree_entry_interesting
+ 3.27% git git [.] end_of_line
+ 2.63% git libz.so.1.2.3.4 [.] adler32
+ 1.93% git libz.so.1.2.3.4 [.] inflate
where the strncmps are from[1]:
- 6.24% git libc-2.13.so [.] __strncmp_sse42
- __strncmp_sse42
+ 80.92% grep_tree
+ 19.08% tree_entry_interesting
So we're spending maybe 10% of our time on pathspecs, but most of it is
going to zlib and the actual regex search.
-Peff
[1] Note that this is with -O2, so some of that is from inlined calls.