O Facebook lançou o código-fonte do Cinder que é usado pelo Instagram

Facebook revelado recentemente por meio de uma postagem, liberando o código-fonte do projeto Cinder, qual é uma bifurcação do ramo CPython e a principal referência de implementação da linguagem de programação Python.

cinza usado na infraestrutura de produção do Facebook para alimentar o Instagram e inclui otimizações para melhorar o desempenho. O código foi publicado para discutir a possibilidade de migrar otimizações prontas para o mainstream do CPython e para auxiliar outros projetos de melhoria de desempenho do CPython.

O Facebook menciona que não oferecerá suporte ao Cinder como um projeto de código aberto separado e o código é apresentado na forma em que é utilizado na infraestrutura da empresa, sem documentação adicional.

O Cinder também não está se promovendo como uma alternativa ao CPython - o principal objetivo do desenvolvimento é melhorar o próprio CPython.

O código de Cinder é considerado razoavelmente confiável e testado em ambientes de produção, mas se forem identificados problemas, eles precisarão ser resolvidos por conta própria, pois o Facebook não garante que responderá a mensagens de erro externas e solicitações de pull.

Ao mesmo tempo, o Facebook não exclui a cooperação construtiva com a comunidade e está pronto para discutir ideias sobre como tornar o Cinder ainda mais rápido ou como acelerar a transferência das mudanças preparadas para o framework CPython principal.

As principais otimizações implementadas no Cinder são:

  • Cache online de Bytecode: A essência do método é identificar situações típicas de execução de opcode que podem ser otimizadas dinamicamente e substituir esse opcode por opções especializadas mais rápidas.
  • Avaliação de rotina: Para chamadas de função assíncronas que são processadas imediatamente, o resultado dessas funções é substituído diretamente, sem criar uma co-rotina e sem invocar um loop de eventos. No código usado pelo Facebook, que usa fortemente, a otimização leva a uma aceleração de cerca de 5%.
  • Compilação seletiva de JIT no nível de métodos e funções individuais: ele é habilitado pela opção "-X jit" ou pela variável de ambiente PYTHONJIT = 1 e permite que muitos testes de desempenho sejam acelerados de 1,5 a 4 vezes.
    A lista de funções para as quais o JIT deve ser habilitado pode ser determinada com base nos resultados do perfil. No futuro, o suporte para compilação JIT dinâmica com base na análise interna da frequência de chamada de função é esperado, mas considerando as especificações dos processos de lançamento no Instagram, a compilação JIT também é adequada para o Facebook no estágio inicial.
    O JIT primeiro converte o bytecode do Python em uma representação intermediária de alto nível (HIR), que é razoavelmente próximo ao bytecode do Python, mas é projetado para usar uma máquina virtual baseada em registro em vez de uma máquina virtual baseada em registro. Pilha e também usa informações adicionais de tipo e detalhes relevantes para o desempenho. O HIR é então convertido em um formulário Static Single Allocation (SSA) e passa por estágios de otimização com base na contagem de referência e nos dados de uso de memória. Como resultado, uma representação intermediária de baixo nível (LIR) é gerada, que é próxima à linguagem assembly.
  • Modo estrito para módulos:A funcionalidade possui três componentes: O tipo StrictModule. Um analisador estático capaz de determinar que a execução de um módulo não afeta o código fora desse módulo.
  • Python estático: é um compilador de bytecode experimental que usa anotações de tipo para gerar bytecode que é específico para cada tipo e é executado mais rápido por meio da compilação JIT. Em alguns testes, a combinação de Static Python e JIT demonstra uma melhoria de desempenho de até 7x em relação ao CPython típico. Em muitas situações, os resultados são avaliados como se os compiladores MyPyC e Cython fossem usados.

Finalmente se você estiver interessado em obter o código Cinder ou saiba mais sobre ele, você pode consultar o detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.