Facebook випустив вихідний код Cinder, який використовується Instagram

Facebook представлений нещодавно через пост, випуск вихідного коду проекту Cinder, який є форк гілки CPython та основна довідкова реалізація мови програмування Python.

Сірник використовується у виробничій інфраструктурі Facebook для живлення Instagram і включає оптимізацію для підвищення продуктивності. Код опублікований для обговорення можливості перенесення готових оптимізацій на основний потік CPython та допомоги іншим проектам покращення продуктивності CPython.

Facebook зазначає, що не буде підтримувати Cinder як окремий проект з відкритим кодом а код представлений у тому вигляді, в якому він використовується в інфраструктурі компанії, без додаткової документації.

Cinder також не просуває себе як альтернативу CPython - основною метою розвитку є вдосконалення самого CPython.

Код Сіндера вважається досить надійним і тестується у виробничих середовищах, але у разі виявлення проблем їх потрібно буде вирішувати самостійно, оскільки 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 або дізнатися більше про це, ви можете проконсультуватися з подробиці за наступним посиланням.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.