Facebook släppte Cinder-källkoden som används av Instagram

Facebook presenteras nyligen genom ett inlägg, släppa källkoden för Cinder-projektet, vilket är en gaffel av CPython-grenen och den huvudsakliga referensimplementeringen av Python-programmeringsspråket.

Slagg används i Facebooks produktionsinfrastruktur för att driva Instagram och inkluderar optimeringar för att förbättra prestanda. Koden har publicerats för att diskutera möjligheten att migrera färdiga optimeringar till mainstream av CPython och för att hjälpa andra CPythons prestandaförbättringsprojekt.

Facebook nämner att det inte stöder Cinder som ett separat open source-projekt och koden presenteras i den form den används i företagets infrastruktur utan ytterligare dokumentation.

Cinder marknadsför inte heller sig själv som ett alternativ till CPython - huvudutvecklingsmålet är att förbättra CPython själv.

Cinders kod anses vara ganska tillförlitlig och testas i produktionsmiljöer, men om problem identifieras måste de lösas på egen hand, eftersom Facebook inte garanterar att det svarar på externa felmeddelanden och dra förfrågningar.

Samtidigt utesluter Facebook inte konstruktivt samarbete med samhället och är redo att diskutera idéer om hur man gör Cinder ännu snabbare eller hur man kan påskynda överföringen av förberedda förändringar till CPythons huvudram.

De viktigaste optimeringarna som implementeras i Cinder är:

  • Bytecode online-cachning: Kärnan i metoden är att identifiera typiska situationer för körning av opkoder som kan optimeras dynamiskt och ersätta opkoden med snabbare specialiserade alternativ.
  • Rutinutvärdering: För asynkrona funktionssamtal som behandlas omedelbart åsidosätts resultatet av dessa funktioner direkt utan att skapa en coroutine och utan att anropa en händelsesslinga. I koden som används av Facebook, som den använder kraftigt, leder optimering till en acceleration på cirka 5%.
  • Selektiv sammanställning av JIT på nivå med individuella metoder och funktioner: det är aktiverat av alternativet "-X jit" eller miljövariabeln PYTHONJIT = 1 och tillåter att många prestandatester accelereras 1,5 till 4 gånger.
    Listan över funktioner för vilka JIT ska aktiveras kan bestämmas utifrån resultaten av profilen. I framtiden förväntas stöd för dynamisk JIT-kompilering baserat på intern analys av funktionssamtalens frekvens, men med tanke på detaljerna för lanseringsprocesser på Instagram är JIT-kompilering också lämplig för Facebook i början.
    JIT konverterar först Python bytecode till en högnivå intermediär representation (HIR), som är ganska nära Python bytecode, men är utformad för att använda en postbaserad virtuell maskin snarare än en postbaserad virtuell maskin. använder typinformation och ytterligare detaljer som är relevanta för prestanda. HIR omvandlas sedan till en statisk enkel allokering (SSA) -form och genomgår optimeringssteg baserat på referensräkning och minnesanvändningsdata. Som ett resultat genereras en lågnivårepresentation (LIR), som ligger nära monteringsspråket.
  • Strikt läge för moduler:Funktionaliteten har tre komponenter: StrictModule-typen. En statisk analysator som kan bestämma att exekveringen av en modul inte påverkar koden utanför den modulen.
  • Statisk python: är en experimentell bytecode-kompilator som använder typkommentarer för att generera bytecode som är specifik för varje typ och går snabbare genom JIT-kompilering. I vissa tester visar kombinationen av Statisk Python och JIT upp till 7x prestandaförbättring jämfört med typisk CPython. I många situationer utvärderas resultaten som om MyPyC- och Cython-kompilatorerna användes.

Slutligen om du är intresserad av att få Cinder-koden eller läs mer om det kan du konsultera detaljer i följande länk.


Bli först att kommentera

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.