On Mon, 4 Jan 2010, Jeff King wrote: > > I have to wonder, though...did anybody ever actually profile our > internal grep to find out _why_ it was so much slower than GNU grep? > Could we simply ship a better grep engine and obsolete external grep? The internal grep is about 2.5 times slower than the external one for me. That's a big deal: - external grep: [torvalds@nehalem linux]$ time git grep qwerty ... real 0m0.412s user 0m0.196s sys 0m0.132s - NO_EXTERNAL_GREP: [torvalds@nehalem linux]$ time ~/git/git grep qwerty ... real 0m1.006s user 0m0.900s sys 0m0.096s so that's not even close. And "perf record" followed by "perf report" on the internal one shows that it's not even regexec() - we use strstr() for the trivial case: 43.63% git /home/torvalds/git/git [.] grep_buffer_1 25.19% git /lib64/libc-2.11.so [.] __strstr_sse42 9.16% git /home/torvalds/git/git [.] match_one_pattern 4.79% git /lib64/libc-2.11.so [.] __m128i_strloadu bit it seems to be all that line-per-line crud. If we got rid of that one, and could do the match as a _single_ regexec() instead (at least for the trivial cases of just one grep expression), perhaps we'd be better off. Linus -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html