Cinder foinse oscailte Facebook, forc CPython a úsáideann Instagram

D'fhoilsigh Facebook an cód foinse do Project Cinder, forc de CPython 3.8.5, príomh-chur i bhfeidhm tagartha na teanga cláir Python. Úsáidtear luaith i mbonneagar táirgeachta Facebook chun cumhacht a thabhairt do Instagram agus cuimsíonn sé leas iomlán a bhaint as chun feidhmíocht a fheabhsú.

Foilsítear an cód chun plé a dhéanamh ar an bhféidearthacht na huasmhéaduithe ullmhaithe a aistriú chuig an bpríomhchreat CPython agus chun cabhrú le tionscadail eile a bhfuil baint acu le feidhmíocht CPython a fheabhsú. Níl sé ar intinn ag Facebook tacú le Cinder i bhfoirm tionscadail foinse oscailte ar leith agus cuirtear an cód i láthair san fhoirm ina n-úsáidtear é i mbonneagar na cuideachta, gan cíor agus doiciméadú breise. Ní dhéanann siad iarracht freisin Cinder a chur chun cinn mar mhalairt ar CPython - is é príomhsprioc na forbartha an fonn chun CPython féin a fheabhsú.

Tugtar faoi deara go bhfuil an cód Cinder sách iontaofa agus déantar é a thástáil i dtimpeallachtaí táirgthe, ach má aithnítear fadhbanna, beidh ort iad a réiteach duit féin, ós rud é nach ráthaíonn Facebook go bhfreagróidh sé teachtaireachtaí earráide seachtracha agus iarratais a tharraingt. Ag an am céanna, ní dhéanann Facebook comhar cuiditheach leis an bpobal a eisiamh agus tá sé réidh chun smaointe a phlé maidir le conas Cinder a dhéanamh fiú níos tapúla nó conas aistriú athruithe ullmhaithe chuig an bpríomhchuid de CPython a bhrostú.

Príomhleasuithe curtha i bhfeidhm in Cinder:

  • Taisceadh inlíne an bhitechód (“scáthchód”). Is é bunbhrí an mhodha ná cásanna a shainaithint ina ndéantar gnáthchód codarsnachta ar féidir é a bharrfheabhsú, agus roghanna speisialaithe níos tapúla a chur in ionad opcode den sórt sin go dinimiciúil (mar shampla, feidhmeanna ar a dtugtar go minic a athsholáthar).
  • Meastóireacht coroutine fonn. I gcás glaonna feidhm asincréite a phróiseáiltear láithreach (ní bhíonn fanacht mar thoradh air agus go sroicheann an fheidhm an ráiteas tuairisceáin níos luaithe), cuirtear toradh feidhmeanna den sórt sin in ionad go díreach gan coroutine a chruthú nó lúb imeachtaí a bheith i gceist. I gcód Facebook a úsáideann go mór as sioncronú / fanacht, bíonn luas suas de thart ar 5% mar thoradh ar an bharrfheabhsú.
  • Tiomsú roghnach JIT ag leibhéal modhanna agus feidhmeanna aonair (modh-ag-am). Cumasaithe tríd an rogha “-X jit” nó an athróg timpeallachta PYTHONJIT=1 agus ligeann sé duit cur i gcrích go leor tástálacha feidhmíochta a bhrostú 1.5-4 huaire. Ós rud é nach mbaineann tiomsú JIT ach le feidhmeanna a dhéantar go minic, níl sé inmholta é a úsáid le haghaidh feidhmeanna nach mbaintear úsáid astu go hannamh, agus ní fhéadfaidh a bhforchostais tiomsaithe ach cur i gcrích na gclár a mhoilliú.

    Tríd an rogha “-X jit-list-file=/path/to/jitlist.txt” nó an athróg timpeallachta “PYTHONJITLISTFILE=/path/to/jitlist.txt” is féidir leat comhad a shonrú le liosta feidhmeanna a bhfuil JIT ann is féidir é a úsáid (formáid cosáin .to.module:funcname nó path.to.module: ClassName.method_name). Is féidir liosta na bhfeidhmeanna ar cheart JIT a chumasú dóibh a chinneadh bunaithe ar thorthaí na próifíle. Sa todhchaí, táthar ag súil le tacaíocht do thiomsú dinimiciúil JIT bunaithe ar anailís inmheánach ar mhinicíocht na nglaonna feidhme, ach ag cur san áireamh na saintréithe atá ag próisis seolta ar Instagram, tá tiomsú JIT oiriúnach freisin do Facebook ag an gcéad chéim.

    Tiontaíonn JIT bytecode Python ar dtús i léiriú idirmheánach ardleibhéil (HIR), atá sách gar do bytecode Python, ach tá sé deartha chun meaisín fíorúil clár-bhunaithe a úsáid in ionad ceann atá bunaithe ar chruach, agus úsáideann sé faisnéis chineál agus breise freisin. sonraí atá ríthábhachtach maidir le feidhmíocht (cosúil le comhaireamh tagartha). Tiontaítear an HIR ansin go foirm SSA (tasc aonair statach) agus téann sé trí chéimeanna optamaithe a chuireann torthaí comhairimh tagartha agus sonraí tomhaltais cuimhne san áireamh. Mar thoradh air sin, gintear léiriú meánleibhéal íseal (LIR), gar do theanga tionóil. Tar éis céim eile d'uasmhéadú LIR-bhunaithe, gintear treoracha cóimeála ag baint úsáide as an leabharlann asmjit.

  • Modh dian le haghaidh modúil. Cuimsíonn an fheidhmiúlacht trí chomhpháirt: Cineál StrictModule. Anailíseoir statach a fhéadfaidh a chinneadh nach bhfuil aon tionchar ag forghníomhú modúl ar chód lasmuigh den mhodúl sin. Déanann lódóir modúil a chinneann go bhfuil na modúil i mód dian (sonraíonn an cód “allmhairiú __strict__”), seiceálann sé nach bhfuil trasnaithe le modúil eile, agus lódálann sé modúil dhian isteach i sys.modules mar réad StrictModule.
  • Is tiomsaitheoir beartchód turgnamhach é Static Python a úsáideann nótaí cineáil chun seachchód cineál-shonrach a ghiniúint a ritheann níos tapúla a bhuíochas le tiomsú JIT. I roinnt tástálacha, léiríonn an meascán de Statach Python agus JIT feabhsuithe feidhmíochta suas le huaire 7 i gcomparáid le CPython caighdeánach. In go leor cásanna, meastar go mbeidh na torthaí gar do thiomsaitheoirí MyPyC agus Cython a úsáid.

Foinse: oscailtenet.ru

Add a comment