Facebook je objavio izvorni kôd Cinder koji koristi Instagram

Facebook predstavljen nedavno putem posta, objavljivanje izvornog koda projekta Cinder, koji je rašlje grane CPython i glavna referentna implementacija programskog jezika Python.

Ugarak koristi se u proizvodnoj infrastrukturi Facebooka za pogon Instagrama i uključuje optimizacije za poboljšanje performansi. Kôd je objavljen kako bi se razgovaralo o mogućnosti migracije gotovih optimizacija na glavni tok CPythona i kako bi se pomoglo ostalim projektima poboljšanja izvedbe CPythona.

Facebook spominje da neće podržati Cinder kao zaseban projekt otvorenog koda a kôd je predstavljen u obliku u kojem se koristi u infrastrukturi tvrtke, bez dodatne dokumentacije.

Ni Cinder se ne promovira kao alternativa CPythonu - glavni razvojni cilj je poboljšati sam CPython.

Cinder-ov kôd smatra se razumno pouzdanim i testirano u proizvodnim okruženjima, ali ako se utvrde problemi, morat će ih se riješiti samostalno, jer Facebook ne jamči da će odgovoriti na vanjske poruke pogreške i povuci zahtjeve.

Istodobno, Facebook ne isključuje konstruktivnu suradnju sa zajednicom i spreman je raspravljati o idejama kako učiniti Cinder još bržim ili kako ubrzati prijenos pripremljenih promjena u glavni okvir CPythona.

Glavne optimizacije implementirane u Cinderu su:

  • Internetsko predmemoriranje bytecode-a: Bit metode je identificirati tipične situacije izvršavanja opcodea koje se mogu dinamički optimizirati i zamijeniti taj opcode bržim specijaliziranim opcijama.
  • Rutinsko ocjenjivanje: Za asinkrone pozive funkcija koji se obrađuju odmah, rezultat tih funkcija nadjačava se izravno bez stvaranja koroutine i bez pozivanja petlje događaja. U kodu koji koristi Facebook, a koji intenzivno koristi, optimizacija dovodi do ubrzanja od oko 5%.
  • Selektivna kompilacija JIT-a na razini pojedinih metoda i funkcija: omogućena je opcijom "-X jit" ili varijablom okruženja PYTHONJIT = 1 i omogućuje ubrzanje mnogih testova performansi za 1,5 do 4 puta.
    Popis funkcija za koje treba omogućiti JIT može se odrediti na temelju rezultata profila. U budućnosti se očekuje podrška za dinamičku JIT kompilaciju na temelju interne analize učestalosti poziva funkcije, ali s obzirom na specifičnosti procesa pokretanja na Instagramu, JIT kompilacija je također pogodna za Facebook u početnoj fazi.
    JIT prvo pretvara Python bajtkod u srednjorazredni prikaz na visokoj razini (HIR), koji je razumno blizak Python bajt kodu, ali je dizajniran da koristi virtualni stroj zasnovan na zapisima, a ne virtualni stroj zasnovan na zapisu. koristi informacije o tipu i dodatne detalje bitne za izvedbu. Zatim se HIR pretvara u oblik statičke pojedinačne dodjele (SSA) i prolazi kroz faze optimizacije na temelju broja referenci i podataka o korištenju memorije. Kao rezultat, generira se posredni prikaz na niskoj razini (LIR), koji je blizak asemblerskom jeziku.
  • Strogi način rada za module:Funkcionalnost ima tri komponente: tip StrictModule. Statički analizator sposoban utvrditi da izvršavanje modula ne utječe na kod izvan tog modula.
  • Statički Python: je eksperimentalni kompajler bajt koda koji koristi napomene o tipu za generiranje bajt koda koji je specifičan za svaku vrstu i brže se odvija kroz JIT kompilaciju. U nekim testovima kombinacija Static Pythona i JIT-a pokazuje do 7 puta poboljšanje performansi u odnosu na tipični CPython. U mnogim se situacijama rezultati ocjenjuju kao da su korišteni MyPyC i Cython kompajleri.

Konačno ako ste zainteresirani za mogućnost dobivanja Cinder koda ili da biste saznali više o tome, možete se obratiti pojedinosti na sljedećem linku.


Sadržaj članka pridržava se naših načela urednička etika. Da biste prijavili pogrešku, kliknite ovdje.

Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.