Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:84253 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 62860 invoked from network); 3 Mar 2015 17:17:46 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Mar 2015 17:17:46 -0000 Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 209.85.220.175 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 209.85.220.175 mail-vc0-f175.google.com Received: from [209.85.220.175] ([209.85.220.175:39352] helo=mail-vc0-f175.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id E9/91-03783-9BCE5F45 for ; Tue, 03 Mar 2015 12:17:45 -0500 Received: by mail-vc0-f175.google.com with SMTP id hq12so13862957vcb.6 for ; Tue, 03 Mar 2015 09:17:43 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=dxbixmJsSEcTwEQtEHMJCdFiGtBsOtNacMBlBrBjNl8=; b=XE1yUddwZQZFlucBt5udKzQhmiBD2VuHMJfZDsDaX8EukeXVJ+zTVIq997bAW7t7k8 ubuj9UVr1xb2Id/JZfThjAcz8SPm6M/FVOHNySqcZt9ou6oBmOE1J/kiWrrZiZbB2Nik Z3lue3T80mKb7mxLieunkm2PtU2De3DmhG3XMtG5hUj6keZ2mU8IUMG0iS4UdprrY1tC Y++fJqdJn0IRTdnkfMPJWlkWuICsdxrOL5Lwd5lhqb6uBJEuTBnTkWe8wj9520bDMDGp mImIYx6GNcmOJ6AX93+iP2JYF1omOJcoZEZn1RNnatdk9zu/hvNDsx/M94HOoQLC1fim mXDQ== X-Gm-Message-State: ALoCoQlQS3oe4mk2h17Ln74D6+UKMz4Zuh0BDhXdth2uOPzr7pc/jB20l9xwLTed25NrulpDVFY6L7hD75fqjfv16aTL87B+SXcLI7TE+gEQSfpH7ZluMLdWvEXWHofckzMKV6rVTF2DrW4bNXLnABNinkCq5hCKHQ== MIME-Version: 1.0 X-Received: by 10.52.52.136 with SMTP id t8mr30076259vdo.49.1425403062997; Tue, 03 Mar 2015 09:17:42 -0800 (PST) Received: by 10.52.113.231 with HTTP; Tue, 3 Mar 2015 09:17:42 -0800 (PST) In-Reply-To: <4ee494ad54939f8147b0038a503b88e8@mail.gmail.com> References: <54F08FF3.3040404@seld.be> <63262a9c0edd51bbf38df2a00c87340e@mail.gmail.com> <9977a20c9d756489f41e666d23c89e3f@mail.gmail.com> <9656140ae786d42e7b0da11dbd416a61@mail.gmail.com> <4ee494ad54939f8147b0038a503b88e8@mail.gmail.com> Date: Tue, 3 Mar 2015 21:17:42 +0400 Message-ID: To: Zeev Suraski Cc: Anthony Ferrara , PHP Internals Content-Type: multipart/alternative; boundary=089e0115f0483b6f8f0510658362 Subject: Re: [PHP-DEV] Re: Zend JIT Open Sourced From: dmitry@zend.com (Dmitry Stogov) --089e0115f0483b6f8f0510658362 Content-Type: text/plain; charset=UTF-8 On Tue, Mar 3, 2015 at 6:57 PM, Zeev Suraski wrote: > > -----Original Message----- > > From: Anthony Ferrara [mailto:ircmaxell@gmail.com] > > Sent: Tuesday, March 03, 2015 5:44 PM > > To: Zeev Suraski > > Cc: PHP Internals > > Subject: Re: [PHP-DEV] Re: Zend JIT Open Sourced > > > > 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/1b4yFh0i62haDoQBRf8pOoi63OLr > > xRbecHSj9sQpD5Nk/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. > > > Anthony, > > What you demonstrate here is that direct output slows PHP down (at least > php-cli), but not that it's the reason that PHP runs faster. > As we don't really care about the output layers when benchmarking > Mandelbrot - but rather at how fast the algorithm is executed, eliminating > output in both tests is the simplest and most accurate to benchmark the raw > performance of the execution engine. And the (very experimental) JIT > engine > wins here. > > > 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". > > Not gcc, glibc's stdout. > CLI uses unbuffered write() syscall. Thanks. Dmitry. > > > 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. > > Actually no, it doesn't, not if you use CLI. The CLI SAPI uses the > write(1, > ...) syscall, which is unbuffered. You would have been correct if it was > using fwrite(..., stdout) - but it doesn't. See > > stackoverflow.com/questions/1360021/why-fwrite-libc-function-is-faster-than-write-syscall > > So in reality, what Dmitry did by adding the ob_start() call is actually > make the PHP version (more or less) equivalent to the C version, as opposed > to giving it an unfair advantage. > > If you *really* want to test the raw performance difference, get rid of the > output code altogether in both the PHP and C versions. I haven't tried > that, but as I do believe our output buffering code is a lot more > complicated than that of glibc's streams - my guess is that the gap between > the two implementations would actually grow bigger, and in PHP's favor. We > already know that the PHP version with the output (using the output > buffering layer) runs as fast as the C version with no output at all. > > Zeev > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > --089e0115f0483b6f8f0510658362--