On Dec 3, 2007 4:01 PM, Andi Gutmans <[EMAIL PROTECTED]> wrote: > Hi all, > > > > Was hoping to send this off earlier but I was travelling for the past > week and had very limited email access. > > As promised in the past few weeks we have spent a significant amount of > time in reviewing the garbage collector work and testing it in our > performance lab. Dmitry has been exchanging ideas and patches with David > Wang during this time. Suffice to say that as I've mentioned in the > past, memory management is an extremely sensitive piece of PHP, which is > why it was important for us to review this work in great depth before > committing it to the code base. > > > > The updated patch still retains the same algorithm as David's original > implementation however the data structures have been changed in order to > work faster and use less memory. > > > > The revised patch has the following advantages: > - It fixes several crash bugs > > - Enhances performance by removing several unnecessary checks > - The memory overhead was reduced (from 12 to 4 bytes for each > heap-allocated zval) > - The speed of "clean" PHP code (code that doesn't create cycles) was > improved > - Additional test cases were created > > The end result is a more stable and faster GC patch. That said we have > yet to find real-life applications that create significant cycles which > would benefit from this patch. In fact as you'll see from the results > our tests show an increase in maximum memory use and slower execution > (to be fair they are marginal). > > > > We have tested both PHP_5_3 without any patches, the original patch and > the new patch. > > > > The following table shows execution time (seconds for N requests) and > slowdown. > > > > PHP_5_3 > > Original GC patch > > Current GC patch > > > > > > slowdown > > > > slowdown > > bench > > 11,550 > > 12,310 > > 6,58% > > 12,170 > > 5,37% > > hello > > 8,781 > > 8,852 > > 0,81% > > 8,813 > > 0,36% > > xoops > > 128,500 > > 135,100 > > 5,14% > > 130,200 > > 1,32% > > static > > 18,540 > > 20,840 > > 12,41% > > 18,920 > > 2,05% > > qdig > > 29,320 > > 30,270 > > 3,24% > > 29,610 > > 0,99% > > qdig2 > > 13,960 > > 14,100 > > 1,00% > > 14,090 > > 0,93% > > The next table shows memory usage in MB and overhead > > > > PHP_5_3 > > Original GC patch > > Current GC patch > > > > > > overhead > > > > overhead > > hello > > 13,750 > > 13,945 > > 1,42% > > 13,765 > > 0,11% > > xoops > > 18,036 > > 18,636 > > 3,33% > > 18,568 > > 2,95% > > static > > 15,300 > > 16,000 > > 4,58% > > 15,308 > > 0,05% > > qdig > > 14,820 > > 15,008 > > 1,27% > > 14,828 > > 0,05% > > qdig2 > > 14,824 > > 15,012 > > 1,27% > > 14,838 > > 0,09% > > > > To summarize the patch lead to approx. 5% slowdown and 3% memory > overhead for typical applications (as always, you mileage may vary > depending on your system's architecture and OS although my guesstimate > is that you will see even worse results in a 64bit environment). We also > tested SugarCRM to get another sanity for these results and we got > similar results. > > > > I am not quite sure where this leaves us with this patch. On one hand I > think now the effort has been made it's a good thing to offer it as part > of PHP. The downside is of course some performance degradation and > possible instabilities as this patch continues to stabilize (it took > about two releases for us to stabilize the Zend Memory Manager even > after in-depth testing due to edge cases in allocation patterns and > various extensions, etc...).I'd be surprised if our team has found all > possible bugs. > > > > Personally I think the decision should be either in or out. Adding this > as a compile option is not a good idea as it would create binary > compatibility issues and would be a pain for the community. I think my > inclination is to commit the patch, not have it #ifdef'ed but always > compiled but to have the garbage collection itself turned off by default > (mainly for stability reasons. Note: the increased memory footprint and > performance loss also exists with the collection itself turned off). We > can turn it on when we're in dev for snapshots so that we iron out bugs. > That said, as you can see from the results most people and real-life > applications will be worse off than today. > > > > Thanks to David & Dmitry for working hard on this (and everyone else who > contributed). > > > > The stage is open for ideas/thoughts/suggestions J > > > Andi > >
Andi, I don't know about how it worked for anyone else, but the tables didn't display properly on Gmail, so I had a hard time keeping up with the performance differences. If you have this in a separate file, could you send it to me as an attachment? I have a few real-world benchmarks I'd like to try from the angle of the shared-webhost industry (lots of users with horrible code running simultaneously, et cetera) which I'd like to compare to your notes. Thanks. -- Daniel P. Brown [office] (570-) 587-7080 Ext. 272 [mobile] (570-) 766-8107 If at first you don't succeed, stick to what you know best so that you can make enough money to pay someone else to do it for you. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php