From: Linus Torvalds Date: Mon, 04 Jan 2010 16:01:15 GMT Subject: Re: [PATCH] grep: do not do external grep on skip-worktree entries Message-ID: In-Reply-To: <20100104080940.GA4815@coredump.intra.peff.net> On Mon, 4 Jan 2010, Jeff King wrote: > > However, gprof reports that for the pcre dfa case, we spend more time in > grep.c:end_of_line than we do actually running the regex. So clearly > there are some other micro-optimizations in GNU grep that are making a > difference, too. Don't use gprof. You're _much_ better off using the newish Linux 'perf' tool. It's quite competent, and doesn't need the code to be compiled with -pg (which totally changes all performance characteristics). Do something like this: perf record git grep qwerty followed by perf report perf annotate grep_buffer_1 (that "perf report" gives a per-symbol overview, the "perf annotate" gives a disassembly with source annotations and per-instruction costs). It works with inlining too, so you get things like this: ... : static char *end_of_line(char *cp, unsigned long *left) : { : unsigned long l = *left; : while (l && *cp != '\n') { 24.76 : 476a50: 80 3b 0a cmpb $0xa,(%rbx) 10.46 : 476a53: 0f 84 e7 00 00 00 je 476b40 : l--; : cp++; 21.19 : 476a59: 48 83 c3 01 add $0x1,%rbx : } : : static char *end_of_line(char *cp, unsigned long *left) : { : unsigned long l = *left; : while (l && *cp != '\n') { 0.94 : 476a5d: 49 83 ed 01 sub $0x1,%r13 4.85 : 476a61: 75 ed jne 476a50 : ... and yes, it's all the per-line crap. The perf tools are included with modern kernels in tools/perf (which also has a Documentation subdirectory). I can pretty much guarantee that once you start using it, you'll never use gprof or oprofile again. Linus