php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #80175 PHP8 RC1 - JIT Buffer not working
Submitted: 2020-10-02 13:50 UTC Modified: 2020-10-21 09:49 UTC
Votes:6
Avg. Score:4.7 ± 0.7
Reproduced:6 of 6 (100.0%)
Same Version:6 (100.0%)
Same OS:5 (83.3%)
From: celestinoxp at hotmail dot com Assigned: cmb (profile)
Status: Closed Package: JIT
PHP Version: 8.0.0rc2 OS: Windows 10
Private report: No CVE-ID: None
 [2020-10-02 13:50 UTC] celestinoxp at hotmail dot com
Description:
------------
In php.ini when add below lines php8 not start:

opcache.jit_buffer_size = 32M
opcache.jit = 1205

but when add only this line "opcache.jit = 1205" php8 starts however in php_info the table show opcache.jit_buffer_size = 0.

Resuming, i can´t add this line: opcache.jit_buffer_size = (something value)

Something is wrong with php8? or my php.ini configuration?

Note: php_error_log is empty, so i think config is correctly...

Test script:
---------------
In php.ini

opcache.jit_buffer_size = 32M


Patches

Add a Patch

Pull Requests

Pull requests:

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-10-02 18:05 UTC] gfpuba+php at gmail dot com
I think I have the same problem.
With the same JIT parameter, there is an access violation as soon as Apache starts.
I hope this help.

Nom de l’application défaillante : httpd.exe, version : 2.4.46.0, horodatage : 0x5f2677c3
Nom du module défaillant : php_opcache.dll, version : 8.0.0.0, horodatage : 0x5f745694
Code d’exception : 0xc0000005
Décalage du défaut : 0x00000000001670d4
ID processus défaillant : 0x15dc
Heure de démarrage de l’application défaillante : 0x01d698e5ea52c0ea
Chemin de l’application défaillante : C:\xampp\apache\bin\httpd.exe
Chemin du module défaillant : C:\xampp\php\ext\php_opcache.dll
Code de rapport : 79d077e9-fdda-44ef-825f-9e0d5bcf4edc
Nom complet de l’ensemble défaillant : 
ID de l’application relative à l’ensemble défaillant :
 [2020-10-02 19:57 UTC] celestinoxp at hotmail dot com
error log of apache (C:\xampp\apache\logs\error.log) showing error below when uses opcache.jit_buffer_size = (some value) in php.ini:

[Fri Oct 02 20:51:02.208452 2020] [ssl:warn] [pid 6152:tid 640] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Fri Oct 02 20:51:02.278548 2020] [core:warn] [pid 6152:tid 640] AH00098: pid file C:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Fri Oct 02 20:51:02.283527 2020] [ssl:warn] [pid 6152:tid 640] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
 [2020-10-02 20:00 UTC] rtrtrtrtrt at dfdfdfdf dot dfd
your mismatch of SSL certificate and HostName is completly irrelevant
the line that the pid-file at start exists is not helpful at all
 [2020-10-02 20:03 UTC] celestinoxp at hotmail dot com
when i use phpmyadmin, apache error log show several times this msg: "VirtualProtect() failed [87] O parâmetro está incorreto."
 [2020-10-03 08:12 UTC] tm8544 at hotmail dot com
I have also seen this with 8.0.0rc1. Have not tested with beta vetrsions.

I Windows 10 x64 syslog, there is
------------------
Viallisen sovelluksen nimi: php-cgi.exe, versio: 8.0.0.0, aikaleima: 0x5f745128
Viallisen moduulin nimi: php_opcache.dll, versio: 8.0.0.0, aikaleima: 0x5f745478
Poikkeuskoodi: 0xc0000005
Virhepoikkeama: 0x00000000001572c4
Viallisen prosessin tunnus: 0x1408
Viallisen sovelluksen käynnistysaika: 0x01d698b1ff578fa3
Viallisen sovelluksen polku: C:\php\php-cgi.exe
Viallisen moduulin polku: C:\PHP\ext\php_opcache.dll
Raportin tunnus: e8b4b80e-76ba-4c9a-97e9-683abfadcc38
Viallisen paketin koko nimi: 
Viallisen paketin suhteellinen sovellustunnus: 

In apache log there is
----------------------
End of script output before headers: index.php
mod_fcgid: get overlap result error
 [2020-10-03 15:11 UTC] cmb@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: cmb
 [2020-10-03 15:11 UTC] cmb@php.net
I can confirm that JIT on Windows may not work for multiple
processes.

> opcache.jit = 1205

This setting does no longer do what it used to do.  There is
preliminary documentation on the OPcache JIT INI settings[1]
waiting to be fleshed out.

[1] <https://github.com/php/doc-en/pull/140>
 [2020-10-03 15:12 UTC] cmb@php.net
The following pull request has been associated:

Patch Name: Fix #80175: PHP8 RC1 - JIT Buffer not works
On GitHub:  https://github.com/php/php-src/pull/6268
Patch:      https://github.com/php/php-src/pull/6268.patch
 [2020-10-06 19:37 UTC] ricardo at banak dot com
Not only a Windows problem.
It also doesn't work on Centos 8 (php-fpm + nginx)
 [2020-10-08 15:20 UTC] celestinoxp at hotmail dot com
Is this patch already in the main code?
 [2020-10-08 21:57 UTC] cmb@php.net
> Not only a Windows problem.
> It also doesn't work on Centos 8 (php-fpm + nginx)

I presume that the CentOS 8 issue is not related to this bug.
Please open a new report, and provide detailed info what does not
work, and in case of a segfault, also provide a backtrace[1].

> Is this patch already in the main code?

No.  The PR is waiting on review.

[1] <https://bugs.php.net/bugs-generating-backtrace.php>
 [2020-10-10 15:47 UTC] cmb@php.net
Automatic comment on behalf of cmbecker69@gmx.de
Revision: http://git.php.net/?p=php-src.git;a=commit;h=2a545ba946033528d38ccfec46fdd592c1eb4857
Log: Fix #80175: PHP8 RC1 - JIT Buffer not working
 [2020-10-10 15:47 UTC] cmb@php.net
-Status: Verified +Status: Closed
 [2020-10-10 15:48 UTC] cmb@php.net
-Summary: PHP8 RC1 - JIT Buffer not works +Summary: PHP8 RC1 - JIT Buffer not working
 [2020-10-11 09:20 UTC] celestinoxp at hotmail dot com
After commit vhttp://git.php.net/?p=php-src.git;a=commit;h=2a545ba946033528d38ccfec46fdd592c1eb4857

still not working for me. Can anyone confirm?
 [2020-10-11 15:26 UTC] cmb@php.net
-Status: Closed +Status: Feedback
 [2020-10-11 15:26 UTC] cmb@php.net
I just checked with the latest nightly build[1], and the Apache
module works for me now.

Please give more info regarding your setup (do you use Apache with
mod_php, or mod_fcgi, or some other SAPI?).  It would also be
helpful if you could provide a backtrace[2].

[1] <https://github.com/shivammathur/php-builder-windows>
[2] <https://bugs.php.net/bugs-generating-backtrace-win32.php>
 [2020-10-11 18:46 UTC] celestinoxp at hotmail dot com
Do you have this line in php.ini: opcache.jit_buffer_size = 32M, (or other value)?
 [2020-10-11 19:54 UTC] celestinoxp at hotmail dot com
Apache with mod_php
Windows 10 64bits
 [2020-10-11 20:47 UTC] cmb@php.net
I tested with Apache mod_php Windows 10 64bits and

    opcache.jit_buffer_size=16M

RC1 immediately crashed; the latest nightly snapshot did not.
 [2020-10-11 20:58 UTC] celestinoxp at hotmail dot com
I can't generate backtrace report because php process not start.

Can help me to generate backtrace to help you find problem in php?

I have DebugDiag 2 update 3. But its i dont know work with it very fine...
 [2020-10-11 21:05 UTC] celestinoxp at hotmail dot com
I forget say im using xampp, but i changed PHP-Module setup to work with php8,
ex: 
LoadFile "C:/xampp/php/php8ts.dll"
LoadFile "C:/xampp/php/libpq.dll"
LoadModule php_module "C:/xampp/php/php8apache2_4.dll"
LoadFile "C:/xampp/php/libsqlite3.dll"

and replace all "php7_module" --> "php_module".


And in php.ini

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size.
opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=50000

; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5

; When this directive is enabled, the OPcache appends the current working
; directory to the script key, thus eliminating possible collisions between
; files with the same name (basename). Disabling the directive improves
; performance, but may break existing applications.
;opcache.use_cwd=1

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
;opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=60

; Enables or disables file search in include_path optimization
;opcache.revalidate_path=0

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
;opcache.save_comments=1

; Allow file existence override (file_exists, etc.) performance feature.
;opcache.enable_file_override=0

; A bitmask, where each bit enables or disables the appropriate OPcache
; passes
;opcache.optimization_level = 0x7FFFBFFF
opcache.optimization_level = -1

;opcache.dups_fix=0

; The location of the OPcache blacklist file (wildcards allowed).
; Each OPcache blacklist file is a text file that holds the names of files
; that should not be accelerated. The file format is to add each filename
; to a new line. The filename may be a full path or just a file prefix
; (i.e., /var/www/x  blacklists all the files and directories in /var/www
; that start with 'x'). Line starting with a ; are ignored (comments).
;opcache.blacklist_filename=

; Allows exclusion of large files from being cached. By default all files
; are cached.
;opcache.max_file_size=0

; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.
;opcache.consistency_checks=0

; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed.
;opcache.force_restart_timeout=180

; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=

; All OPcache errors go to the Web server log.
; By default, only fatal errors (level 0) or errors (level 1) are logged.
; You can also enable warnings (level 2), info messages (level 3) or
; debug messages (level 4).
opcache.log_verbosity_level=2

; Preferred Shared Memory back-end. Leave empty and let the system decide.
;opcache.preferred_memory_model=

; Protect the shared memory from unexpected writing during script execution.
; Useful for internal debugging only.
opcache.protect_memory = 0

; Allows calling OPcache API functions only from PHP scripts which path is
; started from specified string. The default "" means no restriction
;opcache.restrict_api=

; Mapping base of shared memory segments (for Windows only). All the PHP
; processes have to map shared memory into the same address space. This
; directive allows to manually fix the "Unable to reattach to base address"
; errors.
;opcache.mmap_base=

; Facilitates multiple OPcache instances per user (for Windows only). All PHP
; processes with the same cache ID and user share an OPcache instance.
;opcache.cache_id=

; Enables and sets the second level cache directory.
; It should improve performance when SHM memory is full, at server restart or
; SHM reset. The default "" disables file based caching.
;opcache.file_cache=

; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0

; Enables or disables checksum validation when script loaded from file cache.
;opcache.file_cache_consistency_checks=1

; Implies opcache.file_cache_only=1 for a certain process that failed to
; reattach to the shared memory (for Windows only). Explicitly enabled file
; cache is required.
;opcache.file_cache_fallback=1

; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
;opcache.huge_code_pages=0

; Validate cached file permissions.
;opcache.validate_permission=0

; Prevent name collisions in chroot'ed environment.
;opcache.validate_root=0

; If specified, it produces opcode dumps for debugging different stages of
; optimizations.
;opcache.opt_debug_level=0

; Specifies a PHP script that is going to be compiled and executed at server
; start-up.
; http://php.net/opcache.preload
;opcache.preload=

; Preloading code as root is not allowed for security reasons. This directive
; facilitates to let the preloading to be run as another user.
; http://php.net/opcache.preload_user
;opcache.preload_user=

; Prevents caching files that are less than this number of seconds old. It
; protects from caching of incompletely updated files. In case all file updates
; on your site are atomic, you may increase performance by setting it to "0".
;opcache.file_update_protection=2

; Absolute path used to store shared lockfiles (for *nix only).
;opcache.lockfile_path=/tmp

opcache.jit=1205
;opcache.jit_buffer_size=16M
 [2020-10-20 09:05 UTC] celestinoxp at hotmail dot com
-Status: Feedback +Status: Assigned -PHP Version: 8.0.0rc1 +PHP Version: 8.0.0rc2
 [2020-10-20 09:05 UTC] celestinoxp at hotmail dot com
PHP8 RC2 - JIT Buffer still not working.

Anyone can confirm?
 [2020-10-20 10:46 UTC] cmb@php.net
-Status: Assigned +Status: Feedback
 [2020-10-20 10:46 UTC] cmb@php.net
celestinoxp, could you please try with a minimal php.ini first.
Particularly, omit the following (i.e. leave those settings at
their default):

opcache.protect_memory = 0
opcache.optimization_level = -1

Would that solve the crash during startup?
 [2020-10-20 10:46 UTC] cmb@php.net
-Package: Unknown/Other Function +Package: JIT
 [2020-10-20 12:08 UTC] celestinoxp at hotmail dot com
Hi, jit_buffer_size still not working. I changed php.ini configuration to this:

opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size = 32M
opcache.jit = 1205

all other lines are commented with ; so values are default.

only when add ; in opcache.jit_buffer_size = 32M, php starts...

I'm frustrated because I don't know where the error is ... and the php log is blank ... the apache log just says the following:

[Wed Oct 21 13: 06: 57.709383 2020] [core: warn] [pid 624: tid 636] AH00098: pid file C: /xampp/apache/logs/httpd.pid overwritten - Unclean shutdown of previous Apache run?
 [2020-10-21 09:12 UTC] cmb@php.net
-Status: Feedback +Status: Closed
 [2020-10-21 09:12 UTC] cmb@php.net
Well, we need a backtrace to proceed with this, but I just noticed
that the instruction to generate a backtrace on Windows[1] are
terribly outdated. I have rewritten that section, and with this
technique you should be able to get a backtrace even when Apache
crashes right after start.  That backtrace might not be sufficient
for JIT issues, but please give it try.

Anyhow, I checked once again with RC1 and RC2, and while the
former crashes for me, the latter does not, so I'm closing this
ticket, since the respective fix obviously addressed a bug.
Please open a new ticket for your issue.  Thanks. :)

[1] <https://bugs.php.net/bugs-generating-backtrace-win32.php>
 [2020-10-21 09:32 UTC] nikic@php.net
There is a chance that the remaining issue is related to bug #80243, which is fixed now as well. It doesn't actually have to do with JIT, but seems to manifest as a crash there. (This only affects the case where opcache is loaded using zend_extension=opcache. If it was loaded using zend_extension=php_opcache.dll, it should not be related.)
 [2020-10-21 09:49 UTC] cmb@php.net
Ah, good catch, @nikic!  Indeed, I tested with
zend_extension=php_opcache.dll, but with zend_extension=opcache
RC2 crashes for me as well.

@celestinoxp, it might be best to test with the next nightly
snapshot.
 [2020-10-21 10:05 UTC] celestinoxp at hotmail dot com
Finally the puzzle is over!
I just tested with zend_extension = php_opcache.dll instead of zend_extension = opcache, and now when I add the line opcache.jit_buffer_size = (any value ex: 1M) It works !!!!
Tomorrow I will test the new build with zend_extension = opcache, but it should work.

Thanks for the excellent work!
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Wed Jan 20 13:01:28 2021 UTC