Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:67060 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 87615 invoked from network); 11 Apr 2013 23:09:37 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Apr 2013 23:09:37 -0000 Authentication-Results: pb1.pair.com header.from=sgkelly4@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=sgkelly4@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.220.172 as permitted sender) X-PHP-List-Original-Sender: sgkelly4@gmail.com X-Host-Fingerprint: 209.85.220.172 mail-vc0-f172.google.com Received: from [209.85.220.172] ([209.85.220.172:55989] helo=mail-vc0-f172.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 35/93-01446-0B247615 for ; Thu, 11 Apr 2013 19:09:36 -0400 Received: by mail-vc0-f172.google.com with SMTP id gd11so1740974vcb.31 for ; Thu, 11 Apr 2013 16:09:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=RYZoRE9Ez2K0qfICbSLMZ5i00ejx5S0o8x7y8EBS+Fk=; b=lhWwT8vW/FE5+CSEnVYnUdg08ESXfn0f+ZaZHPou9pD1/Uq0jJiLpohgTbW6ZAXbl1 IBhk1mr3oogqNXUlT9AHZ1d88I5xFOZqkWWjDHnshORFu5+SbfAnPueXQtzIIQPmQX+C ZM7iISY6CG6QCrq3tqJes6cWDPW7L11td6Uc54NktCik5f71cGb92SUb285NiujWL0v4 48qQerdQWCDLZTr19MNtD9i7DEdj49sh3Q+5bodMehH8hI/6IfUEZaXFAZd37CstP5X7 gL+QN2O5p7fZpf4+xIHViUOlIo/yBbXG1loyzlK2UI0A63PbYSqWTFhzO91Wc9xTbsAN lh9A== X-Received: by 10.58.230.98 with SMTP id sx2mr1867121vec.33.1365721773169; Thu, 11 Apr 2013 16:09:33 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.135.5 with HTTP; Thu, 11 Apr 2013 16:09:11 -0700 (PDT) In-Reply-To: <51673FD1.2010704@garfieldtech.com> References: <51673FD1.2010704@garfieldtech.com> Date: Thu, 11 Apr 2013 16:09:11 -0700 Message-ID: To: Larry Garfield Cc: PHP internals Content-Type: multipart/alternative; boundary=047d7bea42e026e2cd04da1de1e0 Subject: Re: [PHP-DEV] OPcache optimizer improvement in PHP-5.5? From: sgkelly4@gmail.com (Graham Kelly-Cohn) --047d7bea42e026e2cd04da1de1e0 Content-Type: text/plain; charset=ISO-8859-1 I don't think this is a safe optimization. In the following case it would output 'b' and not 'a' which is the correct result: a.php: b.php: It is certainly not likely for a constant to be defined twice but PHP currently just issues a notice and continues with the first constant value. On Thu, Apr 11, 2013 at 3:57 PM, Larry Garfield wrote: > Speaking as a userspace developer and site admin, I'd be fine with trading > a more expensive compilation for a runtime improvement. Even a 100% > increase in compilation time would pay for itself over only a dozen or so > requests (assuming the runtime improvements are non-trivial, too). > > Naturally some optimizations are harder to do than others given PHP's > architecture, but trading more expensive compile for cheaper runtime, even > if not a 1:1 trade, would be a win IMO. > > --Larry Garfield > > > On 4/10/13 9:16 AM, Dmitry Stogov wrote: > >> For now, the optimizations we do are quite chip. >> They may increase the compilation time on first request by 2, but on >> following requests we will get it back. >> Once we come to really expensive optimizations we will do it "offline" (in >> context of a separate process). >> >> Thanks. Dmitry. >> >> >> On Wed, Apr 10, 2013 at 5:16 PM, Florin Patan >> wrote: >> >> On Wed, Apr 10, 2013 at 4:07 PM, Arvids Godjuks < >>>> arvids.godjuks@gmail.com> >>>> >>> wrote: >>> >>>> 2013/4/10 Dmitry Stogov >>>> >>>> Hi, >>>>> >>>>> Recently, I've found that OPcache optimizer misses a lot of abilities, >>>>> because it handles only one op_array at once. So it definitely can't >>>>> perform any inter-function optimizations (e.g. inlining). >>>>> >>>>> Actually, it was not very difficult to switch to "script at once" >>>>> >>>> approach. >>> >>>> The attached patch demonstrates it and adds per script constants >>>>> substitution explained in the following script >>>>> >>>>> >>>> define("FOO", 1); >>>>> function foo() { >>>>> echo FOO . "\n"; // optimizer will replace it with: echo "1\n"; >>>>> } >>>>> ?> >>>>> >>>>> Of course, I ran the PHP test suite and it passed all the same tests. >>>>> Personally, I think it's safe to include this patch into 5.5 and make a >>>>> green light to some other advanced optimizations in 5.5. (e.g. >>>>> >>>> conversion >>> >>>> INIT_FCALL_BY_NAME into DO_FCALL). >>>>> >>>>> Any thoughts? >>>>> >>>>> Thanks. Dmitry. >>>>> >>>>> -- >>>>> PHP Internals - PHP Runtime Development Mailing List >>>>> To unsubscribe, visit: http://www.php.net/unsub.php >>>>> >>>>> >>>> >>>> Hi! >>>> >>>> Many obvious optimizations are not used due to the fact, that script >>>> translation into opcode state has to be fast. The nature of PHP dictated >>>> that and this was re-iterated countless times on this mailing list by >>>> the >>>> core developers. >>>> >>>> To do advanced stuff, you have to create some sort of pre-compile or >>>> storing that compiled code reliably on disk so that if memory cache is >>>> dropped or restart is done, there is no significant preformance hit >>>> while >>>> all the code compiles into optimized opcode again. >>>> >>>> I would also imagine that good part of the optimizations would require >>>> multiple files to be processed and optimized, but due to dynamic nature >>>> >>> of >>> >>>> the PHP opcode compilation is done on per-file basis, so do the >>>> optimizations. >>>> >>>> It's very commendable that you want to push optimizations and stuff, but >>>> there are some fundamental stuff that needs to be cared of to do some >>>> really good stuff. >>>> >>>> My 0.02$ >>>> >>> >>> Hello, >>> >>> >>> If applying optimizations in multiple passes would be a problem for >>> speed, especially on the first request, then maybe a way to solve this >>> would be to have a configurable variable like: opcache.passes which is >>> between 1 and 10 (lets say) and then have the engine do something like >>> this: >>> - load the file, compile it and apply a first round of 'quick' >>> optimizations for the first time and mark it as passed once; >>> - next request, load the compiled version, apply another round of >>> optimization then mark it as a second pass >>> - repeat the above step until the optimization passes in the said file >>> = opcache.passes value >>> >>> This way only the initial requests will be affected by this but in a >>> way that the hit on those requests is smaller that applying all the >>> steps at once. >>> I'm really not sure if it's that easy to implement but 'on paper' this >>> could be the way to solve it imho. >>> >>> What do you think, does it make sense? >>> >>> >>> >>> Best regards >>> ---- >>> Florin Patan >>> https://github.com/dlsniper >>> http://www.linkedin.com/in/**florinpatan >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >>> >>> >> > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > --047d7bea42e026e2cd04da1de1e0--