Facebook විවෘත මූලාශ්‍ර Cinder, Instagram විසින් භාවිතා කරන CPython හි දෙබලකි

Facebook විසින් Python ක්‍රමලේඛන භාෂාවේ ප්‍රධාන යොමු ක්‍රියාත්මක කිරීම වන CPython 3.8.5 හි දෙබලක වන Project Cinder සඳහා මූල කේතය ප්‍රකාශයට පත් කර ඇත. ඉන්ස්ටග්‍රෑම් බල ගැන්වීම සඳහා Facebook හි නිෂ්පාදන යටිතල ව්‍යුහය තුළ Cinder භාවිතා කරන අතර කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා ප්‍රශස්තකරණයන් ඇතුළත් වේ.

සකස් කරන ලද ප්‍රශස්තකරණයන් ප්‍රධාන CPython රාමුව වෙත ගෙනයාමේ හැකියාව සාකච්ඡා කිරීමට සහ CPython කාර්ය සාධනය වැඩිදියුණු කිරීමට සම්බන්ධ අනෙකුත් ව්‍යාපෘතිවලට උපකාර කිරීමට කේතය ප්‍රකාශයට පත් කෙරේ. ෆේස්බුක් වෙනම විවෘත මූලාශ්‍ර ව්‍යාපෘතියක ස්වරූපයෙන් Cinder සඳහා සහය දැක්වීමට අදහස් නොකරන අතර කේතය අතිරේක පනා සහ ලේඛන නොමැතිව සමාගමේ යටිතල ව්‍යුහය තුළ භාවිතා කරන ආකාරයෙන් ඉදිරිපත් කෙරේ. ඔවුන් CPython සඳහා විකල්පයක් ලෙස Cinder ප්‍රවර්ධනය කිරීමට උත්සාහ නොකරයි - සංවර්ධනයේ ප්‍රධාන ඉලක්කය වන්නේ CPython වැඩිදියුණු කිරීමට ඇති ආශාවයි.

සින්ඩර් කේතය තරමක් විශ්වාසදායක ලෙස සටහන් කර ඇති අතර නිෂ්පාදන පරිසරයන් තුළ පරීක්ෂා කර ඇත, නමුත් ගැටළු හඳුනා ගන්නේ නම්, ඔබට ඒවා ඔබම විසඳා ගැනීමට සිදුවනු ඇත, මන්ද ෆේස්බුක් එය බාහිර දෝෂ පණිවිඩවලට ප්‍රතිචාර දක්වන බවට සහ ඉල්ලීම් ඇද ගන්නා බවට සහතික නොවන බැවිනි. ඒ අතරම, Facebook ප්‍රජාව සමඟ නිර්මාණාත්මක සහයෝගීතාවය බැහැර නොකරන අතර Cinder වඩාත් වේගවත් කරන්නේ කෙසේද යන්න පිළිබඳ අදහස් සාකච්ඡා කිරීමට හෝ CPython හි ප්‍රධාන කොටස වෙත සූදානම් කළ වෙනස්කම් මාරු කිරීම වේගවත් කරන්නේ කෙසේද යන්න පිළිබඳ අදහස් සාකච්ඡා කිරීමට සූදානම්ය.

Cinder හි ක්‍රියාත්මක කරන ලද ප්‍රධාන ප්‍රශස්තකරණයන්:

  • බයිට්කේතයේ පේළිගත හැඹිලිය ("සෙවණ බයිට්කේත"). ක්‍රමයේ සාරය නම් ප්‍රශස්තකරණය කළ හැකි සාමාන්‍ය opcode ක්‍රියාත්මක වන අවස්ථා හඳුනා ගැනීම සහ එවැනි opcode වේගවත් විශේෂිත විකල්ප සමඟ ගතිකව ප්‍රතිස්ථාපනය කිරීමයි (නිදසුනක් ලෙස, නිතර හඳුන්වන ශ්‍රිත ප්‍රතිස්ථාපනය කිරීම).
  • උනන්දුවෙන් coroutine ඇගයීම. Async Function ඇමතුම් සඳහා ක්ෂණිකව ක්‍රියාවට නංවනු ලැබේ (බලාපොරොත්තුවෙන් රැඳී සිටීමක් සිදු නොවන අතර ශ්‍රිතය කලින් ප්‍රතිලාභ ප්‍රකාශය වෙත ළඟා වේ), එවැනි ශ්‍රිතවල ප්‍රතිඵලය coroutine නිර්මාණය නොකර හෝ සිද්ධි ලූපයක් සම්බන්ධ නොකර සෘජුවම ආදේශ කරනු ලැබේ. Async/await දැඩි ලෙස භාවිතා කරන 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 සම්පාදනය සඳහා සහය අපේක්ෂා කෙරේ, නමුත් Instagram හි ක්‍රියාවලි දියත් කිරීමේ විශේෂතා සැලකිල්ලට ගනිමින්, JIT සම්පාදනය ආරම්භක අදියරේදී Facebook සඳහා ද සුදුසු වේ.

    JIT ප්‍රථමයෙන් Python bytecode ඉහළ මට්ටමේ අතරමැදි නිරූපණයක් (HIR) බවට පරිවර්තනය කරයි, එය Python bytecode ට තරමක් සමීප වන නමුත්, අට්ටි පදනම් වූ එකක් වෙනුවට රෙජිස්ටර් මත පදනම් වූ අතථ්‍ය යන්ත්‍රයක් භාවිතා කිරීමට සැලසුම් කර ඇති අතර, වර්ග තොරතුරු සහ අතිරේක භාවිතා කරයි. කාර්ය සාධන-විවේචනාත්මක විස්තර (යොමු ගණන් කිරීම වැනි) . HIR පසුව SSA (ස්ථිතික තනි පැවරුම්) පෝරමය බවට පරිවර්තනය වන අතර යොමු ගණන් කිරීමේ ප්‍රතිඵල සහ මතක පරිභෝජන දත්ත සැලකිල්ලට ගනිමින් ප්‍රශස්තිකරණ පියවර හරහා ගමන් කරයි. එහි ප්‍රතිඵලයක් වශයෙන්, එකලස් කිරීමේ භාෂාවට ආසන්නව පහළ මට්ටමේ අතරමැදි නියෝජනයක් (LIR) ජනනය වේ. LIR-පාදක ප්‍රශස්තකරණයේ තවත් අදියරකින් පසුව, asmjit පුස්තකාලය භාවිතයෙන් එකලස් කිරීමේ උපදෙස් ජනනය කෙරේ.

  • මොඩියුල සඳහා දැඩි මාදිලිය. ක්‍රියාකාරීත්වයට සංරචක තුනක් ඇතුළත් වේ: StrictModule වර්ගය. මොඩියුලයක් ක්‍රියාත්මක කිරීම එම මොඩියුලයෙන් පිටත කේතයට බලපෑමක් නොමැති බව තීරණය කළ හැකි ස්ථිතික විශ්ලේෂකය. මොඩියුල දැඩි මාදිලියේ පවතින බව තීරණය කරන මොඩියුල ලෝඩරයක් (කේතය "ආනයනය __strict__" සඳහන් කරයි), අනෙකුත් මොඩියුල සමඟ ඡේදනය නොමැති දැයි පරීක්ෂා කරයි, සහ StrictModule වස්තුවක් ලෙස sys.modules වෙත දැඩි මොඩියුල පූරණය කරයි.
  • ස්ථිතික පයිතන් යනු පර්යේෂණාත්මක බයිට්කේත සම්පාදකයක් වන අතර එය JIT සම්පාදනයට ස්තූතිවන්ත වන පරිදි වේගයෙන් ධාවනය වන වර්ගයට විශේෂිත බයිට්කේතයක් ජනනය කිරීමට වර්ග විවරණ භාවිතා කරයි. සමහර පරීක්ෂණ වලදී, Static Python සහ JIT සංයෝගය සම්මත CPython හා සසඳන විට 7 ගුණයක් දක්වා කාර්ය සාධන වැඩිදියුණු කිරීම් පෙන්නුම් කරයි. බොහෝ අවස්ථාවන්හිදී, ප්රතිඵල MyPyC සහ Cython සම්පාදක භාවිතා කිරීමට ආසන්න බව ඇස්තමේන්තු කර ඇත.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න