Facebook heeft de Cinder-broncode vrijgegeven die wordt gebruikt door Instagram

Facebook onthuld onlangs via een bericht, het vrijgeven van de broncode van het Cinder-project, dat is een vork van de CPython-tak en de belangrijkste referentie-implementatie van de programmeertaal Python.

Sintel gebruikt in de productie-infrastructuur van Facebook om Instagram van stroom te voorzien en omvat optimalisaties om de prestaties te verbeteren. De code is gepubliceerd om de mogelijkheid te bespreken om kant-en-klare optimalisaties naar de mainstream van CPython te migreren en om andere prestatieverbeteringsprojecten van CPython te ondersteunen.

Facebook vermeldt dat het Cinder niet zal ondersteunen als een afzonderlijk open source-project en de code wordt gepresenteerd in de vorm waarin deze wordt gebruikt in de infrastructuur van het bedrijf, zonder aanvullende documentatie.

Cinder promoot zichzelf ook niet als een alternatief voor CPython - het belangrijkste ontwikkelingsdoel is om CPython zelf te verbeteren.

De code van Cinder wordt als redelijk betrouwbaar beschouwd en getest in productieomgevingen, maar als er problemen worden geïdentificeerd, moeten deze zelf worden opgelost, aangezien Facebook niet garandeert dat het zal reageren op externe foutmeldingen en trekverzoeken.

Tegelijkertijd sluit Facebook constructieve samenwerking met de gemeenschap niet uit en is het bereid ideeën te bespreken over hoe Cinder nog sneller kan worden gemaakt of hoe de overdracht van voorbereide wijzigingen naar het hoofdkader van CPython kan worden versneld.

De belangrijkste optimalisaties die in Cinder zijn geïmplementeerd, zijn:

  • Bytecode online caching: De essentie van de methode is om typische opcode-uitvoeringssituaties te identificeren die dynamisch kunnen worden geoptimaliseerd en die opcode te vervangen door snellere gespecialiseerde opties.
  • Routinematige evaluatie: Voor asynchrone functieaanroepen die onmiddellijk worden verwerkt, wordt het resultaat van die functies direct overschreven zonder een coroutine te maken en zonder een gebeurtenislus aan te roepen. In de code die Facebook gebruikt, die het veel gebruikt, leidt optimalisatie tot een versnelling van ongeveer 5%.
  • Selectieve compilatie van JIT op het niveau van individuele methoden en functies: het wordt mogelijk gemaakt door de optie "-X jit" of de omgevingsvariabele PYTHONJIT = 1 en maakt het mogelijk dat veel prestatietests 1,5 tot 4 keer worden versneld.
    De lijst met functies waarvoor JIT moet worden ingeschakeld, kan worden bepaald op basis van de resultaten van het profiel. In de toekomst wordt ondersteuning voor dynamische JIT-compilatie op basis van interne analyse van de frequentie van functieaanroepen verwacht, maar gezien de specifieke kenmerken van lanceringsprocessen op Instagram, is JIT-compilatie in de beginfase ook geschikt voor Facebook.
    De JIT converteert eerst Python-bytecode naar een high-level intermediate representatie (HIR), die redelijk dicht bij Python-bytecode ligt, maar is ontworpen om een ​​op records gebaseerde virtuele machine te gebruiken in plaats van een op records gebaseerde virtuele machine. In stapel, en ook gebruikt type-informatie en aanvullende details die relevant zijn voor de prestaties. De HIR wordt vervolgens geconverteerd naar een Static Single Allocation (SSA) -vorm en ondergaat optimalisatiestadia op basis van referentietelling en geheugengebruiksgegevens. Als resultaat wordt een low-level intermediate representatie (LIR) gegenereerd, die dicht bij assembleertaal ligt.
  • Strikte modus voor modules:De functionaliteit heeft drie componenten: Het type StrictModule. Een statische analysator die kan bepalen dat de uitvoering van een module geen invloed heeft op de code buiten die module.
  • Statische python: is een experimentele bytecode-compiler die type-annotaties gebruikt om bytecode te genereren die specifiek is voor elk type en die sneller door JIT-compilatie loopt. In sommige tests laat de combinatie van Static Python en JIT tot 7x prestatieverbetering zien ten opzichte van typische CPython. In veel situaties worden de resultaten geëvalueerd alsof de MyPyC- en Cython-compilers werden gebruikt.

Eindelijk als u geïnteresseerd bent in het verkrijgen van de Cinder-code of lees er meer over, raadpleeg dan de details in de volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.