Re: [PATCH v2 3/3] grep: disable threading in all but worktree case
- From
Jeff King <peff@peff.net>
- Date
- Dec 24, 2011, 13:38 UTC
- Message-ID
- <20111224133847.GA6669@sigill.intra.peff.net>
- In-Reply-To
- <CACsJy8DbfE8r3KsxCnb30-sb3LUAAWapAKJUSJ1zBZme1FoMwg@mail.gmail.com>
On Sat, Dec 24, 2011 at 05:55:14PM +0700, Nguyen Thai Ngoc Duy wrote:
Show 24 quoted lines
> On Sat, Dec 24, 2011 at 2:07 PM, Jeff King <peff@peff.net> wrote: > > 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_interestingSo 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.