Facebook opinn Cinder, gaffal af CPython notað af Instagram

Facebook hefur gefið út frumkóðann fyrir Project Cinder, gaffal af CPython 3.8.5, helstu viðmiðunarútfærslu Python forritunarmálsins. Cinder er notað í framleiðsluinnviðum Facebook til að knýja Instagram og inniheldur fínstillingar til að bæta árangur.

Kóðinn er gefinn út til að ræða möguleikann á að flytja undirbúnar hagræðingar yfir í aðal CPython rammann og til að hjálpa öðrum verkefnum sem taka þátt í að bæta CPython árangur. Facebook ætlar ekki að styðja Cinder í formi sérstaks opins uppspretta verkefnis og er kóðinn settur fram í því formi sem hann er notaður í innviðum fyrirtækisins, án viðbótarkambunar og skjala. Þeir reyna heldur ekki að kynna Cinder sem valkost við CPython - meginmarkmið þróunar er löngunin til að bæta CPython sjálft.

Cinder kóðinn er talinn nokkuð áreiðanlegur og prófaður í framleiðsluumhverfi, en ef vandamál koma í ljós verður þú að leysa þau sjálfur, þar sem Facebook ábyrgist ekki að það muni bregðast við ytri villuskilaboðum og pull-beiðnum. Á sama tíma útilokar Facebook ekki uppbyggilegt samstarf við samfélagið og er tilbúið til að ræða hugmyndir um hvernig hægt sé að gera Cinder enn hraðari eða hvernig megi flýta fyrir flutningi á tilbúnum breytingum á meginhluta CPython.

Helstu hagræðingar framkvæmdar í Cinder:

  • Innbyggð skyndiminni bækikóða („skuggabætikóði“). Kjarni aðferðarinnar er að bera kennsl á aðstæður þar sem dæmigerður opkóði er keyrður sem hægt er að fínstilla, og að skipta slíkum opkóða út fyrir hraðari sérhæfða valkosti (til dæmis að skipta út oft kölluðum aðgerðum).
  • Áhugasamur coroutine mat. Fyrir ósamstillt fallköll sem eru unnin strax (bíða leiðir ekki til bið og aðgerðin nær fyrr í skilasetningu), er niðurstaða slíkra falla beint í staðinn án þess að búa til coroutine eða fela í sér atburðarlykkju. Í Facebook kóða sem er mikið notaður ósamstilltur/bíður leiðir hagræðingin í um það bil 5% hraða.
  • Sértæk JIT samantekt á stigi einstakra aðferða og aðgerða (aðferð-í-á-tíma). Virkt með „-X jit“ valkostinum eða PYTHONJIT=1 umhverfisbreytunni og gerir þér kleift að flýta fyrir framkvæmd margra frammistöðuprófa um 1.5-4 sinnum. Þar sem JIT samantekt á aðeins við um aðgerðir sem oft eru keyrðar, er ekki ráðlegt að nota það fyrir aðgerðir sem sjaldan eru notaðar, samantektarkostnaður þeirra getur aðeins hægt á framkvæmd forrita.

    Með valmöguleikanum „-X jit-list-file=/path/to/jitlist.txt“ eða umhverfisbreytunni „PYTHONJITLISTFILE=/path/to/jitlist.txt“ er hægt að tilgreina skrá með lista yfir aðgerðir sem JIT fyrir. hægt að nota (slóðasnið .to.module:funcname eða path.to.module:ClassName.method_name). Hægt er að ákvarða lista yfir aðgerðir sem JIT ætti að vera virkt fyrir byggt á prófílniðurstöðum. Í framtíðinni er gert ráð fyrir stuðningi við kraftmikla JIT samantekt sem byggist á innri greiningu á tíðni aðgerðakalla, en að teknu tilliti til sérstakra ræsingarferla á Instagram hentar JIT samantekt einnig fyrir Facebook á upphafsstigi.

    JIT breytir fyrst Python bækakóða í háttsetta milliframsetningu (HIR), sem er nokkuð nálægt Python bækakóða, en er hannað til að nota sýndarvél sem byggir á skrá í stað stafla sem byggir á, og notar einnig tegundaupplýsingar og viðbótar upplýsingar sem eru mikilvægar fyrir frammistöðu (eins og viðmiðunartalning). HIR er síðan breytt í SSA (static single assignment) form og fer í gegnum hagræðingarskref sem taka mið af niðurstöðum viðmiðunartalningar og minnisnotkunargögnum. Fyrir vikið myndast lágstig milliframsetning (LIR) nálægt samsetningarmáli. Eftir annan áfanga hagræðingar sem byggir á LIR eru samsetningarleiðbeiningar búnar til með því að nota asmjit bókasafnið.

  • Strangur háttur fyrir einingar. Virknin inniheldur þrjá þætti: Type StrictModule. Stöðug greiningartæki sem getur ákvarðað að framkvæmd eininga hafi engin áhrif á kóða utan þeirrar einingar. Einingahleðslutæki sem ákvarðar að einingarnar séu í ströngum ham (kóðinn tilgreinir "import __strict__"), athugar hvort ekki séu gatnamót við aðrar einingar og hleður ströngum einingar inn í sys.modules sem StrictModule hlut.
  • Static Python er tilraunabætakóðaþýðandi sem notar tegundaskýringar til að búa til tegundarsértækan bækakóða sem keyrir hraðar þökk sé JIT samantekt. Í sumum prófunum sýnir samsetning Static Python og JIT frammistöðubætur sem eru allt að 7 sinnum samanborið við venjulegt CPython. Í mörgum tilvikum er áætlað að niðurstöðurnar séu nálægt því að nota MyPyC og Cython þýðendur.

Heimild: opennet.ru

Bæta við athugasemd