rfc:opcache.no_cache

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
rfc:opcache.no_cache [2020/05/23 14:04]
tandre Improve documentation of ini settings, add another example use case
rfc:opcache.no_cache [2020/06/13 15:05]
tandre add note on opcache
Line 1: Line 1:
 ====== PHP RFC: Opcache optimization without any caching ====== ====== PHP RFC: Opcache optimization without any caching ======
-  * Version: 0.3+  * Version: 0.4
   * Date: 2020-05-16   * Date: 2020-05-16
   * Author: Tyson Andre <tandre@php.net>   * Author: Tyson Andre <tandre@php.net>
-  * Status: Under Discussion+  * Status: Declined
   * Implementation: https://github.com/php/php-src/pull/5504   * Implementation: https://github.com/php/php-src/pull/5504
   * First Published at: https://wiki.php.net/rfc/opcache.no_cache   * First Published at: https://wiki.php.net/rfc/opcache.no_cache
Line 109: Line 109:
   * Normally, opcache optimizes a file based only on that one file's contents (this makes it safe to read from cache even when loading a different combination of files). When ''opcache.allow_cache=0'' is used, it may be possible to use all of the class, function, constant, etc. definitions parsed from previously parsed files (to eliminate dead code, inline function calls, etc). https://wiki.php.net/rfc/preload mentioned something similar in the Future Scope.   * Normally, opcache optimizes a file based only on that one file's contents (this makes it safe to read from cache even when loading a different combination of files). When ''opcache.allow_cache=0'' is used, it may be possible to use all of the class, function, constant, etc. definitions parsed from previously parsed files (to eliminate dead code, inline function calls, etc). https://wiki.php.net/rfc/preload mentioned something similar in the Future Scope.
  
-===== Proposed Voting Choices =====+===== Vote =====
  
-Add the ''opcache.allow_cache'' ini setting to support opcode optimization without caching. (Yes/No vote, requiring 2/majority)+Voting started on May 30th and ends on June 13th 
 + 
 +<doodle title="Add opcache.allow_cache ini setting to support opcode optimization without caching" auth="tandre" voteType="single" closed="true"> 
 +   Yes 
 +   No 
 +</doodle> 
 + 
 +==== If you voted no, why? ==== 
 + 
 +The [[https://wiki.php.net/rfc/opcache.no_cache#discussion|Discussion]] section mentioned alternative approaches to this RFC. This feedback is being gathered if it may be useful for other work on Opcache such as moving optimizations into PHP's core. 
 + 
 +  - I would only vote for optimizations without caching if Opcache's opcode optimizations were moved into core first. 
 +  - I don't want any form of optimization without caching / I think ''opcache.file_cache'' should be used instead 
 +  - I think different ini options/values should be used to do this 
 +  - Other 
 + 
 +<doodle title="If you voted no on opcache.allow_cachewhy?" auth="tandre" voteType="multi" closed="true"> 
 +   * 1 
 +   2 
 +   3 
 +   * 4 
 +</doodle> 
 + 
 +Also, would you be interested in moving opcode optimizations and the JIT out of the zend_extension opcache into PHP's core? 
 + 
 +<doodle title="I would be interested in moving opcode optimizations into core" auth="tandre" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
 ===== Changelog ===== ===== Changelog =====
  
 0.2: Previously, the ini setting override to disable caching was ''opcache.no_cache=1''. This was changed to ''opcache.allow_cache=0'' to avoid double negatives and to be consistent with naming of other ini settings such as ''allow_url_fopen'' and ''allow_url_include''. 0.2: Previously, the ini setting override to disable caching was ''opcache.no_cache=1''. This was changed to ''opcache.allow_cache=0'' to avoid double negatives and to be consistent with naming of other ini settings such as ''allow_url_fopen'' and ''allow_url_include''.
 +
 0.3: Fix documentation of changes to ''opcache_get_status()'' 0.3: Fix documentation of changes to ''opcache_get_status()''
 +
 0.4: Improve documentation of ini settings, add another example use case. 0.4: Improve documentation of ini settings, add another example use case.
 +
 +===== Ideas on moving the optimizer into core instead =====
 +
 +There are various ways the suggestion in [[https://wiki.php.net/rfc/opcache.no_cache#discussion|Discussion]] could be implemented. My ideas on a way that could be implemented are below (I'm not familiar enough with opcache to implement that or to be aware of any problems it would cause):
 +
 +  * Move the optimizer into core (e.g. move code related to opcode optimizations from ''ext/opcache'' to a new folder ''ext/optimizer'' loaded before opcache). Keep all of the functionality related to caching in the zend_extension Zend Opcache (some build environments may not support or have a use case for any forms of shared memory caching).
 +  * Continue optimizing according to ''opcache.enable'' and ''opcache.enable_cli'' when the opcode caching is enabled. \\ Add a new flag such as ''optimizer.always_optimize=1'' or ''opcache.always_optimize=1'' which will ignore that and unconditionally optimize using the optimization passes in ''opcache.optimization_level''. This would ensure that existing use cases work without modifying ''php.ini'' and won't suffer from high startup time for short-lived processes which don't have opcodes cached.
 +  * Provide C function pointers to lock shared memory and acquire pointer locations so that the JIT can emit executable code without conflicting with other processes/threads, and make opcache override those function pointers. I'm not sure how protecting memory with opcache jit without the opcache extension managing shared memory would work with threaded php and no shared cache, but should be possible - I assume the JIT already works with ''opcache.file_cache_only''. I'm also unfamiliar with how those pointers/mutexes would get released if php crashed.
 +  * Limit ''opcache.preload'' to only be used when the opcode caching zend_extension is used.
  
 ===== References ===== ===== References =====
  
-https://externals.io/message/109959 opcache.no_cache prototype: Opcode optimization without caching+https://externals.io/message/109959 "opcache.no_cache prototype: Opcode optimization without caching"
  
 +https://externals.io/message/110187 "[RFC] opcache.no_cache: Opcache optimization without any caching"
rfc/opcache.no_cache.txt · Last modified: 2020/06/13 17:45 by tandre