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.


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.