Facebook lëshoi ​​kodin burim Cinder i cili përdoret nga Instagram

Facebook zbuloi së fundmi përmes një postimi, lëshimi i kodit burimor të projektit Cinder, e cila është një pirun i degës CPython dhe zbatimi kryesor i referencës së gjuhës programuese Python.

zhir përdoret në infrastrukturën e prodhimit të Facebook për të furnizuar me energji Instagramin dhe përfshin optimizime për të përmirësuar performancën. Kodi është publikuar për të diskutuar mundësinë e migrimit të optimizimeve të gatshme në rrjedhën kryesore të CPython dhe për të ndihmuar projektet e tjera të përmirësimit të performancës së CPython.

Facebook përmend se nuk do të mbështesë Cinder si një projekt i veçantë me burim të hapur dhe kodi paraqitet në formën në të cilën përdoret në infrastrukturën e ndërmarrjes, pa dokumentacion shtesë.

Cinder nuk po promovon as veten si një alternativë ndaj CPython - qëllimi kryesor i zhvillimit është të përmirësojë vetë CPython.

Kodi i Cinder konsiderohet mjaft i besueshëm dhe testuar në mjediset e prodhimit, por nëse identifikohen problemet, ato do të duhet të zgjidhen vetë, pasi Facebook nuk garanton se do t'i përgjigjet mesazheve të gabimit të jashtëm dhe tërheq kërkesat.

Në të njëjtën kohë, Facebook nuk përjashton bashkëpunimin konstruktiv me komunitetin dhe është i gatshëm të diskutojë ide se si ta bëjmë Cinder edhe më shpejt ose si të shpejtojmë transferimin e ndryshimeve të përgatitura në kornizën kryesore të CPython.

Optimizimet kryesore të implementuara në Cinder janë:

  • Mbrojtja në internet e Bytecode: Thelbi i metodës është të identifikojë situata tipike të ekzekutimit të kodeve që mund të optimizohen në mënyrë dinamike dhe të zëvendësojë atë kod me opsione më të shpejta të specializuara.
  • Vlerësimi rutinor: Për thirrjet e funksionit asinkron që përpunohen menjëherë, rezultati i atyre funksioneve anashkalohet drejtpërdrejt pa krijuar një korutinë dhe pa thirrur një lak ngjarjeje. Në kodin e përdorur nga Facebook, të cilin e përdor shumë, optimizimi çon në një përshpejtim prej rreth 5%.
  • Përpilimi selektiv i EPH në nivelin e metodave dhe funksioneve individuale: mundësohet nga opsioni "-X jit" ose ndryshorja e mjedisit PYTHONJIT = 1 dhe ju lejon të shpejtoni shumë teste të performancës me 1,5 deri në 4 herë.
    Lista e funksioneve për të cilat JIT duhet të mundësohet mund të përcaktohet bazuar në rezultatet e profilit. Në të ardhmen, pritet mbështetja për përpilimin dinamik të JIT bazuar në analizën e brendshme të frekuencës së thirrjes së funksionit, por duke marrë parasysh specifikat e proceseve të nisjes në Instagram, përpilimi i JIT është gjithashtu i përshtatshëm për Facebook në fazën fillestare.
    JIT së pari shndërron bytekodin e Python në një përfaqësim të nivelit të lartë të ndërmjetëm (HIR), i cili është mjaft i afërt me bytecode të Python, por është krijuar për të përdorur një makinë virtuale të bazuar në rekord sesa një makinë virtuale të bazuar në rekord. Në pirg, dhe gjithashtu përdor informacionin e tipit dhe detajet shtesë në lidhje me performancën. Më pas HIR shndërrohet në një formë Static Single Alocation (SSA) dhe i nënshtrohet fazave të optimizimit bazuar në numrin e referencës dhe të dhënat e përdorimit të kujtesës. Si rezultat, gjenerohet një përfaqësim i nivelit të ulët të ndërmjetëm (LIR), i cili është afër gjuhës së montimit.
  • Modaliteti i rreptë për modulet:Funksionaliteti ka tre përbërës: Llojin StrictModule. Një analizues statik i aftë të përcaktojë që ekzekutimi i një moduli nuk ndikon në kodin jashtë atij moduli.
  • Python Statik: është një përpilues eksperimental bytecode që përdor shënimet e tipit për të gjeneruar bytecode që është specifik për secilin lloj dhe funksionon më shpejt përmes përpilimit JIT. Në disa teste, kombinimi i Static Python dhe JIT demonstron deri në 7 herë përmirësim të performancës krahasuar me CPython tipik. Në shumë situata, rezultatet vlerësohen sikur të ishin përdorur përpiluesit MyPyC dhe Cython.

Më në fund nëse jeni të interesuar të jeni në gjendje të merrni kodin Cinder ose mësoni më shumë rreth kësaj, ju mund të konsultoheni me detajet në lidhjen vijuese.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.