то ждем ваше обращение в нашей службе тех поддержки.
В новой версии PHP8+ реализована JIT-компиляция, которой не мог похвастаться PHP, но теперь и у "пыхарей" есть такая функция повышения производительности.
Напомним, что JIT-компиляция (англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция (англ. dynamic translation) — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы.
Т.е. JIT - это некая динамическая способность ускорения в процессе выполнения на реальных данных.
Уже не новость, что новое ядро битрикса модуль main 23+ требует php8 и поддержка более низких версий прекращена, так что использование всех новых возможностей php8 звучит как не плохая идея.
Мы попробовали запустить JIT в битрикс окружении, на ряде проектов он работал стабильно, на других возникали ошибки двух видов: Segmentation fault и Fatal Error Insufficient shared memory. Все они требуют gdb-отладки, а так далеко сейчас мы идти не хотим ;) т.к. нам хочется получить профит малыми силами. В качестве экспериментов мы нашли более-менее стабильную конфигурацию, которая может подойти и вам.
После нахождения конфигурации мы спросили официальную позицию команды битрикс по этому вопросу и получили следующий ответ:
Мы не используем JIT. Вы можете включить JIT как писали выше и попробовать использовать, но стабильная работа тут не гарантирована.
Могут возникнуть сложности в работе продукта, которое потребуется решать самостоятельно.
Старший инженер технической поддержки
Андрей Косоротов.
Так что можете экспериментировать на свой «страх и риск» реализуя свои технические амбиции.
В битрикс окружении все включается редактированием конфигурации в файле /etc/php.d/z_bx_custom_settings.ini
(если файла нет – его нужно создать):
opcache.jit_buffer_size=16M ; рекомендуем ставить не более 32мб opcache.jit = tracing ; про эту настройку читайте ниже («Дополнительная информация») opcache.enable_cli=0 ; эту директиву рекомендуем держать выключенной, с ней с наибольшей вероятностью ; у нас возникали проблемы с запуском агентов на cron и других скриптов из командной строки ; дополнительно: opcache.huge_code_pages = On ; huge pages - отдельная сложная тема управления памятью, ; но обычно это улучшает быстродействие opcache.enable_file_override = 1 ; более быстрая работа с файловыми операциями opcache.max_accelerated_files = 500000 ; побольше файлов в opcache, при этом следите за тем, чтобы памяти, ; выделенной под opcache директивой opcache.memory_consumption хватало ; тоже не помешает: realpath_cache_size = 14096k ; больше кеша открытых файлов pcre.jit = 1 ; этот же jit в регулярных выражениях
# pkill -9 httpd && apachectl restart && systemctl restart httpd-scale.service
Дополнительная информация: Разница между режимами opcache.jit(function и tracing) заключается в том, что при параметре function JIT пытается оптимизировать код только в рамках одной функции, в то время как JIT tracing может просматривать всю трассировку стека, чтобы идентифицировать и оптимизировать горячий код. PHP Internals рекомендует использовать JIT-трассировку, потому что она почти всегда дает наилучшие результаты.
Получаемый прирост при использовании JIT
Теоретически это дает некий небольшой прирост, который мы сами еще не оценили, да и его трудно оценить объективно, т.к. результаты зависят от самого приложения (на то это и динамическая компиляция). Судя по сторонним исследованиям, прирост на реальных приложениях совсем не большой:
Но видимо для отдельных задач типа генерации pdf или excel-файлов, или математических операций – должен быть прирост больше.
Тем не менее, радует сама возможность использовать новые функции из окружения php, которые зачастую не доступны Битрикс-разработчикам (или доступны гораздо позже всех остальных из мира php ;).
Для дополнительного изучения вопроса:
PS А как на счет запуска PHP JIT под Windows с битриком?
Сперва у нас не удалось запустить из-за ошибки модуля mpm_winnt в апаче и его несовместимости с PHP JIT под windows. Но на момент написания статьи и с последними билдами Apache все заработало и для проектов на битриксе:Server Version: Apache/2.4.57 (Win64) PHP/8.0.28Если у вас есть вопросы – напишите нам - мы рады любой обратной связи.
Apache Lounge VS17 Server built: May 31 2023 10:48:22
System: Windows NT HIPOT3 10.0 build 19045 (Windows 10) AMD64
Назад в раздел