Maison > développement back-end > PHP8 > le corps du texte

En retard mais arrivé ! La revue PHP8 est ici ~

藏色散人
Libérer: 2023-02-17 11:38:02
avant
8215 Les gens l'ont consulté

PHP 8 alpha 1 est sorti le 25 juin et php 8 alpha 2 est sorti le 9 juillet. Généralement, l'alpha 2 est une version légèrement utilisable, donc je l'ai évalué ce week-end.

Regardons d'abord les résultats :

Quand JIT n'est pas activé

php -d opcache.jit_buffer_size=0 Zend/bench.php
simple             0.025simplecall         0.012simpleucall        0.012simpleudcall       0.012mandel             0.135mandel2            0.211ackermann(7)       0.082ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.186fibo(30)           0.283hash1(50000)       0.039hash2(500)         0.041heapsort(20000)    0.089matrix(20)         0.110nestedloop(12)     0.096sieve(30)          0.045strcat(200000)     0.019------------------------
Total              1.419
Copier après la connexion

Quand JIT est activé :

php -d -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php
simple             0.001simplecall         0.000simpleucall        0.000simpleudcall       0.000mandel             0.005mandel2            0.006ackermann(7)       0.010ary(50000)         0.005ary2(50000)        0.004ary3(2000)         0.011fibo(30)           0.027hash1(50000)       0.027hash2(500)         0.018heapsort(20000)    0.011matrix(20)         0.011nestedloop(12)     0.006sieve(30)          0.004strcat(200000)     0.009------------------------
Total              0.155
Copier après la connexion

Il y a aussi un cas où Opcache n'est pas activé Suivant :

php Zend/bench.php
simple             0.051simplecall         0.017simpleucall        0.083simpleudcall       0.089mandel             0.506mandel2            0.409ackermann(7)       0.095ary(50000)         0.012ary2(50000)        0.010ary3(2000)         0.187fibo(30)           0.367hash1(50000)       0.040hash2(500)         0.041heapsort(20000)    0.097matrix(20)         0.122nestedloop(12)     0.093sieve(30)          0.063strcat(200000)     0.018------------------------
Total              2.299
Copier après la connexion

Ne pas activer Opcache : 2,299 s Lorsqu'Opcache est activé mais que JIT n'est pas activé : 1,419 s Lorsque Opcache est activé et JIT est activé : 0,155 s

Lorsque JIT est activé, c'est près de 9,15 fois celui lorsque JIT n'est pas activé. Après plusieurs tests, cette valeur est stable entre 8 fois. et 10 fois.

Comment fonctionne MPF ?

Afin d'être proche de notre métier, nous avons testé sous le framework mpf

Environnement

aliyun centos 6.9

php7.test.com php- fpm un processus php8.test.com php-fpm un processus

Mpf deux interfaces

/v1/hello/wzh/index1

public function index1() {    $this->output('123');
}
Copier après la connexion

/v1/hello/wzh/index2

public function index2() {
    $a = 0;    for ($i = 0; $i < 1000000; $i++)
        $a++;    $this->output($a);
}
Copier après la connexion

Faisons un test de résistance

php7 Situation avec calcul faible

wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index1
Running 5s test @ https://php7.test.com/v1/hello/wzh/index1
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   432.97ms   76.00ms 527.38ms   92.17%
    Req/Sec     8.38      5.36    20.00     63.85%
  396 requests in 5.09s, 121.43KB readRequests/sec:     77.78
Transfer/sec:     23.85KB
Copier après la connexion

php7 Situation avec calcul élevé

wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index2
Running 5s test @ https://php7.test.com/v1/hello/wzh/index2
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.02s   569.99ms   1.96s    57.14%
    Req/Sec     3.18      3.43    10.00     80.88%
  70 requests in 5.03s, 21.60KB read
  Socket errors: connect 0, read 0, write 0, timeout 42
Requests/sec:     13.91
Transfer/sec:      4.29KB
Copier après la connexion

php8 Situation avec calcul faible lorsque JIT est activé

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1
Running 5s test @ https://php8.test.com/v1/hello/wzh/index1
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    34.48ms    4.34ms  95.45ms   87.87%
    Req/Sec    84.61     13.36   121.00     85.28%
  5083 requests in 5.03s, 1.67MB readRequests/sec:   1010.55
Transfer/sec:    340.43KB
Copier après la connexion

php8 JIT est activé pour de nombreux calculs

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2
Running 5s test @ https://php8.test.com/v1/hello/wzh/index2
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    97.84ms    4.97ms 159.50ms   92.12%
    Req/Sec    30.27      4.42    50.00     86.50%
  1814 requests in 5.07s, 614.71KB readRequests/sec:    357.76
Transfer/sec:    121.23KB
Copier après la connexion

php8 JIT est désactivé pour moins de calculs

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1
Running 5s test @ https://php8.test.com/v1/hello/wzh/index1
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    38.10ms    6.47ms 239.60ms   94.01%
    Req/Sec    77.50     12.76   110.00     89.63%
  4622 requests in 5.04s, 1.52MB readRequests/sec:    916.22
Transfer/sec:    308.65KB
Copier après la connexion

php8 JIT est désactivé pour de nombreux calculs

wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2
Running 5s test @ https://php8.test.com/v1/hello/wzh/index2
  12 threads and 36 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   766.16ms  181.30ms 887.08ms   88.37%
    Req/Sec     6.25      5.36    20.00     91.36%
  215 requests in 5.09s, 72.86KB readRequests/sec:     42.22
Transfer/sec:     14.31KB
Copier après la connexion

[ image:BA1A37D8-760E-4637-901B -3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]

En retard mais arrivé ! La revue PHP8 est ici ~

Trouvé que php8J a de faibles calculs IT équivaut à 13 fois les performances de php7, et plus il y a de calculs, plus l'optimisation est évidente. Lorsqu'il y a beaucoup de calculs, php8JIT est 25.7 fois les performances de php7.

Mais il y a un problème que je trouve incroyable. PHP8 a beaucoup d'optimisations sans JIT et moins de calculs. Je pensais que c'était un problème avec la direction des tests, mais après de nombreuses démonstrations, ces données sont exactes. J'ai le temps d'y réfléchir. Découvrez quels sont les points d'optimisation ici.

Processus de compilation

Tucao : La compilation manuelle de PHP devient de plus en plus difficile. La compilation a pris 2 heures et a marché sur N pièges. Afin de permettre à tout le monde d'écrire plus d'exigences, partagez. la fosse

Environnement

aliyun centos 6.9, notre société utilise généralement cette version.

compilation du code source php

wget https://downloads.php.net/~carusogabriel/php-8.0.0alpha2.tar.gz

tar -zxf php-8.0.0alpha2.tar.gzcd php-8.0.0alpha2

./configure --prefix=/yourdir/php8 --with-config-file-path=/yourdir/php8/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-static --enable-sockets --with-zip --enable-calendar --enable-bcmath --enable-mbstring --with-zlib --with-iconv=/usr/local/libiconv --enable-gd --enable-mbstring --with-freetype --with-mysql-sock=/tmp/mysql.sock --disable-ipv6 --enable-debug --with-openssl --enable-opcache复制代码
Copier après la connexion

Généralement, la génération du makefile échoue ici. Il existe des exemples d'échec de génération plus tard. Une fois la génération réussie,

make -j 8

make install

cp php.ini-production /yourdir/php8/etc/php.ini
Copier après la connexion

Configurez php.ini.

N'oubliez pas de noter l'ancienne configuration d'opcache.ini En dernière analyse, JIT est toujours une optimisation d'Opcache.

zend_extension=opcache.so
opcache.enable=1

; 命令行测试的话这里一定要打开
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=300
opcache.fast_shutdown=1
opcache.enable_file_override = 1
opcache.blacklist_filename = /etc/php.d/opcache.blacklist

; 这里就是新的jit的配置
opcache.jit=1205
opcache.jit_buffer_size=64M
Copier après la connexion

Solution pour configurer l'échec

Voici quelques problèmes avec ./configure failed

Problème 1
No package 'sqlite3' found
Copier après la connexion

Solution

wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz

tar -zxf sqlite-autoconf-3320300.tar.gzcd sqlite-autoconf-3320300

./configure --prefix=/usr/local/lib/sqlite-3.32.0

make CFLAGS="-g -O2 -DSQLITE_ENABLE_COLUMN_METADATA"make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/sqlite-3.32.0/lib/pkgconfig"复制代码
Copier après la connexion

Remarque

Ce n'est pas possible car la version dans le dépôt yum est trop basse.

yum install sqlite-devel
Copier après la connexion

Problème 2

configure: error: Please reinstall the iconv library.
Copier après la connexion

Solution

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

tar -zxf libiconv-1.14.tar.gzcd libiconv-1.14

./configure 

make 

make install
Copier après la connexion

Problème 3

No package 'oniguruma' found
Copier après la connexion

De même, miam ne fonctionne pas non plus, la version est trop basse.

yum install oniguruma-devel
Copier après la connexion

Solution

wget https://github.com/kkos/oniguruma/archive/v6.9.5_rev1.tar.gz

tar -zxf v6.9.5_rev1.tar.gzcd oniguruma-6.9.5_rev1/ 

autoreconf -vfi

./configure --prefix=/usr/local/lib/oniguruma-6.9.5

make 

make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/oniguruma-6.9.5/lib/pkgconfig"
Copier après la connexion

Problème 4

No package 'libzip' found
Copier après la connexion

Solution

wget https://libzip.org/download/libzip-1.7.2.tar.gz

tar -zxf libzip-1.7.2.tar.gzcd libzip-1.7.2

cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/lib/libzip-1.7.2

make 

make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.7.2/lib/pkgconfig"复制代码
Copier après la connexion

Profitez de php 8 et JIT !


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.im
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal