On 1/31/19 7:01 PM, Nikita Popov wrote:
> On Thu, Jan 31, 2019 at 10:44 AM Dmitry Stogov <dmi...@zend.com 
> <mailto:dmi...@zend.com>> wrote:
> 
>     Hi Internals,
> 
> 
>     I'm glad to finally propose including JIT into PHP.
> 
> 
>     https://wiki.php.net/rfc/jit
> 
> 
>     In the current state it may be included both into PHP-8, where we
>     are going to continue active improvement, and into PHP-7.4, as an
>     experimental feature.
> 
> 
>     Thanks. Dmitry.
> 
> 
> This has been a long time on the horizon, nice to see this finally 
> moving forward :)
> 
> Here are some initial thoughts: I think that it's best to approach this 
> issue from a cost/benefit angle. The benefits of the JIT compiler are 
> roughly (and as already outlined in the RFC):
> 
>   * Significantly better performance for numerical code.
>   * Slightly better performance for "typical" PHP web application code.
>   * The potential to move more code from C to PHP, because PHP will now 
> be sufficiently fast.
> 
> However, there are also a number of costs, on which I'll expand in more 
> detail:
> 
> a) Maintenance: This is really my main concern. Right now there are 
> about 3-4 people who I would trust to carry out a non-trivial language 
> change, which will require touching the compiler, the virtual machine, 
> the optimizer and the persistence layer. Each of those components is 
> quite complex, in different ways. Some people who are comfortable with 
> doing VM changes will struggle with implementing optimizer changes.
> 
> Adding a JIT compiler exacerbates this issue further. Because this JIT 
> is dynasm based, the core JIT code is essentially written in raw x86 
> assembly. This will further limit the pool of people who will be able to 
> make non-trivial engine changes. Personally, I don't have any particular 
> familiarity with writing x86 assembly, so it will likely take a while to 
> get up to speed with this code.
> 
> b) Bugs and stability: I think that everyone is aware that the initial 
> PHP 7.3 release suffered from substantial stability issues, more than 
> new minor version releases tend to do. I think there are multiple 
> reasons for that (and we might want to start a conversation about our QA 
> processes in a separate thread), but one main contributing factor were 
> opcache optimizer bugs. Compiler optimizations are tricky and hard to 
> verify, and we often only learn about issues once the optimizer makes 
> contact with production codebases, which feature a much richer 
> collection of code patterns than our test suite. One can wonder whether 
> the relatively minor speedups we get from our optimization framework are 
> really worth having these stability issues...
> 
> Adding a JIT compiler adds a new dimension of stability issues. Next to 
> "simple" executor bugs, and optimizer bugs, we now get additional bugs 
> in the JIT. These are probably going to be hard to debug, as we'll have 
> to drop down from our usual C-level tooling, down to inspecting assembly.
> 
> c) Platform support: Having a JIT segregates platforms into two tiers: 
> Those that have JIT support and those that don't. While that is not a 
> problem per se, it does introduce some dangers. For example, if we 
> decide to more parts of our C code into PHP because PHP is fast enough 
> with a JIT, that will of course only be true for platforms that actually 
> have JIT support. I'm not terribly concerned about loosing out some 
> performance on MIPS, but we do need to make sure that all our main 
> platforms are supported (Windows is a must there, imho).

I don't see any problems with including JIT without Windows support.
Windows runs PHP much slower any way.

> d) Debugging: I'm not sure whether or not this is an issue (maybe the 
> RFC can clarify?), but I'm wondering if this will have an impact on 
> things like XDebug. Will it be possible to using XDebug to accurately 
> inspect variables at any point in time while the JIT is running? If not, 
> that would be a big tooling regression.

XDebug may work with JIT or opcache disabled.

> 
> I think those are the main points that come to mind right now...

Anyway, I'm mostly agree with all the points.

There are two options :)
- take the challenge and start developing JIT together
- forget about JIT, because we are afraid

Thanks. Dmitry.

> 
> Regards,
> Nikita

Reply via email to