TL: DR;
Alle Beispiele können von github heruntergeladen und sofort ausgeführt werden: github.com/xtrime-ru/php8-test
Ausbildung
Zuerst müssen Sie Docker und Docker-Compose installieren.
Jetzt erstellen wir eine opcache.ini-Datei, die opcache und JIT in unserem Container aktiviert.
; Extended PHP.ini file to enable JIT.
; ====================================
; Place this file under /usr/local/etc/php/conf.d/
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=32M
opcache.jit=1235
Jetzt müssen Sie eine Docker-Datei in Ihrem Arbeitsordner erstellen.
Die Liste der Pakete und Erweiterungen wird als Beispiel bereitgestellt. Sie können diese Zeilen löschen oder die gewünschten Erweiterungen angeben. Einige der beliebten Erweiterungen sind bereits im Basis-Image enthalten. Es ist also nicht erforderlich, json, xml und viele andere einzuschließen.
FROM php:8.0-rc-cli
COPY opcache.ini /usr/local/etc/php/conf.d/
RUN apt-get update && apt-get upgrade -y \
&& apt-get install apt-utils -y \
#
#
&& apt-get install git zip vim libzip-dev libgmp-dev libffi-dev libssl-dev -y \
#
#
&& docker-php-ext-install -j$(nproc) sockets zip gmp pcntl bcmath ffi \
#
# pecl , php 8 pecl ,
# && PHP_OPENSSL=yes pecl install ev \
# && docker-php-ext-enable ev \
#
#
&& docker-php-source delete \
&& apt-get autoremove --purge -y && apt-get autoclean -y && apt-get clean -y
Die letzte Datei bleibt erhalten. Dies ist docker-compose.yml, mit dem Container während der Entwicklung einfach verwaltet werden können.
version: '3.5'
services:
php8-test:
build: ./
container_name: php8-test
restart: unless-stopped
volumes:
- ./:/app
working_dir: /app
entrypoint: "php -S 0.0.0.0:8000"
ports:
- "127.0.0.1:8000:8000"
logging:
driver: "json-file"
options:
max-size: "1024k"
max-file: "2"
Jetzt können Sie den Container-Build und die Tests ausführen.
- Erstellen Sie das Image: Docker-Compose Build
- Führen Sie den Container im Hintergrund aus: docker-compose up -d
- Stellen Sie eine Verbindung zum Container her: docker exec -it php8-test / bin / bash
- Der aktuelle Ordner im Container wird mit dem Projektordner synchronisiert. Die Dateien können auf dem lokalen Computer bearbeitet werden.
- Laden Sie die Benchmark-Datei herunter: github.com/php/php-src/blob/master/Zend/bench.php
- Führen Sie die Bank aus: php bank.php
- Sie können jit oder opcache im Container hier deaktivieren: /usr/local/etc/php/conf.d/opcache.ini, um zu sehen, wie sich die Leistung ändert
- In docker-compose.yml können Sie die Direktiven `volume` und` workdir` ändern, um andere Verzeichnisse mit dem Container zu verknüpfen. Sie können den Einstiegspunkt auch so ändern, dass beim Starten des Containers ein anderer Befehl ausgeführt wird. Zum Beispiel "PHP Artisan Serve" für Laravel.
- Alle Dateien können auch im Browser unter http://127.0.0.1:8000/
angezeigt werden. Hierfür sind die Anweisungen für den Einstiegspunkt und die Ports verantwortlich.
Benchmark
Benchmark-Datei aus dem offiziellen PHP-Repository: github.com/php/php-src/blob/master/Zend/bench.php
#########################
# php 7.4.9
# opcache.enable=1
# opcache.enable_cli=0
simple 0.053
simplecall 0.007
simpleucall 0.019
simpleudcall 0.022
mandel 0.182
mandel2 0.220
ackermann(7) 0.038
ary(50000) 0.006
ary2(50000) 0.005
ary3(2000) 0.045
fibo(30) 0.069
hash1(50000) 0.014
hash2(500) 0.008
heapsort(20000) 0.036
matrix(20) 0.034
nestedloop(12) 0.089
sieve(30) 0.014
strcat(200000) 0.006
------------------------
Total 0.867
#########################
# php 7.4.9
# opcache.enable=1
# opcache.enable_cli=1
simple 0.007
simplecall 0.003
simpleucall 0.004
simpleudcall 0.003
mandel 0.088
mandel2 0.113
ackermann(7) 0.036
ary(50000) 0.006
ary2(50000) 0.007
ary3(2000) 0.039
fibo(30) 0.055
hash1(50000) 0.012
hash2(500) 0.008
heapsort(20000) 0.030
matrix(20) 0.029
nestedloop(12) 0.041
sieve(30) 0.011
strcat(200000) 0.007
------------------------
Total 0.499
#########################
# php 8.0-rc
# opcache.enable=1
# opcache.enable_cli=1
# opcache.jit_buffer_size=128M
# opcache.jit=1235
simple 0.002
simplecall 0.001
simpleucall 0.001
simpleudcall 0.001
mandel 0.008
mandel2 0.009
ackermann(7) 0.016
ary(50000) 0.006
ary2(50000) 0.007
ary3(2000) 0.015
fibo(30) 0.030
hash1(50000) 0.016
hash2(500) 0.011
heapsort(20000) 0.014
matrix(20) 0.012
nestedloop(12) 0.010
sieve(30) 0.004
strcat(200000) 0.006
------------------------
Total 0.168
JIT beschleunigt natürlich den CPU-bezogenen Betrieb erheblich. Aber etwas anderes ist mir aufgefallen. Php ist standardmäßig opcache.enable_cli = 0. Wenn Sie diese Option aktivieren, können Sie den Benchmark verdoppeln. Persönlich wusste ich nicht, dass Opcache CLI-Befehle so sehr beschleunigen kann.
Ich habe mehrmals an sauberen Behältern getestet und den Opcache vorgereinigt. Das Ergebnis ist immer dasselbe: opcache.enable_cli = 1 beschleunigt den Benchmark vom ersten Lauf an.
In der Dokumentation zu opcache.enable heißt es: "Wenn deaktiviert, wird der Code nicht optimiert und zwischengespeichert."
Leider können in echten CLI-Skripten die Ergebnisse nach dem Aktivieren von opcache.enable_cli und jit sehr unterschiedlich sein. Bei einem Projekt erhielt ich einen Gewinn von 5% (4,0 Sek. -> 3,8 Sek.) Und bei dem anderen Projekt eine Verlangsamung (0,088 Sek. -> 0,11 Sek.). Daher müssen Sie die Einstellungen unbedingt in Ihren eigenen Projekten testen.