Facebook frigav Cinder-kildekoden, som bruges af Instagram

Facebook afsløret for nylig gennem et indlæg, frigive kildekoden til Cinder-projektet, som er en gaffel af CPython-grenen og den vigtigste referenceimplementering af Python-programmeringssproget.

Cinder brugt i Facebooks produktionsinfrastruktur til at drive Instagram og inkluderer optimeringer for at forbedre ydeevnen. Koden er blevet offentliggjort for at diskutere muligheden for at migrere færdige optimeringer til mainstream af CPython og for at hjælpe andre CPython-forbedringsprojekter.

Facebook nævner, at det ikke understøtter Cinder som et separat open source-projekt og koden præsenteres i den form, den bruges i virksomhedens infrastruktur uden yderligere dokumentation.

Cinder promoverer heller ikke sig selv som et alternativ til CPython - det vigtigste udviklingsmål er at forbedre CPython selv.

Cinder's kode betragtes som rimelig pålidelig og testet i produktionsmiljøer, men hvis der identificeres problemer, skal de løses alene, da Facebook ikke garanterer, at det reagerer på eksterne fejlmeddelelser og træk anmodninger.

På samme tid udelukker Facebook ikke konstruktivt samarbejde med samfundet og er klar til at diskutere ideer til, hvordan man gør Cinder endnu hurtigere, eller hvordan man fremskynder overførslen af ​​forberedte ændringer til CPythons hovedramme.

De vigtigste optimeringer implementeret i Cinder er:

  • Bytecode online caching: Essensen af ​​metoden er at identificere typiske opcode-eksekveringssituationer, der kan optimeres dynamisk, og erstatte denne opcode med hurtigere specialiserede muligheder.
  • Rutinemæssig evaluering: For asynkrone funktionsopkald, der behandles med det samme, tilsidesættes resultatet af disse funktioner direkte uden at oprette en coroutine og uden at påkalde en hændelsessløjfe. I den kode, der bruges af Facebook, som den bruger stærkt, fører optimering til en acceleration på ca. 5%.
  • Selektiv JIT-kompilering på niveau med individuelle metoder og funktioner: det er aktiveret af indstillingen "-X jit" eller miljøvariablen PYTHONJIT = 1 og tillader, at mange præstationstest accelereres 1,5 til 4 gange.
    Listen over funktioner, som JIT skal aktiveres for, kan bestemmes ud fra resultaterne af profilen. I fremtiden forventes understøttelse af dynamisk JIT-kompilering baseret på intern analyse af funktionsopkaldsfrekvens, men i betragtning af detaljerne ved lanceringsprocesser på Instagram er JIT-kompilering også egnet til Facebook i den indledende fase.
    JIT konverterer først Pythons bytecode til en højniveau mellemrepræsentation (HIR), som er rimeligt tæt på Pythons bytecode, men er designet til at bruge en rekordbaseret virtuel maskine snarere end en rekordbaseret virtuel maskine. bruger typeoplysninger og yderligere detaljer, der er relevante for ydeevnen. HIR konverteres derefter til en statisk enkeltallokering (SSA) form og gennemgår stadier af optimering baseret på referencetælling og hukommelsesforbrugsdata. Som et resultat genereres en lav-niveau mellemrepræsentation (LIR), som er tæt på samlingssprog.
  • Streng tilstand for moduler:Funktionaliteten har tre komponenter: StrictModule-typen. En statisk analysator, der er i stand til at bestemme, at udførelsen af ​​et modul ikke påvirker koden uden for dette modul.
  • Statisk python: er en eksperimentel bytecode-kompilator, der bruger typebetegnelser til at generere bytecode, der er specifik for hver type og kører hurtigere gennem JIT-kompilering. I nogle tests demonstrerer kombinationen af ​​Statisk Python og JIT op til 7 gange forbedring af ydeevnen i forhold til typisk CPython. I mange situationer vurderes resultaterne, som om MyPyC- og Cython-compilerne blev brugt.

Endelig hvis du er interesseret i at kunne få Cinder-koden eller lære mere om det, kan du konsultere detaljer i følgende link.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.