Ua wehe ʻia ʻo Facebook ma Cinder, kahi lāʻau o CPython i hoʻohana ʻia e Instagram

Ua hoʻopuka ʻo Facebook i ke kumu kumu no Project Cinder, kahi ʻāpana o CPython 3.8.5, ka hoʻokō kuhikuhi nui o ka ʻōlelo papahana Python. Hoʻohana ʻia ʻo Cinder i ka ʻenehana hana hana a Facebook e hoʻoikaika ai i ka Instagram a loaʻa i nā optimizations e hoʻomaikaʻi i ka hana.

Ua paʻi ʻia ke code e kūkākūkā i ka hiki ke hoʻokomo i nā optimizations i hoʻomākaukau ʻia i ka framework CPython nui a kōkua i nā papahana ʻē aʻe e pili ana i ka hoʻomaikaʻi ʻana i ka hana CPython. ʻAʻole manaʻo ʻo Facebook e kākoʻo iā Cinder ma ke ʻano o kahi papahana wehe ʻokoʻa a hōʻike ʻia ke code ma ke ʻano i hoʻohana ʻia ai i ka ʻoihana ʻoihana, me ka ʻole o ka hui ʻana a me nā palapala. ʻAʻole lākou e hoʻāʻo e hoʻolaha iā Cinder ma ke ʻano he ʻokoʻa i ka CPython - ʻo ka pahuhopu nui o ka hoʻomohala ʻana ʻo ka makemake e hoʻomaikaʻi iā CPython ponoʻī.

Hoʻomaopopo ʻia ka code Cinder e like me ka hilinaʻi a hoʻāʻo ʻia i nā wahi hana, akā inā ʻike ʻia nā pilikia, pono ʻoe e hoʻoponopono iā ʻoe iho, no ka mea, ʻaʻole ʻo Facebook e hōʻoiaʻiʻo e pane i nā memo hewa o waho a me nā noi huki. Ma ka manawa like, ʻaʻole hoʻokaʻawale ʻo Facebook i ka launa pū ʻana me ke kaiāulu a ua mākaukau e kūkākūkā i nā manaʻo e pili ana i ka wikiwiki o Cinder a i ʻole pehea e wikiwiki ai i ka hoʻololi ʻana i nā hoʻololi i hoʻomākaukau ʻia i ka ʻāpana nui o CPython.

Hoʻokomo ʻia nā manaʻo nui ma Cinder:

  • Ka hoʻopaʻa inoa ʻana o ka bytecode ("shadow bytecode"). ʻO ke kumu o ke ʻano, ʻo ia ka ʻike ʻana i nā kūlana kahi i hoʻokō ʻia ai kahi opcode maʻamau i hiki ke hoʻonui ʻia, a e hoʻololi i kēlā ʻano opcode me nā koho kūikawā wikiwiki (e like me ka hoʻololi ʻana i nā hana i kapa pinepine ʻia).
  • Ka loiloi coroutine makemake nui. No nā kelepona hana async i hana koke ʻia (ʻaʻole i kakali ʻia ka hana a hiki i ka ʻōlelo hoʻihoʻi ma mua), ua hoʻololi pololei ʻia ka hopena o ia mau hana me ka ʻole o ka hoʻokumu ʻana i kahi coroutine a i ʻole ke komo ʻana i kahi loop hanana. Ma ka helu Facebook e hoʻohana nui ana i ka async / kali, ʻo ka hopena o ka optimization i ka wikiwiki o 5%.
  • ʻO ka hōʻuluʻulu JIT koho ma ke kiʻekiʻe o nā ʻano hana a me nā hana (method-at-a-time). Hoʻohana ʻia ma o ke koho "-X jit" a i ʻole ka PYTHONJIT=1 ʻano hoʻololi kaiapuni a hiki iā ʻoe ke wikiwiki i ka hoʻokō ʻana i nā hoʻokolohua hana he 1.5-4 mau manawa. No ka mea pili wale ka hui ʻana o JIT no nā hana i hoʻokō pinepine ʻia, ʻaʻole pono e hoʻohana ia no nā hana i hoʻohana ʻole ʻia, ʻo ka hui ʻana ma luna o ka mea hiki ke hoʻolōʻihi i ka hoʻokō ʻana o ka papahana.

    Ma o ke koho "-X jit-list-file=/path/to/jitlist.txt" a i ʻole ka mea hoʻololi kaiapuni "PYTHONJITLISTFILE=/path/to/jitlist.txt" hiki iā ʻoe ke kuhikuhi i kahi faila me kahi papa inoa o nā hana no JIT hiki ke hoʻohana (path format .to.module:funcname or path.to.module:ClassName.method_name). Hiki ke hoʻoholo ʻia ka papa inoa o nā hana e hiki ai iā JIT ma muli o nā hopena profiling. I ka wā e hiki mai ana, manaʻo ʻia ke kākoʻo no ka hōʻuluʻulu ʻana o JIT ma muli o ka nānā ʻana i loko o ka pinepine o nā kelepona hana, akā e noʻonoʻo ana i nā kikoʻī o ka hoʻomaka ʻana i nā kaʻina hana ma Instagram, kūpono hoʻi ʻo JIT compilation no Facebook i ka pae mua.

    Hoʻololi mua ʻo JIT i ka Python bytecode i kahi hōʻike waena kiʻekiʻe (HIR), kahi kokoke loa i ka Python bytecode, akā ua hoʻolālā ʻia e hoʻohana i kahi mīkini virtual i hoʻopaʻa inoa ʻia ma kahi o kahi hoʻonohonoho, a hoʻohana pū i ka ʻike ʻano a me nā mea hou aʻe. nā kikoʻī koʻikoʻi hana (e like me ka helu kuhikuhi) . A laila hoʻololi ʻia ka HIR i ka palapala SSA (static single assignment) a hele i nā ʻanuʻu optimization e noʻonoʻo ana i nā hopena helu helu a me ka ʻikepili hoʻomanaʻo. ʻO ka hopena, ua hana ʻia kahi hōʻike haʻahaʻa haʻahaʻa waena (LIR), kokoke i ka ʻōlelo hui. Ma hope o kekahi māhele o ka LIR-based optimizations, hana ʻia nā ʻōlelo aʻoaʻo me ka hoʻohana ʻana i ka waihona asmjit.

  • ʻO ke ʻano koʻikoʻi no nā modules. Loaʻa i ka hana ʻekolu mau ʻāpana: Type StrictModule. ʻO kahi mea hoʻoponopono static e hiki ke hoʻoholo i ka hoʻokō ʻana o kahi module ʻaʻohe hopena i ke code ma waho o kēlā module. ʻO kahi mea hoʻoili module e hoʻoholo ana aia nā modules i ke ʻano koʻikoʻi (ʻo ke code ka "import __strict__"), nānā no ka nele o nā hui me nā modula ʻē aʻe, a hoʻouka i nā modules koʻikoʻi i loko o sys.modules ma ke ʻano he StrictModule.
  • ʻO Static Python kahi hoʻokolohua bytecode compiler e hoʻohana ana i nā annotation type e hana i ka bytecode kikoʻī kikoʻī e holo wikiwiki ana i ka hui ʻana o JIT. I kekahi mau ho'āʻo, ʻo ka hui pū ʻana o Static Python a me JIT e hōʻike ana i ka hoʻomaikaʻi ʻana i ka hana a hiki i 7 mau manawa i hoʻohālikelike ʻia me CPython maʻamau. Ma nā kūlana he nui, ua manaʻo ʻia nā hopena e kokoke ana i ka hoʻohana ʻana i nā mea hoʻopili MyPyC a me Cython.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka