August 2010 Archives

I did a lot of profiling and optimization work for the latest releases of Moose and Class::MOP. My focus was on improving module compilation speed. My profiling workload was simply running perl -d:NYTProf -MMarkdent::Simple::Document -e1

The Markdent module in question loads a lot of Moose-using modules, uses plenty of roles, and is generally a good Moose compilation workout.

When profiling, I found that the biggest culprit was looking up methods in a module's namespace. We were making nearly 10,000 calls to Class::MOP::Mixin::HasMethods->get_method, which is one of our most expensive operations. I was able to reduce the number of calls to under 4,000.

What's a bit sad, however, is that this only appears to save 6-10% of the compilation time in real usage. I'm not sure why that is, but I think the issue is that the perl core's compilation time may be a big factor. As I said, loading that one Markdent modules loads a lot of modules (203 individual .pm files), and the raw overhead of simply reading all those files and compiling them may be a significant chunk of the compilation time.

It's really hard to test this theory, though, since I don't really have a non-Moose version of Markdent to test as a control.

Anyway, this latest release of Moose and CMOP at least provides some speedups. Thanks to Tim Bunce for working on Devel::NYTProf. It's a fantastic tool, and it makes profiling a pleasure to do.

About this Archive

This page is an archive of entries from August 2010 listed from newest to oldest.

July 2010 is the previous archive.

September 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Powered by Movable Type 4.38