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). 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):

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).

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.

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.

Anthony

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

Reply via email to