Facebook allibero el codi font de Cinder el qual és utilitzat per Instagram

Facebook va donar a conèixer recentment mitjançant una publicació, l'alliberament de la font d'el projecte Cinder, La qual és una bifurcació de la branca de CPython i la principal implementació de referència de l'llenguatge de programació Python.

Cinder s'utilitza en la infraestructura de producció de Facebook per impulsar Instagram i inclou optimitzacions per millorar el rendiment. El codi s'ha publicat per discutir la possibilitat de migrar optimitzacions preparades al corrent principal de CPython i per ajudar a altres projectes de millora de l'rendiment de CPython.

Facebook esmenta que no va a admetre Cinder com un projecte de codi obert separat i el codi es presenta en la forma en què es fa servir en la infraestructura de l'empresa, sense documentació addicional.

Cinder tampoc s'està promocionant com una alternativa a CPython: el principal objectiu de desenvolupament és millorar el propi CPython.

El codi de Cinder es considera raonablement fiable i provat en entorns de producció, però si s'identifiquen problemes, s'han de resoldre per si mateixos, ja que Facebook no garanteix que respondrà a missatges d'error externs i sol·licituds d'extracció.

A el mateix temps, Facebook no exclou la cooperació constructiva amb la comunitat i està llest per discutir idees sobre com fer que Cinder sigui encara més ràpid o com accelerar la transferència de canvis preparats a l'estructura principal de CPython.

Les principals optimitzacions implementades en Cinder són:

  • Emmagatzematge en memòria cau en línia de el codi de bytes: L'essència de l'mètode és identificar situacions d'execució d'un codi d'operació típic que es pot optimitzar i reemplaçar dinàmicament aquest codi d'operació amb opcions especialitzades més ràpides.
  • Avaluació de rutina: Per a les trucades a funcions asíncrones que es processen immediatament, el resultat d'aquestes funcions se substitueix directament sense crear una corrutina i sense invocar un bucle d'esdeveniments. En el codi utilitzat per Facebook, que utilitza en gran mesura, l'optimització condueix a una acceleració d'aproximadament un 5%.
  • Compilació selectiva de JIT a nivell de mètodes i funcions individuals: s'habilita mitjançant l'opció «-X JIT» o la variable d'entorn PYTHONJIT = 1 i permet accelerar moltes proves de rendiment entre 1,5 i 4 vegades.
    La llista de funcions per a les quals s'ha d'habilitar JIT es pot determinar en funció dels resultats de l'perfil. En el futur, s'espera suport per a la compilació dinàmica de JIT basat en l'anàlisi interna de la freqüència de trucades a funcions, però tenint en compte les característiques específiques dels processos de llançament a Instagram, la compilació de JIT també és adequada per a Facebook en l'etapa inicial.
    El JIT primer converteix el codi de bytes de Python en una representació intermèdia d'alt nivell (HIR), que està raonablement prop de el codi de bytes de Python, però està dissenyat per utilitzar una màquina virtual basada en registres en lloc d'una màquina virtual basada en pila, i també usa informació de tipus i detalls addicionals rellevants per al desenvolupament. Després, el HIR esdevé un formulari d'assignació única estàtica (SSA) i se sotmet a etapes d'optimització basades en el recompte de referències i les dades d'ús de la memòria. Com a resultat, es genera una representació intermèdia de baix nivell (LIR), que s'acosta a l'llenguatge assemblador.
  • Mode estricte per mòduls:La funcionalitat té tres components: El tipus StrictModule. Un analitzador estàtic capaç de determinar que l'execució d'un mòdul no afecta el codi fora d'aquest mòdul.
  • Static Python: és un compilador de codi de bytes experimental que utilitza anotacions de tipus per generar codi de bytes que és específic per a cada tipus i s'executa més ràpid a través de la compilació JIT. En algunes proves, la combinació de Static Python i JIT demostra una millora de l'rendiment de fins a 7 vegades superior a l'CPython típic. En moltes situacions, els resultats s'avaluen com si es fessin servir els compiladors MyPyC i cython.

Finalment si estàs interessat en poder obtenir el codi de Cinder o conèixer més a l'respecte, pots consultar els detalls en el següent enllaç.


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.