Facebook lanzou o código fonte de Cinder que usa Instagram

Presentouse Facebook recentemente a través dunha publicación, liberando o código fonte do proxecto Cinder, que é unha bifurcación da rama CPython e a principal implementación de referencia da linguaxe de programación Python.

Cinder usado na infraestrutura de produción de Facebook para impulsar Instagram e inclúe optimizacións para mellorar o rendemento. O código publicouse para discutir a posibilidade de migrar optimizacións xa feitas á corrente principal de CPython e para axudar a outros proxectos de mellora do rendemento de CPython.

Facebook menciona que non admitirá Cinder como un proxecto de código aberto separado e o código preséntase na forma en que se usa na infraestrutura da empresa, sen documentación adicional.

Cinder tampouco se promociona como alternativa a CPython: o principal obxectivo de desenvolvemento é mellorar CPython en si.

O código de Cinder é considerado razoablemente fiable e probado en contornos de produción, pero se se identifican problemas, deberán resolverse por si mesmos, xa que Facebook non garante que responda ás mensaxes de erro externas e tirar peticións.

Ao mesmo tempo, Facebook non exclúe a cooperación construtiva coa comunidade e está preparado para discutir ideas sobre como facer Cinder aínda máis rápido ou como acelerar a transferencia de cambios preparados ao marco principal de CPython.

As principais optimizacións implementadas en Cinder son:

  • Almacenamento en caché en liña de bytecode: A esencia do método é identificar situacións típicas de execución de código de opción que se poden optimizar dinámicamente e substituír ese código de opcións por opcións especializadas máis rápidas.
  • Avaliación de rutina: Para as chamadas de funcións asíncronas que se procesan inmediatamente, o resultado desas funcións substitúese directamente sen crear unha rutina e sen invocar un bucle de sucesos. No código utilizado por Facebook, que usa moito, a optimización leva a unha aceleración de aproximadamente o 5%.
  • Recompilación selectiva de JIT a nivel de métodos e funcións individuais: está activado pola opción "-X jit" ou a variable de entorno PYTHONJIT = 1 e permítelle acelerar moitas probas de rendemento entre 1,5 e 4 veces.
    A lista de funcións para as que se debería habilitar JIT pódese determinar en función dos resultados do perfil. No futuro, espérase soporte para a compilación JIT dinámica baseada na análise interna da frecuencia de chamada de funcións, pero tendo en conta as especificidades dos procesos de lanzamento en Instagram, a compilación JIT tamén é adecuada para Facebook na fase inicial.
    O JIT converte primeiro o bytecode de Python nunha representación intermedia de alto nivel (HIR), que está razoablemente próxima ao bytecode de Python, pero está deseñado para usar unha máquina virtual baseada en rexistros en lugar dunha máquina virtual baseada en rexistros. usa información de tipo e detalles adicionais relevantes para o rendemento. A continuación, o HIR convértese nun formulario de asignación única estática (SSA) e experimenta etapas de optimización baseadas no reconto de referencia e os datos de uso de memoria. Como resultado, xérase unha representación intermedia de baixo nivel (LIR), próxima á linguaxe ensambladora.
  • Modo estrito para módulos:A funcionalidade ten tres compoñentes: o tipo StrictModule. Un analizador estático capaz de determinar que a execución dun módulo non afecta o código fóra dese módulo.
  • Python estático: é un compilador de bytecodes experimental que usa anotacións de tipo para xerar bytecode específico de cada tipo e que se executa máis rápido a través da compilación JIT. Nalgunhas probas, a combinación de Static Python e JIT demostra unha mellora do rendemento ata 7 veces superior ao CPython típico. En moitas situacións, os resultados avalíanse coma se se utilizasen os compiladores MyPyC e Cython.

Finalmente se estás interesado en poder obter o código Cinder ou saber máis sobre iso, pode consultar o detalles na seguinte ligazón.


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

Sexa o primeiro en opinar sobre

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.