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

Pull Requests

Pull requests:

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!
 [2021-07-21 21:39 UTC] dieter at mainis dot de
It wasn't mentioned in this thread so maybe this might be helpful, too:
For me it turned out that xdebug was the root cause for me that it didn't work. Maybe someone knows why these two modules interfere with each other? Didn't try the error-log option to my shame.

Disable xdebug in your php.ini and everything should work.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 08:01:29 2024 UTC