Русский
Русский
English
Статистика
Реклама

Opcache

Recovery mode Запускаем php 8 с jit через docker за 5 минут

15.08.2020 02:16:25 | Автор: admin
Зима близко! А вместе с ней близится и релиз 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.soopcache.enable=1opcache.enable_cli=1opcache.jit_buffer_size=32Mopcache.jit=1235


Теперь в рабочей папке нужно создать Dockerfile.
Список пакетов и расширений приведен для примера. Можно удалить эти строки или указать нужные именно вам расширения. Так же часть популярных расширений уже включена в базовый образ. Так что подключать json, xml и многие другие не требуется.

FROM php:8.0-rc-cliCOPY 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"


Теперь можно запускать сборку контейнера и тесты.

  1. Собираем образ: docker-compose build
  2. Запускаем контейнер в фоне: docker-compose up -d
  3. Подключаемся к контейнеру: docker exec -it php8-test /bin/bash
  4. Текущая папка на контейнере синхронизирована с папкой проекта. Файлы можно редактировать на локальной машине.
  5. Скачиваем файл бенчмарка: github.com/php/php-src/blob/master/Zend/bench.php
  6. Запускаем бенч: php bench.php
  7. Можно отключить jit или opcache внутри контейнера тут: /usr/local/etc/php/conf.d/opcache.ini, что бы посмотреть, как изменится производительность
  8. В docker-compose.yml можно изменить директивы `volumes` и `workdir`, что бы залинковать другие директории в контейнер. Так же можно поменять entrypoint для запуска другой команды при старте контейнера. Например `php artisan serve` для laravel.
  9. Все файлы так же можно посмотреть в браузере по адресу 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=0simple             0.053simplecall         0.007simpleucall        0.019simpleudcall       0.022mandel             0.182mandel2            0.220ackermann(7)       0.038ary(50000)         0.006ary2(50000)        0.005ary3(2000)         0.045fibo(30)           0.069hash1(50000)       0.014hash2(500)         0.008heapsort(20000)    0.036matrix(20)         0.034nestedloop(12)     0.089sieve(30)          0.014strcat(200000)     0.006------------------------Total              0.867########################## php 7.4.9# opcache.enable=1# opcache.enable_cli=1simple             0.007simplecall         0.003simpleucall        0.004simpleudcall       0.003mandel             0.088mandel2            0.113ackermann(7)       0.036ary(50000)         0.006ary2(50000)        0.007ary3(2000)         0.039fibo(30)           0.055hash1(50000)       0.012hash2(500)         0.008heapsort(20000)    0.030matrix(20)         0.029nestedloop(12)     0.041sieve(30)          0.011strcat(200000)     0.007------------------------Total              0.499########################## php 8.0-rc# opcache.enable=1# opcache.enable_cli=1# opcache.jit_buffer_size=128M# opcache.jit=1235simple             0.002simplecall         0.001simpleucall        0.001simpleudcall       0.001mandel             0.008mandel2            0.009ackermann(7)       0.016ary(50000)         0.006ary2(50000)        0.007ary3(2000)         0.015fibo(30)           0.030hash1(50000)       0.016hash2(500)         0.011heapsort(20000)    0.014matrix(20)         0.012nestedloop(12)     0.010sieve(30)          0.004strcat(200000)     0.006------------------------Total              0.168


JIT, конечно, сильно ускоряет операции связанные с использованием CPU. Но меня поразило другое. В php по умолчанию используется opcache.enable_cli=0. Если включить эту опцию, то можно получить двухкратный рост в бенчмарке. Лично я не знал о том, что opcache может так ускорять cli команды.

Я проверял несколько раз на чистых контейнерах, а так же с предварительной очисткой opcache. Результат всегда один и тот же: opcache.enable_cli=1 ускоряет бенчмарк начиная с первого запуска.
Подробнее..
Категории: Php , Docker , Php 8 , Jit , Opcache

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru