From: John L. <le...@mo...> - 2005-04-12 03:33:08
|
I've just committed a feature allowing the user to get diffs of profiles. It's still incomplete and probably buggy, but people are encouraged to try it out. The typical usage is: ]$ ./pp/opreport -lx `which opreport` { archive:orig/ } { archive:new/ } -D smart | more CPU: PIII, speed 863.233 MHz (estimated) Counted CPU_CLK_UNHALTED events (clocks processor is not halted) with a unit mask of 0x00 (No unit mask) count 100000 Counted DATA_MEM_REFS events (all memory references, cachable and non) with a unit mask of 0x00 (No unit mask) count 10000 samples % diff % samples % diff % symbol name 1166 26.0792 +0.2568 4968 27.2324 +0.2628 op_bfd::get_symbol_range(unsigned int, unsigned long&, unsigned long&) const ... 56 1.2525 -4.4e-01 387 2.1214 -4.1e-01 list<op_bfd_symbol>::merge(list<op_bfd_symbol>&) ... 6 --- --- 16 --- --- separate_token(string const&, char) ... 2 0.0447 +++ 3 0.0164 +++ vector<list<image_set>>::~vector() ... The "diff %" fields are new. They represent the percentage increase of the "%" field for the profile (roughly, "this symbol is now x percent more important"). Completely new symbols are marked with '+++', and ones that have disappeared are marked with '---': The invocation above is typical: you specify parts of the profile spec for both, then inside { }, specify the two separate ones. So you can do: opreport -lx `which opreport` { tgid:545 } { tgid:576 } # compare two different invocations opreport -lx `which opreport` { archive:old } { } # compare an archive with current session opreport -lx ./thread_test { cpu:0 } { cpu:1 } # compare across CPUs and all the other things that the profile spec design lets you separate (except lib images with several different apps, which is somewhat troublesome to implement right now). Currently, the diff considers a symbol "the same" if it has the same name in the same image, used by the same application. Please give it a go and let us know what you think. thanks, john |