On Tue, Mar 3, 2015 at 6:44 PM, Anthony Ferrara <ircmax...@gmail.com> wrote:

> Zeev,
>
> On Tue, Mar 3, 2015 at 8:05 AM, Zeev Suraski <z...@zend.com> wrote:
> >> So I do apologize to the person. I don't to the code.
> >
> > I wanted to verify whether my gut was correct (minimal amount of output,
> and
> > stdout is in fact buffered - output shouldn't move the needle) and asked
> > Dmitry to rerun the C test on the same system, but this time with the
> output
> > code completely commented out:
> > real 0m0.011s  (+- 0.01)
> > user 0m0.011s  (+- 0.01)
> > sys 0m0.001s
> >
> > Apologies to the code might be in order :)
> >
> > The source of the JIT engine's edge is, as Dmitry and Andi said, the
> > CPU-specific optimizations that gcc -O2 doesn't generate, and therefore
> it
> > can actually be faster than a generic native executable in some (I would
> > guess not all that common) cases.
>
> So, let's put that to the test, shall we. I compiled and ran the "JIT"
> compiler (can we please stop calling it that, it's not).


This is JIT!


> along side
> PHP 5.5, PHP 7 and GCC -O0 through -O3.
>
> I also turned on the ob_start and off (commenting out the ob_start and
> ob_end_flush lines):
> ope
>
> https://docs.google.com/spreadsheets/d/1b4yFh0i62haDoQBRf8pOoi63OLrxRbecHSj9sQpD5Nk/edit?usp=sharing
>
> With ob_start, the "JIT" was fastest. Without it, it was more than 2x
> slower (slightly faster than -O0).
>

C FILE API is buffering as well.
I hope you knew.
Use write() instead of printf() in C to disable buffering as well.

Raw results (average):
>
> GCC -O0: 0.0258
> GCC -O1: 0.0160
> GCC -O2: 0.0144
> GCC -O3: 0.0140
> "JIT" /w ob_start: 0.011
> "JIT" /wo ob_start: 0.0238
> 5.5 /w: 1.273
> 5.5 /wo: 1.301
> 7 /w: 1.492
> 7 /wo: 1.545
>
> I used identical code to what Dmitry posted earlier, with the one
> exception that ob_start was commented out for the "/wo" runs.
>
Now, there's something really interesting in those results. The
> numbers given back from the "JIT" are far more stable than anything
> else (more than an order of magnitude more stable /wo, and several
> orders /w ob_start). Something smells off about it. I'm not so sure
> what off hand, but I'm going to dig further.
>

php -d opcache.jit_debug=0x100 bench.php


>
> Now, to the point that "gcc uses output buffering". Yes, it does.
> However, PHP (including the "JIT") is compiled with GCC. So it will
> use a similar output buffer unless you disable the buffer. The only
> place in 7 that we do that is sapi/phpdbg/phpdbg.c:881. So either way,
> you're going to be using the same output buffer on the STDOUT stream.
>

Please check php/sapi_cli.c and the setting of PHP_WRITE_STDOUT before
claiming others.

Thanks. Dmitry.



>
> Anthony
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to