Facebook qhib qhov Cinder, rab rawg ntawm CPython siv los ntawm Instagram

Facebook tau tshaj tawm qhov chaws rau Project Cinder, ib rab diav rawg ntawm CPython 3.8.5, lub ntsiab lus siv ntawm Python programming lus. Cinder yog siv hauv Facebook cov txheej txheem tsim khoom los ua kom muaj zog Instagram thiab suav nrog kev txhim kho kom zoo dua qub.

Cov cai tau tshaj tawm los tham txog qhov muaj peev xwm ntawm kev xa cov kev npaj ua kom zoo rau lub ntsiab CPython lub hauv paus thiab pab lwm cov haujlwm koom nrog hauv kev txhim kho CPython kev ua tau zoo. Facebook tsis npaj siab txhawb Cinder nyob rau hauv daim ntawv ntawm ib qho kev qhib qhov project thiab cov cai tau nthuav tawm nyob rau hauv daim ntawv uas nws yog siv nyob rau hauv lub tuam txhab infrastructure, tsis muaj ntxiv combing thiab cov ntaub ntawv. Lawv kuj tsis sim txhawb Cinder ua lwm txoj hauv kev rau CPython - lub hom phiaj tseem ceeb ntawm kev txhim kho yog lub siab xav txhim kho CPython nws tus kheej.

Cinder code tau sau tseg tias muaj kev ntseeg tau zoo thiab raug sim hauv qhov chaw tsim khoom, tab sis yog tias muaj teeb meem raug txheeb xyuas, koj yuav tsum daws lawv tus kheej, vim Facebook tsis tau lees tias nws yuav teb rau cov lus yuam kev sab nraud thiab rub cov lus thov. Nyob rau tib lub sijhawm, Facebook tsis suav nrog kev koom tes nrog cov zej zog thiab npaj siab los tham txog cov tswv yim yuav ua li cas thiaj li ua rau Cinder sai dua lossis yuav ua li cas txhawm rau txhawm rau txhawm rau hloov pauv cov kev hloov pauv mus rau qhov tseem ceeb ntawm CPython.

Lub ntsiab optimizations siv nyob rau hauv Cinder:

  • Inline caching ntawm bytecode ("shadow bytecode"). Lub ntsiab lus ntawm txoj kev yog txhawm rau txheeb xyuas cov xwm txheej uas ib txwm ua opcode raug tua uas tuaj yeem ua kom zoo, thiab hloov pauv hloov pauv xws li opcode nrog cov kev xaiv tshwj xeeb sai dua (piv txwv li, hloov nquag hu ua haujlwm).
  • Eager coroutine ntsuam xyuas. Rau async muaj nuj nqi hu uas tau ua tiav tam sim ntawd (tos tsis ua rau tos thiab qhov ua haujlwm ncav cuag cov lus xa rov qab ua ntej), qhov tshwm sim ntawm cov haujlwm no tau hloov pauv ncaj qha yam tsis tau tsim coroutine lossis cuam tshuam nrog kev tshwm sim voj. Hauv Facebook code uas siv ntau async / tos, qhov kev ua kom zoo ua rau muaj qhov nrawm ntawm li 5%.
  • Xaiv JIT muab tso ua ke ntawm qib ntawm tus kheej txoj hauv kev thiab kev ua haujlwm (txoj kev-ntawm-ib-lub sijhawm). Enabled los ntawm "-X jit" kev xaiv los yog PYTHONJIT = 1 ib puag ncig hloov pauv thiab tso cai rau koj kom ua tiav ntau qhov kev sim ua haujlwm los ntawm 1.5-4 zaug. Txij li thaum JIT muab tso ua ke tsuas yog cuam tshuam rau kev ua haujlwm nquag, nws tsis pom zoo kom siv nws rau kev siv tsis tshua muaj zog, kev sib sau ua ke ntawm cov nyiaj siv ua haujlwm uas tuaj yeem ua rau kev ua haujlwm qeeb.

    Ntawm qhov kev xaiv "-X jit-list-file =/path/to/jitlist.txt" lossis ib puag ncig hloov pauv "PYTHONJITLISTFILE=/path/to/jitlist.txt" koj tuaj yeem teev cov ntaub ntawv nrog cov npe ntawm cov haujlwm uas JIT tuaj yeem siv tau (path format .to.module:funcname lossis path.to.module:ClassName.method_name). Cov npe ntawm cov haujlwm uas JIT yuav tsum tau qhib tuaj yeem txiav txim siab raws li cov txiaj ntsig profile. Nyob rau hauv lub neej yav tom ntej, kev txhawb nqa rau dynamic JIT muab tso ua ke yog xav tau raws li kev soj ntsuam sab hauv ntawm qhov zaus ntawm kev hu xov tooj, tab sis coj mus rau hauv tus account qhov tshwj xeeb ntawm kev tshaj tawm cov txheej txheem ntawm Instagram, JIT muab tso ua ke kuj tsim nyog rau Facebook thaum pib theem.

    JIT thawj zaug hloov Python bytecode mus rau theem siab nruab nrab sawv cev (HIR), uas yog nyob ze rau Python bytecode, tab sis yog tsim los siv lub tshuab sau npe-raws li lub tshuab virtual es tsis txhob siv ib pawg, thiab tseem siv hom ntaub ntawv thiab ntxiv. kev ua haujlwm-cov ntsiab lus tseem ceeb (xws li kev suav suav). HIR yog tom qab ntawd hloov mus rau SSA (kev ua haujlwm zoo ib yam) daim ntawv thiab mus los ntawm kev txhim kho cov kauj ruam uas coj mus rau hauv tus account siv suav cov txiaj ntsig thiab nco cov ntaub ntawv noj. Yog li ntawd, ib qho kev sawv cev qis nruab nrab (LIR) raug tsim, ze rau cov lus sib dhos. Tom qab lwm theem ntawm LIR-raws li optimizations, cov lus qhia sib dhos yog tsim siv lub tsev qiv ntawv asmjit.

  • Hom nruj rau modules. Lub functionality suav nrog peb yam: Hom StrictModule. Ib qho kev ntsuas zoo li qub uas tuaj yeem txiav txim siab tias qhov kev ua tiav ntawm lub module tsis muaj kev cuam tshuam rau cov lej sab nraud ntawm qhov module. Lub module loader uas txiav txim siab tias cov modules nyob rau hauv nruj hom (cov cai qhia "ntshuam __strict__"), xyuas qhov tsis muaj kev sib tshuam nrog lwm cov modules, thiab thauj cov modules nruj rau hauv sys.modules raws li cov khoom StrictModule.
  • Static Python yog ib qho kev sim bytecode compiler uas siv hom annotations los tsim cov hom tshwj xeeb bytecode uas khiav nrawm dua ua tsaug rau JIT muab tso ua ke. Hauv qee qhov kev sim, kev sib xyaw ua ke ntawm Static Python thiab JIT qhia kev txhim kho kev ua tau zoo txog li 7 zaug piv rau tus qauv CPython. Hauv ntau qhov xwm txheej, cov txiaj ntsig tau kwv yees ze rau kev siv MyPyC thiab Cython compilers.

Tau qhov twg los: opennet.ru

Ntxiv ib saib