Heim  >  Artikel  >  Backend-Entwicklung  >  Spät aber angekommen! Die PHP8-Rezension finden Sie hier~

Spät aber angekommen! Die PHP8-Rezension finden Sie hier~

藏色散人
藏色散人nach vorne
2020-09-16 16:51:118062Durchsuche

PHP 8 Alpha 1 wurde am 25. Juni veröffentlicht und PHP 8 Alpha 2 wurde am 9. Juli veröffentlicht. Im Allgemeinen ist Alpha 2 eine einigermaßen brauchbare Version, also habe ich sie am Wochenende evaluiert.

Werfen wir zunächst einen Blick auf die Ergebnisse:

JIT ist nicht aktiviert

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 ist aktiviert:

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

Und Opcache ist nicht aktiviert:

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 ist nicht aktiviert: 2,299s Wenn Opcache aktiviert ist, JIT jedoch nicht: 1,419 s Wenn Opcache aktiviert ist und JIT aktiviert ist: 0,155 s

Mit aktiviertem JIT ist es fast das 9,15-fache des Werts ohne aktiviertes JIT. Nach mehreren Tests liegt dieser Wert stabil zwischen dem 8-fachen und dem 10-fachen.

Wie funktioniert MPF?

Um nah an unserem Geschäft zu sein, haben wir unter der MPF-Framework-Umgebung

aliyun centos 6.9

php7.test.com php-fpm einen Prozess getestet php8.test.com php-fpm ein Prozess

Mpf zwei Schnittstellen

/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);
}

Lassen Sie uns einen Stresstest durchführen

php7 mit weniger Berechnung

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 Mehr Berechnungen

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 schaltet weniger Berechnungen ein

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 schaltet mehr Berechnungen ein

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 schaltet weniger Berechnungen aus

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

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

Spät aber angekommen! Die PHP8-Rezension finden Sie hier~ Es wurde festgestellt, dass PHP weniger berechnet ist ist das
-fache der Leistung von PHP7.
Aber es gibt ein Problem, das ich für erstaunlich halte, wenn es um JIT-freie Berechnungen geht. Ich dachte, es sei ein Problem mit der Testrichtung, aber nach vielen Demonstrationen sind diese Daten korrekt Ich möchte hier suchen, wenn ich Zeit habe. Was sind die Optimierungspunkte?

13倍,而且计算越多优化越明显,计算多情况下php8JIT是php7性能的25.7Kompilierungsprozess

Beschwerde: Die manuelle Kompilierung von PHP dauerte 2 Stunden und ich bin auf N Fallstricke gestoßen. Damit jeder mehr Anforderungen schreiben kann, werde ich die Fallstricke teilen

Aliyun Centos 6.9, unser Unternehmen verwendet normalerweise diese Version.

php-Quellcode-Kompilierung

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

Hier schlägt die Makefile-Generierung normalerweise fehl. Es gibt später Beispiele für eine fehlgeschlagene Generierung.

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复制代码

configure php.ini

Denken Sie daran, die alte Konfiguration des Opcaches aufzuschreiben. ini ist JIT immer noch eine Optimierung von Opcache.

make -j 8

make install

cp php.ini-production /yourdir/php8/etc/php.ini

Fehlerlösung konfigurieren

Hier sind einige Probleme mit ./configure failed

Problem 1

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

Lösung

No package 'sqlite3' found

Hinweis

Dies direkt zu tun wird nicht funktionieren, die Version im Yum-Warehouse ist zu niedrig.
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"复制代码

Problem 2

yum install sqlite-devel

Lösung

configure: error: Please reinstall the iconv library.

Problem 3

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

Ähnlich funktioniert yum auch nicht, die Version ist zu niedrig.

No package 'oniguruma' found

Lösung

yum install oniguruma-devel

Problem Vier

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"

Lösung

No package 'libzip' found

Viel Spaß mit PHP 8 & JIT!

Das obige ist der detaillierte Inhalt vonSpät aber angekommen! Die PHP8-Rezension finden Sie hier~. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:JIT von PHP 8 verstehenNächster Artikel:JIT von PHP 8 verstehen