Facebook разкри наскоро чрез публикация, освобождаване на изходния код на проекта Cinder, кое е вилица на клона CPython и основната референтна реализация на езика за програмиране Python.
сгурия използва се в производствената инфраструктура на Facebook за захранване на Instagram и включва оптимизации за подобряване на производителността. Кодът е публикуван, за да обсъди възможността за мигриране на готови оптимизации към основния поток на CPython и за подпомагане на други проекти за подобряване на производителността на CPython.
Facebook споменава, че няма да поддържа Cinder като отделен проект с отворен код и кодът е представен във вида, в който се използва в инфраструктурата на компанията, без допълнителна документация.
Cinder също не се рекламира като алтернатива на CPython - основната цел на разработката е да подобри самия CPython.
Кодът на Cinder се счита за достатъчно надежден и тествани в производствена среда, но ако се установят проблеми, те ще трябва да бъдат разрешени сами, тъй като Facebook не гарантира, че ще реагира на външни съобщения за грешка и издърпайте заявки.
В същото време Facebook не изключва конструктивно сътрудничество с общността и е готов да обсъди идеи за това как да направим Cinder още по-бърз или как да ускори прехвърлянето на подготвените промени в основната рамка на CPython.
Основните оптимизации, внедрени в Cinder, са:
- Онлайн кеширане на байт кодове: Същността на метода е да идентифицира типични ситуации за изпълнение на opcode, които могат да бъдат динамично оптимизирани и да замени този opcode с по-бързи специализирани опции.
- Рутинна оценка: За асинхронни извиквания на функции, които се обработват незабавно, резултатът от тези функции се заменя директно, без да се създава съпрограма и без да се извиква цикъл на събития. В кода, използван от 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 или да научите повече за това, можете да се консултирате с подробности в следващия линк.