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

藏色散人
Freigeben: 2023-02-17 11:38:02
nach vorne
8015 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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'); }
Nach dem Login kopieren

/v1/hello/wzh/index2

public function index2() { $a = 0; for ($i = 0; $i < 1000000; $i++) $a++; $this->output($a); }
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

[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
Nach dem Login kopieren

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复制代码
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Lösung

No package 'sqlite3' found
Nach dem Login kopieren

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"复制代码
Nach dem Login kopieren

Problem 2

yum install sqlite-devel
Nach dem Login kopieren

Lösung

configure: error: Please reinstall the iconv library.
Nach dem Login kopieren

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
Nach dem Login kopieren

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

No package 'oniguruma' found
Nach dem Login kopieren

Lösung

yum install oniguruma-devel
Nach dem Login kopieren

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"
Nach dem Login kopieren

Lösung

No package 'libzip' found
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!