Enable Just-In-Time(JIT) compilation is very important for PHP performance. So I will enable it on PHP 8.2.6. I have a post discussing it with PHP 8.0 in 2021. Now It is 2023, on PHP 8.2.x. It is different.

Last post when I did the performance tests on PHP 8.2.6, the JIT is not enabled.

  • The Bench test result is 0.168
  • The Micro-bench test result is 1.094
  • The Bubble test result is 0.040456056594849

Test Result on PHP8.2.6 with JIT enabled.

When I enabled the JIT on PHP 8.2.6 on the same machine. The test result is below.

The Bench Test Result

simple             0.001
simplecall         0.000
simpleucall        0.000
simpleudcall       0.000
mandel             0.005
mandel2            0.006
ackermann(7)       0.005
ary(50000)         0.002
ary2(50000)        0.001
ary3(2000)         0.005
fibo(30)           0.013
hash1(50000)       0.004
hash2(500)         0.003
heapsort(20000)    0.005
matrix(20)         0.003
nestedloop(12)     0.003
sieve(30)          0.002
strcat(200000)     0.002
------------------------
Total              0.061

 

The Micro-Bench Test Result

empty_loop         0.001
func()             0.001    0.000
undef_func()       0.001    0.000
int_func()         0.001    0.000
$x = self::$x      0.059    0.057
self::$x = 0       0.053    0.051
isset(self::$x)    0.047    0.046
empty(self::$x)    0.051    0.049
$x = Foo::$x       0.027    0.025
Foo::$x = 0        0.018    0.016
isset(Foo::$x)     0.020    0.018
empty(Foo::$x)     0.022    0.021
self::f()          0.001    0.000
Foo::f()           0.001    0.000
$x = $this->x      0.008    0.006
$this->x = 0       0.011    0.009
$this->x += 2      0.007    0.005
++$this->x         0.006    0.005
--$this->x         0.006    0.005
$this->x++         0.006    0.005
$this->x--         0.006    0.005
isset($this->x)    0.028    0.026
empty($this->x)    0.030    0.028
$this->f()         0.019    0.018
$x = Foo::TEST     0.029    0.027
new Foo()          0.106    0.105
$x = TEST          0.007    0.005
$x = $_GET         0.031    0.030
$x = $GLOBALS['v'] 0.027    0.026
$x = $hash['v']    0.001    0.000
$x = $str[0]       0.001    0.000
$x = $a ?: null    0.001    0.000
$x = $f ?: tmp     0.001    0.000
$x = $f ? $f : $a  0.001    0.000
$x = $f ? $f : tmp 0.001    0.000
------------------------
Total              0.640

 

The Bubble Test Result

0.022209882736206

Performance comparison

Compared them with the performance without JIT enabled. It is about 63% improvement on the Bench test script, about 41% improvement on the Micro-Bench test script, and about 45% improvement on the Bubble test script.

On average, about 50% performance improvement with JIT enabled.

How to enable JIT on PHP 8.2.6, Ubuntu 22.04LTS.

  1. SSH to the server, edit the file /etc/php/8.2/mods-available/opcache.ini
  2. find the place to add following into the file and save it.

// /etc/php/8.2/mods-available/opcache.ini

opcache.jit=1255

opcache.jit_buffer_size=100M

Then restart the php8.2-fpm service with the command sudo service php8.2-fpm restart

Check the phpinfo() again.

 

phpinfo with JIT enabled

 

OK, now the JIT is enabled and working.

Another thing I want to talk about.

Let me discuss a little bit about the values of the opcache.jit.

  • opcache.jit = 1205 – all code is JIT compiled
  • opcache.jit = 1235 – only selected code portions (based on their relative use) are passed to the JIT compilation
  • opcache.jit = 1255 – application code is tracked for compilation by JIT and selected parts of the code are transferred to the compiler

Here is a blog post from droptica.com which is discuss more details about PHP 8 with the JIT compiler.

I am just wondering why the default value of this JIT configuration is disabled. Is it always good to enable it for better PHP script performance?

David Yin

David is a blogger, geek, and web developer — founder of FreeInOutBoard.com. If you like his post, you can say thank you here

Leave a Reply

Your email address will not be published. Required fields are marked *