[PHP] Запускаем php 8 с jit через docker за 5 минут
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Зима близко! А вместе с ней близится и релиз php 8. Если вам не терпится протестировать свой код в beta версии php 8, а заодно пощупать jit, то прошу под кат.
TL:DR;
Все примеры можно скачать с github и сразу запустить: github.com/xtrime-ru/php8-test
Подготовка
Для начала потребуется поставить docker и docker-compose.
Теперь создадим opcache.ini файл, который включит opcache и JIT в нашем контейнере.
; 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
Теперь в рабочей папке нужно создать Dockerfile.
Список пакетов и расширений приведен для примера. Можно удалить эти строки или указать нужные именно вам расширения. Так же часть популярных расширений уже включена в базовый образ. Так что подключать json, xml и многие другие не требуется.
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
Остался последний файл. Это docker-compose.yml, который позволяет легко управлять контейнерами при разработке.
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"
Теперь можно запускать сборку контейнера и тесты.
- Собираем образ: docker-compose build
- Запускаем контейнер в фоне: docker-compose up -d
- Подключаемся к контейнеру: docker exec -it php8-test /bin/bash
- Текущая папка на контейнере синхронизирована с папкой проекта. Файлы можно редактировать на локальной машине.
- Скачиваем файл бенчмарка: github.com/php/php-src/blob/master/Zend/bench.php
- Запускаем бенч: php bench.php
- Можно отключить jit или opcache внутри контейнера тут: /usr/local/etc/php/conf.d/opcache.ini, что бы посмотреть, как изменится производительность
- В docker-compose.yml можно изменить директивы `volumes` и `workdir`, что бы залинковать другие директории в контейнер. Так же можно поменять entrypoint для запуска другой команды при старте контейнера. Например `php artisan serve` для laravel.
- Все файлы так же можно посмотреть в браузере по адресу http://127.0.0.1:8000/
За это отвечают директивы entrypoint и ports.
Бенчмарк
Файл бенчмарка из оффициального репозитория php: 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, конечно, сильно ускоряет операции связанные с использованием CPU. Но меня поразило другое. В php по умолчанию используется opcache.enable_cli=0. Если включить эту опцию, то можно получить двухкратный рост в бенчмарке. Лично я не знал о том, что opcache может так ускорять cli команды.
Я проверял несколько раз на чистых контейнерах, а так же с предварительной очисткой opcache. Результат всегда один и тот же: opcache.enable_cli=1 ускоряет бенчмарк начиная с первого запуска.
===========
Источник:
habr.com
===========
Похожие новости:
- [Учебный процесс в IT, Карьера в IT-индустрии] Слёрм выпустил продвинутый практический курс по Docker
- [Node.JS] NestJS. Загрузка файлов в S3 хранилище (minio)
- [Информационная безопасность, Системное администрирование, Серверное администрирование, DevOps] Как незакрытый Docker API и публичные образы от сообщества используются для распространения майнеров криптовалют (перевод)
- [Разработка веб-сайтов, PHP, Проектирование и рефакторинг] Сущности (entities) и сервисы (services) как основа распределенной логики для MVC шаблона проектирования
- [Разработка веб-сайтов, PHP, Программирование, Go] Мне кажется, дело не в языке, а в том, как на нем пишут
- [Информационная безопасность, Серверное администрирование, DevOps, Kubernetes] Изучаем (отсутствующую) безопасность типичных установок Docker и Kubernetes (перевод)
- [PHP, Symfony, ReactJS] SSR: рендеринг ReactJS приложения на бекэнде используя PHP
- [Разработка веб-сайтов, PHP, Программирование, Будущее здесь] Как будет выглядеть программирование в 2025 году? (перевод)
- Началось бета-тестирование PHP 8
- [Open source, Виртуализация, Разработка под Linux, Openshift] Современные приложения на OpenShift, часть 2: связанные сборки chained builds
Теги для поиска: #_php, #_php, #_php_8, #_jit, #_docker, #_opcache, #_php
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 20:11
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Зима близко! А вместе с ней близится и релиз php 8. Если вам не терпится протестировать свой код в beta версии php 8, а заодно пощупать jit, то прошу под кат. TL:DR; Все примеры можно скачать с github и сразу запустить: github.com/xtrime-ru/php8-test Подготовка Для начала потребуется поставить docker и docker-compose. Теперь создадим opcache.ini файл, который включит opcache и JIT в нашем контейнере. ; 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 Теперь в рабочей папке нужно создать Dockerfile. Список пакетов и расширений приведен для примера. Можно удалить эти строки или указать нужные именно вам расширения. Так же часть популярных расширений уже включена в базовый образ. Так что подключать json, xml и многие другие не требуется. 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 Остался последний файл. Это docker-compose.yml, который позволяет легко управлять контейнерами при разработке. 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" Теперь можно запускать сборку контейнера и тесты.
Бенчмарк Файл бенчмарка из оффициального репозитория php: 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, конечно, сильно ускоряет операции связанные с использованием CPU. Но меня поразило другое. В php по умолчанию используется opcache.enable_cli=0. Если включить эту опцию, то можно получить двухкратный рост в бенчмарке. Лично я не знал о том, что opcache может так ускорять cli команды. Я проверял несколько раз на чистых контейнерах, а так же с предварительной очисткой opcache. Результат всегда один и тот же: opcache.enable_cli=1 ускоряет бенчмарк начиная с первого запуска. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 20:11
Часовой пояс: UTC + 5