Inilabas ng Facebook ang source code ng Cinder na ginagamit ng Instagram

Inilantad ang Facebook kamakailan lamang sa pamamagitan ng isang post, naglalabas ng source code ng proyekto ng Cinder, na isang tinidor ng sangay ng CPython at ang pangunahing pagpapatupad ng sanggunian ng wika ng programa ng Python.

Sinderela ginamit sa imprastraktura ng produksyon ng Facebook upang mapagana ang Instagram at may kasamang mga pag-optimize upang mapabuti ang pagganap. Ang code ay nai-publish upang talakayin ang posibilidad ng paglipat ng mga handa nang pag-optimize sa mainstream ng CPython at upang matulungan ang iba pang mga proyekto sa pagpapabuti ng pagganap ng CPython.

Nabanggit ng Facebook na hindi nito susuportahan ang Cinder bilang isang hiwalay na proyekto ng open source at ang code ay ipinakita sa form na kung saan ito ginagamit sa imprastraktura ng kumpanya, nang walang karagdagang dokumentasyon.

Ang Cinder ay hindi nagtataguyod ng sarili bilang isang kahalili sa CPython alinman - ang pangunahing layunin sa pag-unlad ay upang mapabuti ang CPython mismo.

Ang code ng Cinder ay itinuturing na maaasahan na maaasahan at nasubok sa mga kapaligiran sa produksyon, ngunit kung makilala ang mga problema, kakailanganin nilang malutas sa kanilang sarili, dahil hindi ginagarantiyahan ng Facebook na tutugon ito sa mga panlabas na mensahe ng error at hilahin ang mga kahilingan.

Sa parehong oras, hindi ibinubukod ng Facebook ang nakabubuo na kooperasyon sa pamayanan at handa na talakayin ang mga ideya kung paano gawing mas mabilis ang Cinder o kung paano mapabilis ang paglipat ng mga nakahandang pagbabago sa pangunahing balangkas ng CPython.

Ang pangunahing pag-optimize na ipinatupad sa Cinder ay:

  • Bytecode online caching: Ang kakanyahan ng pamamaraan ay upang makilala ang mga tipikal na sitwasyon ng pagpapatupad ng opcode na maaaring ma-optimize nang dinami at palitan ang opcode na iyon ng mas mabilis na dalubhasang mga pagpipilian.
  • Pagsusuri sa regular na gawain: Para sa mga asynchronous na tawag na pag-andar na naproseso kaagad, ang resulta ng mga pagpapaandar na iyon ay direktang na-override nang hindi lumilikha ng isang coroutine at nang walang pag-uusap ng isang loop ng kaganapan. Sa code na ginamit ng Facebook, kung saan gumagamit ito ng mabigat, ang pag-optimize ay humahantong sa isang pagbilis ng halos 5%.
  • Selective na pagtitipon ng JIT sa antas ng mga indibidwal na pamamaraan at pag-andar: pinagana ito ng pagpipiliang "-X jit" o ang variable ng kapaligiran PYTHONJIT = 1 at pinapayagan kang mapabilis ang maraming mga pagsubok sa pagganap ng 1,5 hanggang 4 na beses.
    Ang listahan ng mga pagpapaandar kung saan dapat paganahin ang JIT ay maaaring matukoy batay sa mga resulta ng profile. Sa hinaharap, ang suporta para sa pabagu-bago ng JIT compilation batay sa panloob na pagtatasa ng dalas ng tawag sa pag-andar ay inaasahan, ngunit isinasaalang-alang ang mga detalye ng mga proseso ng paglulunsad sa Instagram, ang pag-ipon ng JIT ay angkop din para sa Facebook sa paunang yugto.
    Ang JIT ay unang nag-convert ng bytecode ng Python sa isang mataas na antas na intermediate na representasyon (HIR), na makatuwirang malapit sa bytecode ng Python, ngunit idinisenyo upang magamit ang isang record-based na virtual machine sa halip na isang record-based virtual machine. Sa stack, at din gumagamit ng impormasyon ng uri at mga karagdagang detalye na nauugnay sa pagganap. Pagkatapos ang HIR ay nai-convert sa isang form na Static Single Allocation (SSA) at sumasailalim sa mga yugto ng pag-optimize batay sa bilang ng sanggunian at data ng paggamit ng memorya. Bilang isang resulta, nabuo ang isang mababang antas ng intermediate na representasyon (LIR), na malapit sa wika ng pagpupulong.
  • Mahigpit na mode para sa mga module:Ang pagpapaandar ay may tatlong mga bahagi: Ang uri ng StrictModule. Ang isang static analyzer na may kakayahang matukoy na ang pagpapatupad ng isang module ay hindi nakakaapekto sa code sa labas ng modyul na iyon.
  • Static Python: ay isang pang-eksperimentong bytecode compiler na gumagamit ng mga uri ng anotasyon upang makabuo ng bytecode na tukoy sa bawat uri at mas mabilis na tumatakbo sa pamamagitan ng JIT compilation. Sa ilang mga pagsubok, ang kombinasyon ng Static Python at JIT ay nagpapakita ng hanggang sa 7x pagpapabuti ng pagganap kaysa sa karaniwang CPython. Sa maraming mga sitwasyon, ang mga resulta ay sinusuri na para bang ginamit ang mga compiler ng MyPyC at Cython.

Sa wakas kung interesado kang makakuha ng Cinder code o matuto nang higit pa tungkol dito, maaari kang kumunsulta sa mga detalye sa sumusunod na link.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.