Cinder le stòr fosgailte Facebook, forc de CPython air a chleachdadh le Instagram

Tha Facebook air an còd tùsail fhoillseachadh airson Project Cinder, forc de CPython 3.8.5, prìomh bhuileachadh iomraidh cànan prògramadh Python. Tha Cinder air a chleachdadh ann am bun-structar riochdachaidh Facebook gus cumhachd a thoirt do Instagram agus a’ toirt a-steach optimizations gus coileanadh a leasachadh.

Tha an còd air fhoillseachadh gus beachdachadh air comasachd na optimizations ullaichte a ghluasad gu prìomh fhrèam CPython agus gus pròiseactan eile a chuideachadh a tha an sàs ann a bhith a’ leasachadh coileanadh CPython. Chan eil Facebook an dùil taic a thoirt dha Cinder ann an cruth pròiseact stòr fosgailte air leth agus tha an còd air a thaisbeanadh anns an fhoirm anns a bheil e air a chleachdadh ann am bun-structar na companaidh, gun chìreadh agus sgrìobhainnean a bharrachd. Chan eil iad cuideachd a 'feuchainn ri Cinder a bhrosnachadh mar roghainn eile an àite CPython - is e am prìomh amas leasachaidh am miann CPython fhèin a leasachadh.

Thathas a’ toirt fa-near gu bheil an còd Cinder gu ìre mhath earbsach agus air a dhearbhadh ann an àrainneachdan cinneasachaidh, ach ma thèid duilgheadasan a chomharrachadh, feumaidh tu am fuasgladh leat fhèin, leis nach eil Facebook a ’gealltainn gun freagair e teachdaireachdan mearachd bhon taobh a-muigh agus gun tarraing e iarrtasan. Aig an aon àm, chan eil Facebook a’ dùnadh a-mach co-obrachadh cuideachail leis a’ choimhearsnachd agus tha e deiseil airson beachdachadh air beachdan air mar a nì thu Cinder eadhon nas luaithe no mar as urrainn dhut gluasad atharrachaidhean ullaichte gu prìomh phàirt CPython a luathachadh.

PrĂŹomh optimizations air an cur an gnĂŹomh ann an Cinder:

  • Tasgadh in-loidhne de bytecode (“shadow bytecode”). Is e brĂŹgh an dòigh suidheachaidhean a chomharrachadh far a bheil còd op Ă bhaisteach air a chuir gu bĂ s a ghabhas Ăšrachadh, agus gus roghainnean sònraichte nas luaithe a chuir an Ă ite còd op mar sin (mar eisimpleir, cuir an Ă ite gnĂŹomhan ris an canar gu tric).
  • Measadh coroutine èasgaidh. Airson gairmean gnĂŹomh async a tha air an giullachd sa bhad (chan eil feitheamh a’ leantainn gu feitheamh agus bidh an gnĂŹomh a’ ruighinn an aithris tilleadh nas trĂ ithe), tha toradh nan gnĂŹomhan sin air a chuir na Ă ite gu dĂŹreach gun a bhith a’ cruthachadh coroutine no a’ toirt a-steach lĂšb tachartais. Ann an còd Facebook a bhios gu mòr a’ cleachdadh async / a’ feitheamh, tha an optimization a’ leantainn gu astar timcheall air 5%.
  • Cruinneachadh JIT roghnach aig ĂŹre dhòighean agus gnĂŹomhan fa leth (modh-aig-an-Ă m). Air a chomasachadh tron ​​​​roghainn “-X jit” no an caochladair Ă rainneachd PYTHONJIT = 1 agus leigidh e leat coileanadh mòran de dheuchainnean coileanaidh a luathachadh le 1.5-4 tursan. Leis nach eil co-chruinneachadh JIT buntainneach ach airson gnĂŹomhan a tha air an cur an gnĂŹomh gu tric, chan eilear a’ moladh a chleachdadh airson gnĂŹomhan nach eilear a’ cleachdadh ach ainneamh, agus chan urrainn don chruinneachadh os a chionn ach coileanadh a’ phrògraim a lughdachadh.

    Tron roghainn “-X jit-list-file=/path/to/jitlist.txt” no an caochladair àrainneachd “PYTHONJITLISTFILE=/path/to/jitlist.txt” faodaidh tu faidhle a shònrachadh le liosta de ghnìomhan airson a bheil JIT faodar a chleachdadh (cruth slighe .to.module:funcname or path.to.module:ClassName.method_name). Faodar an liosta de ghnìomhan airson am bu chòir JIT a bhith air a chomasachadh a dhearbhadh stèidhichte air toraidhean a’ phròifil. Anns an àm ri teachd, tha dùil ri taic airson cruinneachadh fiùghantach JIT stèidhichte air mion-sgrùdadh taobh a-staigh air tricead gairmean gnìomh, ach a ’toirt aire do mhion-fhiosrachadh pròiseasan cur air bhog air Instagram, tha cruinneachadh JIT cuideachd freagarrach airson Facebook aig a’ chiad ìre.

    Bidh JIT an-toiseach ag atharrachadh Python bytecode gu riochdachadh eadar-mheadhanach àrd-ìre (HIR), a tha gu math faisg air Python bytecode, ach air a dhealbhadh gus inneal brìgheil stèidhichte air clàr a chleachdadh an àite fear stèidhichte air stac, agus cuideachd a’ cleachdadh fiosrachadh seòrsa agus a bharrachd. mion-fhiosrachadh a tha deatamach airson coileanadh (leithid cunntadh iomraidh). Tha an HIR an uairsin air a thionndadh gu foirm SSA (sònrachadh singilte statach) agus a’ dol tro cheumannan optimization a bheir aire do thoraidhean cunntais iomraidh agus dàta caitheamh cuimhne. Mar thoradh air an sin, tha riochdachadh eadar-mheadhanach aig ìre ìosal (LIR) air a chruthachadh, faisg air cànan cruinneachaidh. Às deidh ìre eile de optimizations stèidhichte air LIR, thèid stiùireadh cruinneachaidh a chruthachadh a’ cleachdadh an leabharlann asmjit.

  • Modh teann airson modalan. Tha trĂŹ pĂ irtean anns an comas-gnĂŹomh: Type StrictModule. Mion-sgrĂšdaire statach as urrainn dearbhadh nach eil buaidh aig coileanadh modal air còd taobh a-muigh a’ mhodal sin. Bidh luchdan modal a cho-dhĂšineas gu bheil na modalan ann am modh teann (tha an còd a’ sònrachadh “in-mhalairt __strict__”), a’ sgrĂšdadh nach eil crois-rathaid ann le modalan eile, agus a’ luchdachadh mhodalan teann gu sys.modules mar nĂŹ StrictModule.
  • Tha Static Python na inneal-cruinneachaidh bytecode deuchainneach a bhios a’ cleachdadh notaichean seòrsa gus bytecode sònraichte a ghineadh a ruitheas nas luaithe le taing do chruinneachadh JIT. Ann an cuid de dheuchainnean, tha an cothlamadh de Static Python agus JIT a’ nochdadh leasachaidhean coileanaidh suas ri 7 tursan an coimeas ri CPython Ă bhaisteach. Ann an iomadh suidheachadh, thathas a’ meas gu bheil na toraidhean faisg air a bhith a’ cleachdadh an luchd-cruinneachaidh MyPyC agus Cython.

Source: fosgailtenet.ru

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster