Facebook ṣii Cinder, orita ti CPython ti Instagram lo

Facebook ti ṣe atẹjade koodu orisun fun Project Cinder, orita ti CPython 3.8.5, imuse itọkasi akọkọ ti ede siseto Python. A lo Cinder ni awọn amayederun iṣelọpọ Facebook lati ṣe agbara Instagram ati pẹlu awọn iṣapeye lati mu iṣẹ dara si.

A ṣe atẹjade koodu naa lati jiroro lori iṣeeṣe ti gbigbe awọn iṣapeye ti a pese silẹ sinu ilana CPython akọkọ ati lati ṣe iranlọwọ fun awọn iṣẹ akanṣe miiran ti o ni ipa ninu ilọsiwaju iṣẹ ṣiṣe CPython. Facebook ko ni ipinnu lati ṣe atilẹyin Cinder gẹgẹbi iṣẹ akanṣe orisun ṣiṣi ọtọtọ ati pe koodu ti gbekalẹ ni fọọmu eyiti o ti lo ninu awọn amayederun ile-iṣẹ, laisi idapọ afikun ati iwe. Wọn tun ko gbiyanju lati ṣe igbelaruge Cinder bi yiyan si CPython - ibi-afẹde akọkọ ti idagbasoke ni ifẹ lati mu CPython funrararẹ.

A ṣe akiyesi koodu Cinder bi igbẹkẹle igbẹkẹle ati idanwo ni awọn agbegbe iṣelọpọ, ṣugbọn ti o ba jẹ idanimọ awọn iṣoro, iwọ yoo ni lati yanju wọn funrararẹ, nitori Facebook ko ṣe iṣeduro pe yoo dahun si awọn ifiranṣẹ aṣiṣe ita ati fa awọn ibeere. Ni akoko kanna, Facebook ko ṣe iyasọtọ ifowosowopo imudara pẹlu agbegbe ati pe o ti ṣetan lati jiroro lori awọn imọran lori bi o ṣe le ṣe Cinder paapaa yiyara tabi bi o ṣe le mu iyara gbigbe awọn ayipada ti a pese silẹ si apakan akọkọ ti CPython.

Awọn iṣapeye akọkọ ti ṣe imuse ni Cinder:

  • Iṣapamọ laini ti baiticode (“bytecode ojiji”). Koko-ọrọ ti ọna naa ni lati ṣe idanimọ awọn ipo nibiti o ti ṣiṣẹ opcode aṣoju kan ti o le jẹ iṣapeye, ati lati rọpo iru opcode kan ni agbara pẹlu awọn aṣayan amọja yiyara (fun apẹẹrẹ, rirọpo awọn iṣẹ ti a pe nigbagbogbo).
  • Iṣayẹwo coroutine ni itara. Fun awọn ipe iṣẹ async ti o ni ilọsiwaju lẹsẹkẹsẹ (duro ko ja si idaduro ati iṣẹ naa de alaye ipadabọ tẹlẹ), abajade ti iru awọn iṣẹ bẹẹ ni a rọpo taara laisi ṣiṣẹda coroutine kan tabi okiki iṣẹlẹ iṣẹlẹ kan. Ni koodu Facebook ti o lo async / duro de pupọ, awọn abajade iṣapeye ni iyara ti o to 5%.
  • Aṣayan JIT ti o yan ni ipele ti awọn ọna ati awọn iṣẹ kọọkan (ọna-ni-akoko). Mu ṣiṣẹ nipasẹ aṣayan “-X jit” tabi PYTHONJIT = 1 oniyipada ayika ati gba ọ laaye lati yara ipaniyan ti ọpọlọpọ awọn idanwo iṣẹ nipasẹ awọn akoko 1.5-4. Niwọn igba ti akopọ JIT jẹ pataki nikan fun awọn iṣẹ ṣiṣe nigbagbogbo, ko ni imọran lati lo fun awọn iṣẹ ti a ko lo, iṣakojọpọ ti eyiti o le fa fifalẹ ipaniyan eto nikan.

    Nipasẹ aṣayan "-X jit-list-file=/path/to/jitlist.txt" tabi iyipada ayika "PYTHONJITLISTFILE=/path/to/jitlist.txt" o le pato faili kan pẹlu akojọ awọn iṣẹ fun eyiti JIT le ṣee lo (ọna kika .to.module:funcname tabi path.to.module:ClassName.method_name). Atokọ awọn iṣẹ fun eyiti JIT yẹ ki o mu ṣiṣẹ ni a le pinnu da lori awọn abajade profaili. Ni ọjọ iwaju, atilẹyin fun akopọ JIT ti o ni agbara ni a nireti da lori itupalẹ inu ti igbohunsafẹfẹ ti awọn ipe iṣẹ, ṣugbọn ni akiyesi awọn pato ti awọn ilana ifilọlẹ lori Instagram, akopọ JIT tun dara fun Facebook ni ipele ibẹrẹ.

    JIT akọkọ ṣe iyipada Python bytecode sinu aṣoju agbedemeji agbedemeji ipele giga (HIR), eyiti o jẹ isunmọ si Python bytecode, ṣugbọn a ṣe apẹrẹ lati lo ẹrọ foju ti o da lori iforukọsilẹ dipo ọkan ti o da lori akopọ, ati pe o tun lo iru alaye ati afikun. awọn alaye ṣiṣe-pataki (gẹgẹbi kika itọkasi) . HIR ti wa ni iyipada si SSA (aimi nikan iṣẹ iyansilẹ) fọọmu ati ki o lọ nipasẹ iṣapeye awọn igbesẹ ti o ya sinu iroyin itọkasi kika esi ati iranti agbara data. Bi abajade, aṣoju agbedemeji ipele kekere (LIR) ti wa ni ipilẹṣẹ, ti o sunmọ ede apejọ. Lẹhin ipele miiran ti awọn iṣapeye-orisun LIR, awọn ilana apejọ jẹ ipilẹṣẹ nipa lilo ile-ikawe asmjit.

  • Ti o muna mode fun awọn module. Išẹ naa pẹlu awọn paati mẹta: Iru StrictModule. Oluyanju aimi ti o le pinnu pe ipaniyan ti module ko ni ipa lori koodu ni ita module yẹn. Agbeeru module ti o pinnu pe awọn modulu wa ni ipo ti o muna (koodu sọ “wọle __strict__”), ṣayẹwo fun isansa ti awọn ikorita pẹlu awọn modulu miiran, ati fifuye awọn modulu to muna sinu sys.modules bi ohun StrictModule.
  • Static Python jẹ alakojo bytecode esiperimenta ti o nlo iru awọn asọye lati ṣe ipilẹṣẹ iru-kan pato bytecode ti o ṣiṣẹ yiyara ọpẹ si akopọ JIT. Ni diẹ ninu awọn idanwo, apapọ Static Python ati JIT ṣe afihan awọn ilọsiwaju iṣẹ ti o to awọn akoko 7 ni akawe si CPython boṣewa. Ni ọpọlọpọ awọn ipo, awọn esi ti wa ni ifoju-lati wa nitosi lilo MyPyC ati Cython compilers.

orisun: opennet.ru

Fi ọrọìwòye kun