Facebook ఓపెన్ సోర్స్డ్ Cinder, Instagram ఉపయోగించే CPython యొక్క ఫోర్క్

Facebook ప్రాజెక్ట్ Cinder కోసం సోర్స్ కోడ్‌ను ప్రచురించింది, ఇది CPython 3.8.5 యొక్క ఫోర్క్, పైథాన్ ప్రోగ్రామింగ్ భాష యొక్క ప్రధాన సూచన అమలు. Facebook యొక్క ప్రొడక్షన్ ఇన్‌ఫ్రాస్ట్రక్చర్‌లో Cinder అనేది Instagramను శక్తివంతం చేయడానికి ఉపయోగించబడుతుంది మరియు పనితీరును మెరుగుపరచడానికి ఆప్టిమైజేషన్‌లను కలిగి ఉంటుంది.

సిద్ధం చేయబడిన ఆప్టిమైజేషన్‌లను ప్రధాన CPython ఫ్రేమ్‌వర్క్‌కు పోర్ట్ చేసే అవకాశాన్ని చర్చించడానికి మరియు CPython పనితీరును మెరుగుపరచడంలో పాల్గొన్న ఇతర ప్రాజెక్ట్‌లకు సహాయం చేయడానికి కోడ్ ప్రచురించబడింది. Facebook ఒక ప్రత్యేక ఓపెన్ సోర్స్ ప్రాజెక్ట్ రూపంలో Cinderకి మద్దతు ఇవ్వడానికి ఉద్దేశించదు మరియు అదనపు కలపడం మరియు డాక్యుమెంటేషన్ లేకుండా కంపెనీ యొక్క అవస్థాపనలో ఉపయోగించబడే రూపంలో కోడ్ ప్రదర్శించబడుతుంది. CPythonకి ప్రత్యామ్నాయంగా Cinderని ప్రోత్సహించడానికి కూడా వారు ప్రయత్నించరు - అభివృద్ధి యొక్క ప్రధాన లక్ష్యం CPython ను మెరుగుపరచాలనే కోరిక.

Cinder కోడ్ చాలా నమ్మదగినదిగా గుర్తించబడింది మరియు ఉత్పత్తి పరిసరాలలో పరీక్షించబడింది, అయితే సమస్యలు గుర్తించబడితే, మీరు వాటిని మీరే పరిష్కరించుకోవాలి, ఎందుకంటే Facebook బాహ్య దోష సందేశాలకు ప్రతిస్పందించి అభ్యర్థనలను లాగుతుందని హామీ ఇవ్వదు. అదే సమయంలో, Facebook కమ్యూనిటీతో నిర్మాణాత్మక సహకారాన్ని మినహాయించలేదు మరియు Cinderని మరింత వేగవంతం చేయడం లేదా CPython యొక్క ప్రధాన భాగానికి సిద్ధం చేసిన మార్పుల బదిలీని ఎలా వేగవంతం చేయాలనే దానిపై ఆలోచనలను చర్చించడానికి సిద్ధంగా ఉంది.

Cinderలో అమలు చేయబడిన ప్రధాన ఆప్టిమైజేషన్లు:

  • బైట్‌కోడ్ ఇన్‌లైన్ కాషింగ్ ("షాడో బైట్‌కోడ్"). ఆప్టిమైజ్ చేయగల సాధారణ ఆప్‌కోడ్ అమలు చేయబడిన పరిస్థితులను గుర్తించడం మరియు అటువంటి ఆప్‌కోడ్‌ను వేగవంతమైన ప్రత్యేక ఎంపికలతో డైనమిక్‌గా భర్తీ చేయడం (ఉదాహరణకు, తరచుగా పిలువబడే ఫంక్షన్‌లను భర్తీ చేయడం) పద్ధతి యొక్క సారాంశం.
  • ఆసక్తితో కూడిన కరోటిన్ మూల్యాంకనం. తక్షణమే ప్రాసెస్ చేయబడిన అసమకాలిక ఫంక్షన్ కాల్‌ల కోసం (నిరీక్షించడం వలన వేచి ఉండదు మరియు ఫంక్షన్ ముందుగా రిటర్న్ స్టేట్‌మెంట్‌కు చేరుకుంటుంది), అటువంటి ఫంక్షన్‌ల ఫలితం ఒక కొరూటిన్‌ను సృష్టించకుండా లేదా ఈవెంట్ లూప్‌తో సంబంధం లేకుండా నేరుగా భర్తీ చేయబడుతుంది. అసమకాలీకరణ/నిరీక్షణను ఎక్కువగా ఉపయోగించే Facebook కోడ్‌లో, ఆప్టిమైజేషన్ ఫలితంగా దాదాపు 5% వేగం పెరుగుతుంది.
  • వ్యక్తిగత పద్ధతులు మరియు ఫంక్షన్ల స్థాయిలో ఎంపిక చేసిన JIT సంకలనం (పద్ధతి-ఎట్-ఎ-టైమ్). “-X jit” ఎంపిక లేదా PYTHONJIT=1 ఎన్విరాన్మెంట్ వేరియబుల్ ద్వారా ప్రారంభించబడింది మరియు అనేక పనితీరు పరీక్షల అమలును 1.5-4 రెట్లు వేగవంతం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. JIT సంకలనం తరచుగా అమలు చేయబడిన ఫంక్షన్లకు మాత్రమే సంబంధించినది కాబట్టి, అరుదుగా ఉపయోగించే ఫంక్షన్ల కోసం దీనిని ఉపయోగించడం మంచిది కాదు, దీని యొక్క కంపైలేషన్ ఓవర్ హెడ్ ప్రోగ్రామ్ అమలును నెమ్మదిస్తుంది.

    “-X jit-list-file=/path/to/jitlist.txt” ఎంపిక లేదా ఎన్విరాన్‌మెంట్ వేరియబుల్ “PYTHONJITLISTFILE=/path/to/jitlist.txt” ద్వారా మీరు JIT కోసం ఫంక్షన్‌ల జాబితాతో ఫైల్‌ను పేర్కొనవచ్చు. ఉపయోగించవచ్చు (మార్గం ఆకృతి .to.module:funcname లేదా path.to.module:ClassName.method_name). ప్రొఫైలింగ్ ఫలితాల ఆధారంగా JIT ప్రారంభించబడవలసిన ఫంక్షన్ల జాబితాను నిర్ణయించవచ్చు. భవిష్యత్తులో, ఫంక్షన్ కాల్‌ల ఫ్రీక్వెన్సీ యొక్క అంతర్గత విశ్లేషణ ఆధారంగా డైనమిక్ JIT కంపైలేషన్‌కు మద్దతు ఆశించబడుతుంది, అయితే ఇన్‌స్టాగ్రామ్‌లో ప్రాసెస్‌లను ప్రారంభించడం యొక్క ప్రత్యేకతలను పరిగణనలోకి తీసుకుంటే, JIT సంకలనం ప్రారంభ దశలో Facebookకి కూడా అనుకూలంగా ఉంటుంది.

    JIT మొదట పైథాన్ బైట్‌కోడ్‌ను హై-లెవల్ ఇంటర్మీడియట్ రిప్రజెంటేషన్ (HIR)గా మారుస్తుంది, ఇది పైథాన్ బైట్‌కోడ్‌కి చాలా దగ్గరగా ఉంటుంది, అయితే స్టాక్ ఆధారిత దానికి బదులుగా రిజిస్టర్-ఆధారిత వర్చువల్ మెషీన్‌ని ఉపయోగించేలా రూపొందించబడింది మరియు టైప్ సమాచారం మరియు అదనపు వినియోగాన్ని కూడా ఉపయోగిస్తుంది. పనితీరు-క్లిష్టమైన వివరాలు (రిఫరెన్స్ లెక్కింపు వంటివి) . HIR తర్వాత SSA (స్టాటిక్ సింగిల్ అసైన్‌మెంట్) ఫారమ్‌గా మార్చబడుతుంది మరియు సూచన లెక్కింపు ఫలితాలు మరియు మెమరీ వినియోగ డేటాను పరిగణనలోకి తీసుకునే ఆప్టిమైజేషన్ దశల ద్వారా వెళుతుంది. ఫలితంగా, అసెంబ్లీ భాషకు దగ్గరగా తక్కువ-స్థాయి ఇంటర్మీడియట్ ప్రాతినిధ్యం (LIR) ఉత్పత్తి చేయబడుతుంది. LIR-ఆధారిత ఆప్టిమైజేషన్ల యొక్క మరొక దశ తర్వాత, asmjit లైబ్రరీని ఉపయోగించి అసెంబ్లీ సూచనలు రూపొందించబడతాయి.

  • మాడ్యూల్స్ కోసం కఠినమైన మోడ్. కార్యాచరణలో మూడు భాగాలు ఉన్నాయి: టైప్ స్ట్రిక్ట్‌మాడ్యూల్. మాడ్యూల్ యొక్క అమలు ఆ మాడ్యూల్ వెలుపల కోడ్‌పై ఎటువంటి ప్రభావం చూపదని నిర్ధారించగల స్టాటిక్ ఎనలైజర్. మాడ్యూల్‌లు స్ట్రిక్ట్ మోడ్‌లో ఉన్నాయని నిర్ధారించే మాడ్యూల్ లోడర్ (కోడ్ “దిగుమతి __స్ట్రిక్ట్__”ని నిర్దేశిస్తుంది), ఇతర మాడ్యూల్‌లతో ఖండనలు లేకపోవడాన్ని తనిఖీ చేస్తుంది మరియు స్ట్రిక్ట్‌మాడ్యూల్ ఆబ్జెక్ట్‌గా sys.modules లోకి స్ట్రిక్ట్ మాడ్యూల్‌లను లోడ్ చేస్తుంది.
  • స్టాటిక్ పైథాన్ అనేది ప్రయోగాత్మక బైట్‌కోడ్ కంపైలర్, ఇది JIT కంపైలేషన్‌కు కృతజ్ఞతలు తెలుపుతూ వేగంగా అమలు చేసే టైప్-నిర్దిష్ట బైట్‌కోడ్‌ను రూపొందించడానికి టైప్ ఉల్లేఖనాలను ఉపయోగిస్తుంది. కొన్ని పరీక్షలలో, స్టాటిక్ పైథాన్ మరియు JIT కలయిక ప్రామాణిక CPythonతో పోలిస్తే 7 రెట్లు వరకు పనితీరు మెరుగుదలలను ప్రదర్శిస్తుంది. అనేక సందర్భాల్లో, ఫలితాలు MyPyC మరియు Cython కంపైలర్‌లను ఉపయోగించడానికి దగ్గరగా ఉన్నట్లు అంచనా వేయబడింది.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి