Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:84242 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 41612 invoked from network); 3 Mar 2015 15:44:28 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Mar 2015 15:44:28 -0000 Authentication-Results: pb1.pair.com smtp.mail=ircmaxell@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=ircmaxell@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.217.172 as permitted sender) X-PHP-List-Original-Sender: ircmaxell@gmail.com X-Host-Fingerprint: 209.85.217.172 mail-lb0-f172.google.com Received: from [209.85.217.172] ([209.85.217.172:37077] helo=mail-lb0-f172.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 3F/5D-03783-AD6D5F45 for ; Tue, 03 Mar 2015 10:44:27 -0500 Received: by lbvn10 with SMTP id n10so37926668lbv.4 for ; Tue, 03 Mar 2015 07:44:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=XJNQz68KAiSaj2dmpAzhI/N1bGRRA+7WcBQ3oEPsnGA=; b=HqMMFs2Qfay4gi3F29Glc04vl/OxoTvjJG1KNKOVCs9Ka5+xaScRCAayPTJGvPuoAl DGMY7tthXMcHvHrfUvLHz3SS0NK+1fum7rccz1QJyjJnlQ4aPXO9BmjUvwIlJaYLEGTy vMpmXkE/8dVpEty8Ru7VLccbFLn+TnV+WMrADNSX9Vv2EI0tRy8II+Znrg+9kN7PBOVR rI7Cjt5lqkztkmDxCLbWzVJe4W25aorhfjWBwkZaLoVXivOStTDVKZGFHUs9ZXsM3NVM sxoBJwiwuryRa3VdaaVEBIcpyJjvllGmANMDiBqXZPHnztYkSHHJ09agj5un/rm4L4iK ZyPw== MIME-Version: 1.0 X-Received: by 10.152.246.41 with SMTP id xt9mr23445251lac.110.1425397463449; Tue, 03 Mar 2015 07:44:23 -0800 (PST) Received: by 10.25.43.9 with HTTP; Tue, 3 Mar 2015 07:44:23 -0800 (PST) In-Reply-To: <9656140ae786d42e7b0da11dbd416a61@mail.gmail.com> References: <54F08FF3.3040404@seld.be> <63262a9c0edd51bbf38df2a00c87340e@mail.gmail.com> <9977a20c9d756489f41e666d23c89e3f@mail.gmail.com> <9656140ae786d42e7b0da11dbd416a61@mail.gmail.com> Date: Tue, 3 Mar 2015 10:44:23 -0500 Message-ID: To: Zeev Suraski Cc: PHP Internals Content-Type: text/plain; charset=UTF-8 Subject: Re: [PHP-DEV] Re: Zend JIT Open Sourced From: ircmaxell@gmail.com (Anthony Ferrara) Zeev, On Tue, Mar 3, 2015 at 8:05 AM, Zeev Suraski 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