Hi!
Wow, that's really cool. Extremely cool. (puts blog into RSS reader) I need to read the blogs of Wikimedia developers more often.
Yeah, once a year we do post something.
BTW, from the diagram, it looks like cleanup takes up the largest amount of time. Unavoidable?
That diagram is one year old ;-) Cleanup is also outputing data to skin, etc. We fixed lots of stuff there already.
I'll probably put some fresh png's soon, would be especially cool if there was some batch way to produce them. The interesting part is that you can click on any node in graph and get detailed information about it - who calls it (and time spent from every caller), what is being called (and again, time spent for each callee), etc.
Yeah, I did press show more. What I meant was that a lot of the profile points are not Setup.php related, the one's that have Setup.php prefixed are only in the dozens. Then again, I just realized that I really don't know anything about optimizing MediaWiki.
The profiling we have there, is kind of real time one (php sending udp messages to collection daemon, hehe, http://dammit.lt/2006/01/11/ profiling-web-applications/ ;-) It is more designed for us to deal with global scope of things going on. Stuff like detailed analysis of every request, all calls, etc, can be done using per-request profiling.
On the other hand, per-request profiling may disclose funny stuff - like now I'm looking at the fact that edit tools are spending like... up to 40% of edit page rendering, because of multiple calls to charinsert plugin. Edittools are deterministic - they won't change at different pages, so rendering them is not required. It would be really nice if we could cache stuff like that, but on the other hand, it may be less than 1% of total cluster time.
That is where we add general profiling hooks and try to figure out what may need serious attention.
Right now anyone on cluster can poke files at srv55:/tmp/traces/ ;-)
If the traces provide the parameters passed to the functions, probably yes. I can't see APD style calltrees (no parameters at all) having private info, but you guys use XDebug...
Our traces don't have parameters now, though, it would be pretty interesting to check with parameters some day :) Hehe, I'll discuss the idea of providing public traces. Few gigabytes of them (that is... a minute run of single apache server) may provide interesting set of data, wouldn't it? :)
BR, Domas