List:Internals« Previous MessageNext Message »
From:Michael Widenius Date:June 5 2009 10:35am
Subject:Re: Profiling a storage engine
View as plain text  

>>>>> "MARK" == MARK CALLAGHAN <mdcallag@stripped> writes:

MARK> On Thu, Jun 4, 2009 at 2:24 PM, Michael Widenius <monty@stripped>
> wrote:
>> hi!

MARK> howdy

MARK> I have never had any luck using gprof on multi-threaded servers. If
MARK> you use Linux, then oProfile works great for flat profiles and Google
MARK> perftools works great for hierarchical profiles. But to use perftools,
MARK> you need to make some changes to the server.
>> gprof should work fine with MySQL.
>> At least I have in the past run the sql-bench benchmark with gprof
>> with good results.
>> In theory, to compile with gprof on intel/amd you should just have to
>> build with:
>> ./BUILD/compile-pentium64-gprof

MARK> The output for hierarchical profiling looks broken. I don't need flat
MARK> profiles from gprof as oprofile is much better for that. Here is an
MARK> example with functions from the HEAP, MyISAM and Innobase engines
MARK> mixed together. If you google for 'gprof multithread' or 'gprof
MARK> multithreaded' you will find details of problems that existed this
MARK> decade. I don't know if the referenced problems have been fixed.

MARK> So, it still doesn't work for me. Can anyone tell me how to fix it?
MARK> The output is from 'mysql-test-run --gprof innodb'. I compiled using
MARK> BUILD/compile-pentium-64-gprof after removing '$debug_configs'

I haven't use gprof with mysql-test-run, only with run-all-tests,
which is mainly a single threaded tests (but useful to find
bottlenecks in normal code).

MARK>                                 802             mysql_insert(THD*,
MARK> TABLE_LIST*, List<Item>&, List<List<Item> >&,
> List<Item>&,
MARK> List<Item>&, enum_duplicates, bool) <cycle 6> [218]
MARK>                               571638
MARK> select_insert::send_data(List<Item>&) <cycle 6> [113]
MARK> [6]     43.4    0.04    2.95  572440         write_record(THD*,
MARK> st_table*, st_copy_info*) <cycle 6> [6]
MARK>                 0.02    2.93  554320/555551
MARK> ha_innobase::write_row(char*) [7]
MARK>                 0.00    0.00   18115/411178      mi_write [138]
MARK>                 0.00    0.00      21/42
MARK> handler::print_error(int, int) [544]
MARK>                 0.00    0.00   18115/411168
MARK> ha_myisam::write_row(char*) [390]
MARK>                 0.00    0.00       8/29585

Sorry, but the text is so mangled that I can't easily read it.

(Haven't read gprof for 2 years now, and I forgot the exact format to
be able to comment)

If you could point out one case that is wrong with the output I may be
able to help you.

Profiling a storage engineSlava Akhmechet4 Jun
  • Re: Profiling a storage engineMARK CALLAGHAN4 Jun
    • Re: Profiling a storage engineSlava Akhmechet5 Jun
      • Re: Profiling a storage engineMARK CALLAGHAN5 Jun
    • Re: Profiling a storage engineMichael Widenius5 Jun
      • Re: Profiling a storage engineMARK CALLAGHAN5 Jun
        • Re: Profiling a storage engineMichael Widenius5 Jun
  • Re: Profiling a storage engineAntony Dovgal5 Jun
  • Re: Profiling a storage engineMarc Alff5 Jun
    • Re: Profiling a storage engineSlava Akhmechet8 Jun