Facebook je izdal izvorno kodo Cinder, ki jo uporablja Instagram

Facebook predstavljen pred kratkim prek objave, sprostitev izvorne kode projekta Cinder, kateri je vilica veje CPython in glavna referenčna izvedba programskega jezika Python.

Cinder uporablja v proizvodni infrastrukturi Facebooka za pogon Instagrama in vključuje optimizacije za izboljšanje učinkovitosti. Koda je bila objavljena, da bi razpravljali o možnosti selitve že pripravljenih optimizacij na mainstream CPython in pomagali drugim projektom za izboljšanje učinkovitosti CPythona.

Facebook omenja, da Cinderja ne bo podpiral kot ločenega odprtokodnega projekta in koda je predstavljena v obliki, v kateri se uporablja v infrastrukturi podjetja, brez dodatne dokumentacije.

Tudi Cinder se ne promovira kot alternativa CPythonu - glavni razvojni cilj je izboljšanje samega CPythona.

Cinderjeva koda velja za dokaj zanesljivo in preizkušeni v proizvodnih okoljih, vendar če bodo težave odkrite, jih bo treba rešiti sami, saj Facebook ne zagotavlja, da se bo odzval na zunanja sporočila o napakah in povlecite zahteve.

Facebook hkrati ne izključuje konstruktivnega sodelovanja s skupnostjo in je pripravljen razpravljati o idejah, kako Cinder narediti še hitrejši ali kako pospešiti prenos pripravljenih sprememb v glavni okvir CPython.

Glavne optimizacije, ki jih izvaja Cinder, so:

  • Spletno predpomnjenje bytecode: Bistvo metode je prepoznati tipične primere izvajanja opcode, ki jih je mogoče dinamično optimizirati, in nadomestiti to opcode s hitrejšimi specializiranimi možnostmi.
  • Redno ocenjevanje: Pri klicih asinhronih funkcij, ki se obdelajo takoj, se rezultat teh funkcij preglasi neposredno, ne da bi ustvarili podprogram in ne prikličete zanke dogodka. V kodi, ki jo uporablja Facebook in jo pogosto uporablja, optimizacija vodi do približno 5% pospeška.
  • Selektivna kompilacija JIT na ravni posameznih metod in funkcij: omogočena je z možnostjo "-X jit" ali spremenljivko okolja PYTHONJIT = 1 in omogoča, da se številni testi zmogljivosti pospešijo za 1,5 do 4-krat.
    Seznam funkcij, za katere naj bo omogočen JIT, lahko določimo na podlagi rezultatov profila. V prihodnosti se pričakuje podpora za dinamično kompilacijo JIT, ki temelji na notranji analizi pogostosti klicev funkcij, vendar je glede na posebnosti procesov zagona na Instagramu kompilacija JIT v začetni fazi primerna tudi za Facebook.
    JIT najprej pretvori bajtno kodo Python v vmesno predstavitev na visoki ravni (HIR), ki je sicer primerno z bajtno kodo Python, vendar je zasnovana za uporabo navideznega stroja, ki temelji na zapisu, in ne navideznega stroja na osnovi zapisov. uporablja informacije o tipu in dodatne podrobnosti, pomembne za delovanje. Nato se HIR pretvori v obliko statične enojne dodelitve (SSA) in opravi faze optimizacije na podlagi števila referenc in podatkov o uporabi pomnilnika. Kot rezultat se ustvari vmesna predstavitev na nizki ravni (LIR), ki je blizu montažnemu jeziku.
  • Strogi način za module:Funkcionalnost ima tri komponente: tip StrictModule. Statični analizator, ki lahko ugotovi, da izvajanje modula ne vpliva na kodo zunaj tega modula.
  • Statični Python: je eksperimentalni prevajalnik bajt kod, ki uporablja pripise tipov za generiranje bajtkode, ki je specifična za posamezen tip in hitreje teče skozi JIT prevajanje. V nekaterih testih kombinacija Static Python in JIT do 7-krat izboljša zmogljivost v primerjavi s tipičnim CPythonom. V mnogih primerih se rezultati ocenijo, kot da bi bili uporabljeni prevajalniki MyPyC in Cython.

Končno če vas zanima, kako lahko pridobite kodo Cinder ali če želite izvedeti več o tem, se lahko obrnete na podrobnosti na naslednji povezavi.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.