qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] QOM cast debug


From: Laurent Desnogues
Subject: Re: [Qemu-devel] QOM cast debug
Date: Thu, 20 Mar 2014 14:24:52 +0100

On Thu, Mar 20, 2014 at 1:45 PM, Paolo Bonzini <address@hidden> wrote:
> Il 20/03/2014 11:52, Laurent Desnogues ha scritto:
>
>> Hello,
>>
>> while looking at some perf results, I saw object_dynamic_cast_assert
>> taking more than 3% of the run time.
>>
>> After some digging I found out that this time can be cut by passing
>> --disable-qom-cast-debug to configure.  This was added by Paolo:
>>
>> commit 3556c233d931ad5ffa46a35cb25cfc057732ebb8
>> Author: Paolo Bonzini <address@hidden>
>> Date:   Fri May 10 14:16:40 2013 +0200
>>
>>     qom: allow turning cast debugging off
>>
>>     Cast debugging can have a substantial cost (20% or more).  Instead of
>> adding
>>     special-cased "fast casts" in the hot paths, we can just disable it in
>>     releases.  The tracing facilities we just added make it easier to
>> analyze
>>     those problems that cast debugging would reveal.
>>
>> I find it odd that the default is to have this debug flag on by
>> default while the other such debug options are off.  Wouldn't it make
>> more sense to have it off by default and let devs turn it on?
>
>
> I agree, but Anthony (and Andreas?) did not.
>
> Which path is calling object_dynamic_cast_assert so much?  It was agreed to
> just use C casts in hot code.

The culprit seems to be ENV_GET_CPU:

#define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e))
#define CPU(obj) OBJECT_CHECK(CPUState, (obj), TYPE_CPU)
#define OBJECT_CHECK(type, obj, name) \
    ((type *)object_dynamic_cast_assert(OBJECT(obj), (name), \
                                        __FILE__, __LINE__, __func__))

                0.00    0.00 1391069/289549110     io_writel [46]
                0.00    0.00 2038947/289549110     helper_le_stl_mmu [32]
                0.00    0.00 3986870/289549110     helper_ret_ldub_mmu [31]
                0.00    0.00 8131587/289549110     helper_ret_ldb_cmmu [28]
                0.00    0.00 17849223/289549110     helper_le_ldul_mmu [18]
                0.00    0.00 32244969/289549110     tb_find_slow [26]
                0.00    0.00 32347716/289549110
arm_cpu_handle_mmu_fault [11]
                0.00    0.00 32347737/289549110     get_phys_addr_v6 [17]
                0.00    0.00 32598025/289549110     get_page_addr_code [27]
                0.00    0.00 124705628/289549110     tb_find_fast [25]
[106]    0.0    0.00    0.00 289549110         object_dynamic_cast_assert [106]


Laurent



reply via email to

[Prev in Thread] Current Thread [Next in Thread]