Facebook ga ut Cinder-kildekoden som brukes av Instagram

Facebook avduket nylig gjennom et innlegg, frigjør kildekoden til Cinder-prosjektet, som er en gaffel av CPython-grenen og den viktigste referanseimplementeringen av Python-programmeringsspråket.

Cinder brukt i Facebooks produksjonsinfrastruktur for å drive Instagram og inkluderer optimaliseringer for å forbedre ytelsen. Koden er publisert for å diskutere muligheten for å migrere ferdige optimaliseringer til mainstream av CPython og for å hjelpe andre CPython ytelsesforbedringsprosjekter.

Facebook nevner at det ikke vil støtte Cinder som et eget open source-prosjekt og koden presenteres i den form den brukes i selskapets infrastruktur, uten ytterligere dokumentasjon.

Cinder markedsfører heller ikke seg selv som et alternativ til CPython - hovedutviklingsmålet er å forbedre CPython selv.

Cinders kode anses som rimelig pålitelig og testet i produksjonsmiljøer, men hvis problemer blir identifisert, må de løses alene, siden Facebook ikke garanterer at det vil svare på eksterne feilmeldinger og trekk forespørsler.

Samtidig ekskluderer ikke Facebook konstruktivt samarbeid med samfunnet, og er klar til å diskutere ideer om hvordan du kan gjøre Cinder enda raskere, eller hvordan du kan fremskynde overføringen av forberedte endringer til CPython-hovedrammeverket.

De viktigste optimaliseringene implementert i Cinder er:

  • Bytecode online caching: Essensen av metoden er å identifisere typiske situasjoner for utførelse av opkoder som kan optimaliseres dynamisk og erstatte denne opkoden med raskere spesialiserte alternativer.
  • Rutinemessig evaluering: For asynkrone funksjonsanrop som behandles umiddelbart, erstattes resultatet av disse funksjonene direkte uten å lage en coroutine og uten å påkalle en hendelsessløyfe. I koden som brukes av Facebook, som den bruker tungt, fører optimalisering til en akselerasjon på omtrent 5%.
  • Selektiv JIT-samling på nivå med individuelle metoder og funksjoner: den er aktivert av alternativet "-X jit" eller miljøvariabelen PYTHONJIT = 1 og lar mange ytelsestester akselereres 1,5 til 4 ganger.
    Listen over funksjoner som JIT skal aktiveres for kan bestemmes ut fra resultatene av profilen. I fremtiden forventes støtte for dynamisk JIT-kompilering basert på intern analyse av funksjonsanropsfrekvens, men med tanke på detaljene til lanseringsprosesser på Instagram, er JIT-kompilering også egnet for Facebook i den innledende fasen.
    JIT konverterer først Pythons bytekode til en høyt nivå mellomrepresentasjon (HIR), som er rimelig nær Pythons bytekode, men er designet for å bruke en platebasert virtuell maskin i stedet for en rekordbasert virtuell maskin. tilleggsinformasjon og detaljer som er relevante for ytelsen. HIR blir deretter konvertert til en statisk enkeltallokering (SSA) -form og gjennomgår stadier av optimalisering basert på referansetelling og minnebrukdata. Som et resultat genereres en mellomnivårepresentasjon på lavt nivå (LIR) som er nær monteringsspråket.
  • Streng modus for moduler:Funksjonaliteten har tre komponenter: StrictModule-typen. En statisk analysator som er i stand til å bestemme at kjøringen av en modul ikke påvirker koden utenfor den modulen.
  • Statisk python: er en eksperimentell bytecode-kompilator som bruker typekommentarer for å generere bytecode som er spesifikk for hver type og går raskere gjennom JIT-kompilering. I noen tester viser kombinasjonen av Static Python og JIT opptil 7 ganger ytelsesforbedring sammenlignet med typisk CPython. I mange situasjoner blir resultatene evaluert som om MyPyC og Cython kompilatorene ble brukt.

Endelig hvis du er interessert i å kunne få tak i Cinder-koden eller lære mer om det, kan du konsultere detaljer i følgende lenke.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.