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