Single Stack for all generators

php.internals

Dmitry Stogov

10 years ago
Hi, Nikita, please review the patch https://gist.github.com/dstogov/06116f1610f45f8152ine3a9927c6c243ac It's the next attempt to use the single stack for all generators. Now I don't see any problems or BC breaks. In case "yield" is used as an expression in context of function call. e.g. var_dump(yield), engine backups and then restores active call frame chain. Bob tested the patch on application that intensively uses generators, and reported: 15% less L2 cache loads 20% less cycle stalls due to memory subsystem 3% more CPU_CLOCK_UNHALTED due to additional freeze/restore. I'm going to commit this patch tomorrow. Thanks. Dmitry.

Joe Watkins

10 years ago
404 Cheers Joe On Wed, May 11, 2016 at 3:54 PM, Dmitry Stogov <dmitry@zend.com> wrote:

Bob Weinand

10 years ago
Looks like there is an "ine" in the link: Correct link: https://gist.github.com/dstogov/06116f1610f45f81523a9927c6c243ac <https://gist.github.com/dstogov/06116f1610f45f81523a9927c6c243ac> Bob

Nikita Popov

10 years ago
On Wed, May 11, 2016 at 4:54 PM, Dmitry Stogov <dmitry@zend.com> wrote:
> Hi, > > > Nikita, please review the patch > https://gist.github.com/dstogov/06116f1610f45f8152ine3a9927c6c243ac > > It's the next attempt to use the single stack for all generators. > > Now I don't see any problems or BC breaks. > > > In case "yield" is used as an expression in context of function call. e.g. > var_dump(yield), engine backups and then restores active call frame chain. > > > Bob tested the patch on application that intensively uses generators, and > reported: > > 15% less L2 cache loads > > 20% less cycle stalls due to memory subsystem > > 3% more CPU_CLOCK_UNHALTED due to additional freeze/restore. > > > I'm going to commit this patch tomorrow. >
The patch looks fine to me. From my own testing with a "Hello World" Aerys server, after multiple benchmark runs it previously started to mmap+munmap two new MM segments on each request, leading to a decline from 50k rps to 5k. With the patch this no longer occurs and the rps is stable at > 50k rps. (Though that may be more luck than anything.) Nikita