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 <grep_buffer_1+0x1b0> : 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 <grep_buffer_1+0xc0> : ... 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 -- 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