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