Nicholas Clark <[EMAIL PROTECTED]> wrote:
> With all the perl scalars now indirecting through PMCs, Ponie's performance
> has dropped. Not surprising, in the general case, but the performance of
> lib/locale.t is vile, and I'm wondering if that regression test hits
> something pathological. It slows to a crawl after subtest 99 (line 240 in
> http://public.activestate.com/cgi-bin/perlbrowse?file=lib%2Flocale.t&rev=
> search for the text Find locales
> )

> I built ponie with profiling, and I find that it's spending an inordinate
> amount of time in trace_children (half a second per call):

That's very likely caused by GC_DEBUG. Hash lookup calls string_equal
which triggers a DOD run on *each* string compare. Please recompile
parrot with DISABLE_GC_DEBUG=1 in parrot.h. That could help. But see
below.

> Flat profile:

> Each sample counts as 0.000999001 seconds.
>   %   cumulative   self              self     total
>  time   seconds   seconds    calls  ms/call  ms/call  name
>  29.55    379.89   379.89     2381   159.55   503.64  trace_children
>  26.06    714.95   335.06 1337922049     0.00     0.00  pobject_lives
                            ^^^^^^^^^^

Boy that's a lot.

>   0.07   1266.73     0.86  9459863     0.00     0.13  get_free_object_df
                             ^^^^^^^

How big is the live data set during that test? Seems to be rather big.

I don't see any reference to add_free_object, so I presume the test is
shuffling 9.5 M PMCs around. How much RAM has your machine?

> Any suggestions on what stats to gather to try to work out where things are
> going wrong?

First make sure, that GC_DEBUG(interpreter) := 0, or set
DISABLE_GC_DEBUG. Then - if it's still slow - we have to look further,
e.g. what actually triggers the DOD runs.

> Nicholas Clark

leo

Reply via email to