Re: XML_RPC2 and class profileration, or the myth of require_once performance penalty

From: Date: Thu, 12 May 2005 23:33:46 +0000
Subject: Re: XML_RPC2 and class profileration, or the myth of require_once performance penalty
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-37612@lists.php.net to get a copy of this message
Interesting figures, I wonder what they would be like with a compiler cache. But I think they do illustrate the point that while require_once may slow things down and It is fixable in the engine, it may not be worth the bother... Regards Alan On Thu, 2005-05-12 at 08:55 +0100, Sergio Carvalho wrote: > Hi all, > > During the discussion around my XML_RPC2 proposal, the ever present > dogma of decreasing performance against the number of files used was > raised again. This is, for me, a blatant case of early optimization, > prevalent among PHP developers, so I thought it would be useful to take > the chance and use XML_RPC2 to prove the falsity of the dogma. > > The popular mantra goes somewhere along these lines: > - "Benchmarking shows that the most expensive operation in PHP is > require_once, even with a stat cache." > - "Multiple classes incur heavy performance losses, as it is necessary > to compile the class in every request". > > So, I thought I could get XML_RPC2 which, according to Greg is heavily > misdesigned in the XML_RPC_Value subtree, and put it through a profiler. > The benchmark was done using the already existing unit test, which makes > an echo request against a local (python) xml-rpc server. > > The results are here: > 1. http://files.sergiocarvalho.com/2005/xml_rpc2/kcg_1.png > 2. http://files.sergiocarvalho.com/2005/xml_rpc2/kcg_2.png > 3. http://files.sergiocarvalho.com/2005/xml_rpc2/kcg_3.png > 4. http://files.sergiocarvalho.com/2005/xml_rpc2/kcg_4.png > 5. > http://files.sergiocarvalho.com/2005/xml_rpc2/cachegrind.out.3356823835 > > The most interesting images are (2) and (4). (2) shows execution time as > coloured rectange areas, with times in percentage of total. Conclusions > from observing (2): > - 55% of time is spent executing the call, 28% setting up XML_RPC2, 5% > parsing the client code (the rest in the test script itself). > - The several require_once's needed for XML_RPC_Value instances, > account for 5% of request time. > > Image (4) shows the call tree, with time in 10^-7 second units. From > (4), we can further observe that total request execution time was 14ms. > From these, I'd like to call to attention that the HTTP transaction cost > 5ms. For real world scenarios, with remote HTTP, this number would be be > closer to 200ms, making *everything* else account for (9/200) = 4.5%. As > requiring once and parsing accounts for 5% of this value, when > discussing performance related to require_onces, we are discussing > 0.005% of total execution time. > > In my experience, reducing the number of files is here often used as an > excuse for affecting package design. *Do not do this* without going > through a profiler first. For most cases, there will be something (DB, > image processing, network communication) that will overshadow any > performance penalties you pay with require_once, which isn't that big > anymore. > > I'd like to hear your experiences. Let's try to debunk this myth once > and for all. > > Cheers, > > Sérgio Carvalho >

« previous php.pear.dev (#37612) next »