遅くなりましたが届きました! PHP8のレビューはこちら〜

藏色散人
リリース: 2023-02-17 11:38:02
転載
8229 人が閲覧しました

PHP 8 alpha 1 が 6 月 25 日にリリースされ、php 8 alpha 2 が 7 月 9 日にリリースされました。一般的には alpha 2 が少し使えるバージョンなので、週末に評価してみました。php8 JIT とは何ですか?

まず結果を見てみましょう:

JIT がオンになっていない場合

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
ログイン後にコピー

JIT がオンの場合:

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
ログイン後にコピー

Opcache が有効になっていない場合 次:

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
ログイン後にコピー

Opcache を有効にしない: 2.299 秒 Opcache が有効だが JIT が有効でない場合: 1.419 秒 Opcache がオンで JIT がオンの場合: 0.155s

JIT がオンの場合、JIT がオンでない場合の 9.15 倍に近くなります。複数のテストの後、この値は 8 倍から 10 倍の間で安定しています。 。

MPF はどのように機能しますか?

弊社のビジネスに近づけるため、mpf フレームワークでテストを行っています

環境

aliyun centos 6.9

php7.test.com php- FPM 1 プロセス php8.test.com php-fpm 1 つのプロセス

Mpf 2 つのインターフェイス

/v1/hello/wzh/index1

public function index1() {    $this->output('123');
}
ログイン後にコピー

/v1/hello/wzh/index2

public function index2() {
    $a = 0;    for ($i = 0; $i < 1000000; $i++)
        $a++;    $this->output($a);
}
ログイン後にコピー

ストレス テストをしてみましょう

php7 計算が少ない場合

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
ログイン後にコピー

php7 計算が多すぎる場合

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
ログイン後にコピー

php8 JIT が有効な場合と、計算が少なくなります

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
ログイン後にコピー

php8 多くの計算では JIT がオンになります

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
ログイン後にコピー

php8 少ない計算では JIT がオフになります

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
ログイン後にコピー

php8 多くの計算では JIT がオフになります

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
ログイン後にコピー

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

遅くなりましたが届きました! PHP8のレビューはこちら〜
##計算量が少ない場合、php8JIT は php7 よりも最高のパフォーマンスを発揮することがわかりました。

13 回、計算量が多いほど、最適化がより顕著になります。計算量が多い場合、php8JIT はphp7 の 25.7 倍のパフォーマンス。

しかし、素晴らしいと思う問題が 1 つあります。PHP8 は JIT なしで大幅に最適化されており、計算が少なくなりました。テストの方向性に問題があるのではないかと思いましたが、多くのデモンストレーションの後、このデータは正確です考える時間があります。ここで最適化のポイントを調べてください。

コンパイルプロセス

Tucao: PHP の手動コンパイルはますます面倒になってきています。コンパイルに 2 時間かかり、N 個の落とし穴を踏みました。みんなにもっと要件を書いてもらうために、次のようにしました。ピットを共有してください

環境

aliyun centos 6.9、当社では通常このバージョンを使用しています。

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复制代码
ログイン後にコピー

一般に、ここで makefile の生成は失敗します。後で生成に失敗した例もあります。生成が成功したら、

make -j 8

make install

cp php.ini-production /yourdir/php8/etc/php.ini
ログイン後にコピー
php.ini を設定します。

opcache.ini の古い設定を忘れずに書き留めてください。最終的には、JIT は依然として 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
ログイン後にコピー
障害解決策の構成

./configure Failure に関する問題をいくつか紹介します

問題 1
No package 'sqlite3' found
ログイン後にコピー
解決策

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"复制代码
ログイン後にコピー

yum ウェアハウスのバージョンが低すぎるため、これは不可能です。

yum install sqlite-devel
ログイン後にコピー
問題 2

configure: error: Please reinstall the iconv library.
ログイン後にコピー

解決策

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
ログイン後にコピー
問題 3

No package 'oniguruma' found
ログイン後にコピー

同様に、yum も機能しません。バージョンが低すぎます。

yum install oniguruma-devel
ログイン後にコピー
解決策

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"
ログイン後にコピー
問題 4

No package 'libzip' found
ログイン後にコピー

解決策

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"复制代码
ログイン後にコピー
php 8 と JIT を楽しんでください !


以上が遅くなりましたが届きました! PHP8のレビューはこちら〜の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.im
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート