Re: [RFC] Performance improvements
| From: | Derick Rethans | Date: | Tue, 20 Apr 2010 10:41:23 +0000 |
| Subject: | Re: [RFC] Performance improvements | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-48019@lists.php.net to get a copy of this message | ||
On Tue, 20 Apr 2010, Dmitry Stogov wrote:
> Derick Rethans wrote:
> > On Tue, 13 Apr 2010, Dmitry Stogov wrote:
> >
> > > I've published all the patches, their description and performance
> > > evaluation
> > > at http://wiki.php.net/rfc/performanceimprovements
> >
> > I've a few questions and comments:
> >
> >
> > http://wiki.php.net/rfc/performanceimprovements#zend_engine_vm_tuning
> >
> > You're writing that the ZEND_CATCH opcode has to be used with a constant
> > class name, so how would "catch ( self $e )" be represented in op-codes now?
>
> I dropped such possibility. Does someone use it?
> For me it looks useless. If it's really necessary I can try not to drop it.
You have a point, it looks quite useless. But of course, I am sure
somebody has used this :)
> > Some patches seem to be changing tests; I think we should avoid that and
> > instead create a new test that only runs for the new version, and add a
> > qualifier to the old one (the one that you're now modifying) to *not* run
> > with the new PHP version.
>
> It's not a problem. I can do it.
>
> The patch made one test to emit warning messages in different order, but on
> the other hand the change made the performance better.
Yeah, I don't care so much about the order... more that "changing tests"
is usually a bad thing. In order to make this easier, I'll give the
"skip for specific versions" phpt section a shot this week.
> > 3-literals.diff.txt makes the opcode arrays again a bit more complex to
> > disect. Perhaps you could add a bit of documentation describing how all the
> > things work together now? Like which index in whivh fields points to which
> > other structure etc?
>
> it's not a problem to add a few words about it:
>
> - each op_array has an array of literals (constant values)
> - opocde operands don't contain zval directly any more but points to this
> table instead
> - during compilation they are accessible by index e.g.
> op_array->literals[opline->op1.constant].constant
> - the pass_two() changes indexes into pointers so during execution they are
> accessible by opline->op1.zv
>
> Do you like me to add this into WiKi or some text file?
I've added a new section to the wiki at
http://wiki.php.net/internals/engine with this
information.
regards,
Derick
--
http://derickrethans.nl | http://xdebug.org
Like Xdebug? Consider a donation: http://xdebug.org/donate.php
twitter: @derickr and @xdebug