Facebook e bulehileng mohloli oa Cinder, fereko ea CPython e sebelisoang ke Instagram

Facebook e phatlalalitse khoutu ea mohloli bakeng sa Project Cinder, fereko ea CPython 3.8.5, ts'ebetsong e ka sehloohong ea ts'ebetsong ea puo ea lenaneo la Python. Cinder e sebelisoa metheong ea tlhahiso ea Facebook ho matlafatsa Instagram mme e kenyelletsa optimizations ho ntlafatsa ts'ebetso.

Khoutu e hatisoa ho buisana ka monyetla oa ho tsamaisa lintlafatso tse lokiselitsoeng ho moralo oa mantlha oa CPython le ho thusa merero e meng e amehang ho ntlafatseng ts'ebetso ea CPython. Facebook ha e ikemisetse ho tšehetsa Cinder ka mokhoa oa morero o arohaneng oa mohloli o bulehileng 'me khoutu e hlahisoa ka mokhoa oo e sebelisoang ka eona litsing tsa motheo tsa k'hamphani, ntle le ho kopanya ho eketsehileng le litokomane. Hape ha ba leke ho khothaletsa Cinder e le mokhoa o mong oa CPython - sepheo se seholo sa nts'etsopele ke takatso ea ho ntlafatsa CPython ka boeona.

Khoutu ea Cinder e tsejoa e le e tšepahalang ebile e lekoa libakeng tsa tlhahiso, empa haeba mathata a tsejoa, o tla tlameha ho a rarolla ka bouena, kaha Facebook ha e tiise hore e tla arabela melaetsa ea liphoso tsa kantle le likopo tsa ho hula. Ka nako e ts'oanang, Facebook ha e kenye tšebelisano e hahang le sechaba 'me e itokiselitse ho buisana ka maikutlo a ho etsa Cinder le ho potlakisa kapa ho potlakisa ho fetisoa ha liphetoho tse lokiselitsoeng karolong e kholo ea CPython.

Lintlafatso tsa mantlha tse kentsoeng Cinder:

  • Inline caching ea bytecode ("shadow bytecode"). Ntho ea bohlokoa ea mokhoa ona ke ho tseba maemo ao ho 'ona ho etsoang opcode e tloaelehileng e ka ntlafatsoang, le ho fetola opcode e joalo ka likhetho tse khethehileng tse potlakileng (mohlala, ho nkela mesebetsi e atisang ho bitsoa).
  • Tlhahlobo e chesehang ea coroutine. Bakeng sa mehala ea ts'ebetso ea async e sebetsoang hang-hang (ho leta ha ho felle ka ho ema 'me mosebetsi o fihla polelong ea ho khutla pejana), sephetho sa mesebetsi e joalo e nkeloa sebaka ka kotloloho ntle le ho theha coroutine kapa ho kenyelletsa loop ea ketsahalo. Khoutu ea Facebook e sebelisang haholo async/ait, optimization e fella ka lebelo la hoo e ka bang 5%.
  • Khetho ea JIT e khethiloeng maemong a mekhoa le mesebetsi ea motho ka mong (mokhoa-ka-nako). E nolofalitsoe ka khetho ea "-X jit" kapa PYTHONJIT = 1 tikoloho e fapaneng 'me e u lumella ho potlakisa ho etsoa ha liteko tse ngata tsa ts'ebetso ka makhetlo a 1.5-4. Kaha pokello ea JIT e sebetsa feela bakeng sa mesebetsi e etsoang khafetsa, ha ho bohlale ho e sebelisa bakeng sa mesebetsi e sa sebelisoeng seoelo, e kaholimo ho eona e ka liehisang ts'ebetso ea lenaneo.

    Ka khetho ea "-X jit-list-file=/path/to/jitlist.txt" kapa mofuta oa tikoloho "PYTHONJITLISTFILE=/path/to/jitlist.txt" o ka hlakisa faele e nang le lethathamo la mesebetsi eo JIT e e etsang. e ka sebelisoa (sebopeho sa tsela .to.module:funcname kapa path.to.module:ClassName.method_name). Lenane la mesebetsi eo JIT e lokelang ho lumelloa ho e etsa le ka khethoa ho latela liphetho tsa profil. Nakong e tlang, ho lebeletsoe hore ts'ehetso ea ho kopanya JIT e matla e ipapisitse le tlhahlobo ea ka hare ea makhetlo a mangata a mehala ea ts'ebetso, empa ho nahanoa ka lintlha tse tobileng tsa ts'ebetso ea ho qala ho Instagram, ho kopanya JIT ho boetse ho loketse Facebook qalong.

    JIT e qala ho fetola Python bytecode hore e be boemeli ba boemo bo holimo ba mahareng (HIR), e haufi le Python bytecode, empa e etselitsoe ho sebelisa mochini o hlophisitsoeng o thehiloeng ho ngoliso ho fapana le o thehiloeng ho stack, hape o sebelisa tlhaiso-leseling ea mofuta le tse ling. lintlha tsa bohlokoa tsa ts'ebetso (joalo ka ho bala litšupiso) . HIR e fetoleloa ho SSA (static single assignment) foromo mme e feta mehatong ea ho ntlafatsa e nkang liphetho tsa ho bala litšupiso le data ea tšebeliso ea memori. Ka lebaka leo, boemeli ba boemo bo tlaase ba bohareng (LIR) bo hlahisoa, haufi le puo ea kopano. Kamora karolo e 'ngoe ea lintlafatso tse thehiloeng ho LIR, litaelo tsa kopano li hlahisoa ho sebelisoa laeborari ea asmjit.

  • Mokhoa o thata oa li-module. Ts'ebetso e kenyelletsa likarolo tse tharo: Type StrictModule. Mohlahlobi o tsitsitseng o ka bonang hore ts'ebetso ea module ha e na tšusumetso ho khoutu ka ntle ho module eo. Sesebelisoa sa module se etsang qeto ea hore li-module li maemong a thata (khoutu e bolela "import __strict__"), e hlahloba ho ba sieo ha li-intersections le li-module tse ling, le ho kenya li-module tse thata ho sys.modules e le ntho e StrictModule.
  • Static Python ke moqapi oa bytecode oa liteko o sebelisang litlhaloso tsa mofuta ho hlahisa mofuta o itseng oa bytecode o mathang ka potlako ka lebaka la ho bokella JIT. Litekong tse ling, ho kopana ha Static Python le JIT ho bonts'a ntlafatso ea ts'ebetso ho fihlela makhetlo a 7 ha e bapisoa le CPython e tloaelehileng. Maemong a mangata, ho hakanngoa hore liphetho li haufi le ho sebelisa li-compilers tsa MyPyC le Cython.

Source: opennet.ru

Eketsa ka tlhaloso