Представлен Facebook недавно через сообщение, выпуск исходного кода проекта Cinder, который форк ветки CPython и основная эталонная реализация языка программирования Python.
шлак используется в производственной инфраструктуре Facebook для поддержки Instagram и включает оптимизацию для повышения производительности. Код был опубликован для обсуждения возможности переноса готовых оптимизаций в основной поток CPython и для помощи другим проектам повышения производительности CPython.
Facebook упоминает, что не будет поддерживать Cinder как отдельный проект с открытым исходным кодом. и код представлен в том виде, в котором он используется в инфраструктуре компании, без дополнительной документации.
Cinder также не продвигает себя как альтернативу CPython - основная цель разработки - улучшить сам CPython.
Код Cinder считается достаточно надежным и протестирован в производственных средах, но если проблемы будут выявлены, их нужно будет решить самостоятельно, поскольку Facebook не гарантирует, что он будет реагировать на внешние сообщения об ошибках. и запросы на вытягивание.
При этом Facebook не исключает конструктивного сотрудничества с сообществом и готов обсуждать идеи, как сделать Cinder еще быстрее или как ускорить перенос подготовленных изменений в основной фреймворк CPython.
Основные оптимизации, реализованные в Cinder:
- Онлайн-кеширование байт-кода: Суть метода состоит в том, чтобы определить типичные ситуации выполнения кода операции, которые можно динамически оптимизировать, и заменить этот код операции более быстрыми специализированными параметрами.
- Обычная оценка: Для вызовов асинхронных функций, которые обрабатываются немедленно, результат этих функций подставляется напрямую, без создания сопрограммы и без вызова цикла обработки событий. В коде, используемом Facebook, который он активно использует, оптимизация приводит к ускорению примерно на 5%.
- Выборочная JIT-компиляция на уровне отдельных методов и функций: он включается параметром «-X jit» или переменной среды PYTHONJIT = 1 и позволяет ускорить многие тесты производительности в 1,5–4 раза.
Список функций, для которых следует включить JIT, можно определить по результатам профиля. В будущем ожидается поддержка динамической JIT-компиляции на основе внутреннего анализа частоты вызовов функций, но, учитывая специфику процессов запуска в Instagram, JIT-компиляция также подходит для Facebook на начальном этапе.
JIT сначала преобразует байт-код Python в высокоуровневое промежуточное представление (HIR), которое достаточно близко к байт-коду Python, но предназначено для использования виртуальной машины на основе записей, а не виртуальной машины на основе записей. Стек, а также использует дополнительная информация о типе и подробности, относящиеся к производительности. Затем HIR преобразуется в форму статического единого распределения (SSA) и проходит этапы оптимизации на основе данных счетчика ссылок и использования памяти. В результате создается низкоуровневое промежуточное представление (LIR), близкое к языку ассемблера. - Строгий режим для модулей:Функциональность состоит из трех компонентов: Тип StrictModule. Статический анализатор, способный определить, что выполнение модуля не влияет на код вне этого модуля.
- Статический Python: - экспериментальный компилятор байт-кода, который использует аннотации типов для генерации байт-кода, специфичного для каждого типа, и быстрее выполняется посредством JIT-компиляции. В некоторых тестах комбинация Static Python и JIT демонстрирует повышение производительности до 7 раз по сравнению с обычным CPython. Во многих ситуациях результаты оцениваются так, как если бы использовались компиляторы MyPyC и Cython.
В конце концов если вы хотите получить код Cinder или узнать больше об этом, вы можете проконсультироваться подробности по следующей ссылке.