Уровни оптимизации PHP OPcache — какие они?

Существует директива opcache.optimization_level php.ini. Это битовая маска по умолчанию 0xffffffff, поэтому по умолчанию OPcache выполняет всю оптимизацию.

Какие оптимизации делает OPcache? Какие передачи по байт-коду выполняются?

Дополнительный вопрос: существует ли шаблон кода, который OPcache может очень хорошо оптимизировать? Например, HHVM может пропускать выполнение файлов, содержащих только объявления классов/функций, и просто заполняет таблицы классов/функций.


person Jakub Kulhan    schedule 17.01.2014    source источник
comment
Несколько неполный документ доступен здесь: phpinternals.net/categories/opcache   -  person BenMorel    schedule 05.07.2019


Ответы (1)


Биты opcache.optimization_level соответствуют:

  • bit 0 - pass 1:
    • CSE - constants subexpressions elimination
    • Последовательности оптимизации ADD_CHAR/ADD_STRING
    • преобразовать CAST(IS_BOOL,x) в BOOL(x)
    • конвертировать INTI_FCALL_BY_NAME + DO_FCALL_BY_NAME в DO_FCALL
  • bit 1 - pass 2:
    • Convert constant operands to expected types
    • Преобразование условного JMP с постоянными операндами
    • Оптимизация статических BRK и ПРОДОЛЖЕНИЕ
  • bit 2 - pass 3:
    • Convert $a = $a + expr into $a += expr
    • Преобразовать $a++ в ++$a
    • Оптимизация серии JMP
  • bit 3 - pass 4:
    • PRINT and ECHO optimization - removed
  • bit 4 - pass 5:
    • block optimization (the most expensive optimization pass which perform many different optimization patterns based on CFG - control flow graph)
  • bit 8 - pass 9:
    • register allocation (allows re-usage of temporary variables)
  • bit 9 - pass 10:
    • remove NOPs

Я огляделся, чтобы увидеть, могу ли я найти что-нибудь в каких-либо шаблонах кода, которые он обрабатывает лучше, чем другие, но мне не повезло.

Информация с сайта https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c и https://gist.github.com/ck-on/4959032?ocp.php

person G-Nugget    schedule 22.01.2014
comment
Сейчас пропусков больше. lxr.room11.org/xref/php- src%40master/ext/opcache/Оптимизатор/ - person Thomas; 16.08.2019
comment
Ссылка от Томаса мертва. Вот соответствующий файл в репозитории github: github.com/php/php-src/blob/master/ext/opcache/Оптимизатор/ - person hBGl; 14.05.2020
comment
Ваша ссылка тоже мертва. ;) github.com/php/php-src/ блоб/ - person Thomas; 09.04.2021