أصدر Facebook كود مصدر Cinder الذي يستخدمه Instagram

كشف النقاب عن الفيسبوك مؤخرًا من خلال منشور ، تحرير الكود المصدري لمشروع Cinderوهو شوكة فرع CPython والتنفيذ المرجعي الرئيسي للغة برمجة بايثون.

جمرة المستخدمة في البنية التحتية لإنتاج Facebook لتشغيل Instagram ويتضمن تحسينات لتحسين الأداء. تم نشر الكود لمناقشة إمكانية ترحيل التحسينات الجاهزة إلى التيار الرئيسي لـ CPython وللمساعدة في مشاريع تحسين أداء CPython الأخرى.

يذكر Facebook أنه لن يدعم Cinder كمشروع منفصل مفتوح المصدر ويتم تقديم الكود بالشكل الذي يستخدم به في البنية التحتية للشركة ، دون توثيق إضافي.

لا تروج Cinder لنفسها كبديل لـ CPython أيضًا - الهدف الرئيسي للتنمية هو تحسين CPython نفسه.

يعتبر كود Cinder موثوقًا بشكل معقول واختبارها في بيئات الإنتاج ، ولكن إذا تم تحديد المشكلات ، فستحتاج إلى حلها من تلقاء نفسها ، حيث لا يضمن Facebook أنه سيستجيب لرسائل الخطأ الخارجية وسحب الطلبات.

في الوقت نفسه ، لا يستبعد Facebook التعاون البناء مع المجتمع ومستعد لمناقشة الأفكار حول كيفية جعل Cinder أسرع أو كيفية تسريع نقل التغييرات المعدة إلى إطار العمل الرئيسي لـ CPython.

التحسينات الرئيسية التي تم تنفيذها في Cinder هي:

  • Bytecode التخزين المؤقت عبر الإنترنت: يتمثل جوهر الطريقة في تحديد حالات تنفيذ كود التشغيل النموذجية التي يمكن تحسينها ديناميكيًا واستبدال كود التشغيل هذا بخيارات متخصصة أسرع.
  • التقييم الروتيني: بالنسبة إلى استدعاءات الوظائف غير المتزامنة التي تتم معالجتها على الفور ، يتم تجاوز نتيجة هذه الوظائف مباشرةً دون إنشاء coroutine ودون استدعاء حلقة حدث. في الكود الذي يستخدمه Facebook ، والذي يستخدمه بكثافة ، يؤدي التحسين إلى تسارع بنسبة 5٪ تقريبًا.
  • تجميع انتقائي لـ JIT على مستوى الأساليب والوظائف الفردية: يتم تمكينه بواسطة خيار "-X jit" أو متغير البيئة PYTHONJIT = 1 ويسمح بتسريع العديد من اختبارات الأداء بمقدار 1,5 إلى 4 مرات.
    يمكن تحديد قائمة الوظائف التي يجب تمكين JIT لها بناءً على نتائج ملف التعريف. في المستقبل ، من المتوقع دعم التجميع الديناميكي JIT استنادًا إلى التحليل الداخلي لتردد استدعاء الوظيفة ، ولكن بالنظر إلى تفاصيل عمليات الإطلاق على Instagram ، فإن تجميع JIT مناسب أيضًا لـ Facebook في المرحلة الأولية.
    يقوم JIT أولاً بتحويل Python bytecode إلى تمثيل متوسط ​​عالي المستوى (HIR) ، وهو قريب بشكل معقول من Python bytecode ، ولكنه مصمم لاستخدام آلة افتراضية قائمة على السجل بدلاً من آلة افتراضية قائمة على السجل.في المكدس ، وأيضًا يستخدم معلومات النوع والتفاصيل الإضافية ذات الصلة بالأداء. ثم يتم تحويل HIR إلى نموذج تخصيص فردي ثابت (SSA) ويخضع لمراحل من التحسين بناءً على عدد المراجع وبيانات استخدام الذاكرة. نتيجة لذلك ، يتم إنشاء تمثيل متوسط ​​منخفض المستوى (LIR) ، وهو قريب من لغة التجميع.
  • الوضع الصارم للوحدات النمطية:تتكون الوظيفة من ثلاثة مكونات: نوع StrictModule. محلل ثابت قادر على تحديد أن تنفيذ الوحدة النمطية لا يؤثر على الكود خارج تلك الوحدة.
  • ثابت بايثون: هو مترجم تجريبي للبايت كود يستخدم التعليقات التوضيحية على النوع لإنشاء كود ثنائي خاص بكل نوع ويعمل بشكل أسرع من خلال تجميع JIT. في بعض الاختبارات ، يُظهر الجمع بين Static Python و JIT تحسنًا في الأداء يصل إلى 7x مقارنةً بـ CPython النموذجي. في كثير من الحالات ، يتم تقييم النتائج كما لو تم استخدام مترجمي MyPyC و Cython.

أخيرا إذا كنت مهتمًا بالحصول على كود Cinder أو معرفة المزيد حول هذا الموضوع ، يمكنك الرجوع إلى التفاصيل في الرابط التالي.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.