10 پروگرامنگ زبانوں میں ورژن میں نیٹ ورک ڈرائیور کی کارکردگی کا موازنہ

جرمن یونیورسٹیوں کے محققین کا ایک گروپ опубликовала نتائج تجربہ، جس کے دوران 10 گیگا بٹ Intel Ixgbe (X10xx) نیٹ ورک کارڈز کے لیے معیاری ڈرائیور کے 5 ورژن مختلف پروگرامنگ زبانوں میں تیار کیے گئے۔ ڈرائیور صارف کی جگہ پر چلتا ہے اور اسے C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript اور Python میں لاگو کیا جاتا ہے۔ کوڈ لکھتے وقت، مرکزی توجہ ہر زبان کی خصوصیات کو مدنظر رکھتے ہوئے، بہترین ممکنہ کارکردگی کے حصول پر تھی۔ تمام اختیارات فعالیت میں یکساں ہیں اور کوڈ کی تقریباً 1000 لائنوں پر مشتمل ہیں۔ پروجیکٹ کی پیشرفت پھیلاؤ BSD لائسنس کے تحت۔

ڈرائیور کا زنگ ورژن C زبان میں حوالہ ڈرائیور کے کارکردگی میں بہت قریب نکلا۔ بیک وقت 32 پیکٹوں کے بلاکس بھیجنے کے بوجھ کے تحت، زنگ ڈرائیور تھوڑا پیچھے تھا، لیکن 32 پیکٹ فی بلاک سے زیادہ کے ٹیسٹوں میں، رفتار عملی طور پر C ڈرائیور سے مختلف نہیں تھی اور اس نے 28 ملین پروسیسنگ کی سطح پر کارکردگی کا مظاہرہ کیا۔ Xeon CPU E3-1230 v2 3.3 GHz والے سرور پر پیکٹ فی سیکنڈ۔

10 پروگرامنگ زبانوں میں ورژن میں نیٹ ورک ڈرائیور کی کارکردگی کا موازنہ

کارکردگی کے لحاظ سے اگلی جگہ Go اور C# زبانوں میں ڈرائیوروں کے قبضے میں تھی، جس نے کافی قریب کے نتائج دکھائے (گو ڈرائیور نے 16 پیکٹوں تک کے بلاکس کے ٹیسٹوں میں کامیابی حاصل کی، اور 16 سے زیادہ پیکٹوں کے ٹیسٹوں میں تھوڑا سا ہارنا شروع کیا۔ ایک بلاک میں)۔ 256 پیکٹ فی بلاک کے ساتھ، C# ڈرائیور کی اعلی کارکردگی تقریباً 28 ملین پیکٹ فی سیکنڈ تھی، اور گو ڈرائیور تقریباً 25 ملین پیکٹ فی سیکنڈ تھی۔

اگلا، کافی قریبی نتائج کے ساتھ، ڈرائیوروں کے لئے تھے
جاوا، او سی ایم ایل اور ہاسکل، جو پہلے سے ہی پہلے سمجھے گئے آپشنز سے نمایاں طور پر پیچھے تھے اور فی سیکنڈ بار 12 ملین پیکٹ پر قابو نہیں پا سکے۔ سوئفٹ اور جاوا اسکرپٹ ڈرائیوروں نے اس سے بھی زیادہ وقفہ دکھایا، جو 5 ملین پیکٹ فی سیکنڈ کی سطح پر اسٹریمز پر کارروائی کرنے کے قابل تھے۔

سب سے اوپر کی درجہ بندی Python ڈرائیور نے مکمل کی، جو صرف 0.14 ملین پیکٹ فی سیکنڈ پر کارروائی کرنے کے قابل تھا۔ Python کے نفاذ کو JIT کے بغیر اور مخصوص اصلاح کے بغیر ترجمانوں کی رفتار کا اندازہ کرنے کے لیے استعمال کیا گیا تھا (کوڈ کو CPython 3.7 کا استعمال کرتے ہوئے عمل میں لایا گیا تھا اور یہ PyPy کے ساتھ مطابقت نہیں رکھتا تھا، لیکن یہ بات قابل ذکر ہے کہ ڈیٹا اسٹوریج ڈھانچے کی اصلاح سے کارکردگی کو تقریباً 10 گنا بہتر بنایا جا سکتا ہے۔ )۔

مزید برآں، بفرنگ کی تاثیر اور کوڑا اٹھانے والے کے اثرات کو ظاہر کرنے کے لیے تاخیر کے ٹیسٹ کیے گئے۔ ٹیسٹنگ نے ہر پیکٹ کو ڈرائیور کی طرف سے بھیجے جانے کے درست وقت کے مقابلے میں تاخیر کی پیمائش کی۔ لیڈر اب بھی C اور Rust ڈرائیور تھے، جن کے نتائج 1 ملین پیکٹ فی سیکنڈ (تقریباً 20 µs) کے بہاؤ کے لیے عملی طور پر الگ نہیں تھے۔ گو ڈرائیور نے اچھی کارکردگی کا مظاہرہ کیا، لیڈروں سے تھوڑا پیچھے رہ کر اور 20 µs کی سطح پر بھی رہ گیا۔ C# ڈرائیور نے تقریباً 50 µs کی تاخیر دکھائی۔
سب سے طویل تاخیر JavaScript اور Java ڈرائیورز (300 µs سے زیادہ کی تاخیر) کے ذریعے دکھائی گئی۔

10 پروگرامنگ زبانوں میں ورژن میں نیٹ ورک ڈرائیور کی کارکردگی کا موازنہ

یہ مطالعہ C کے مقابلے میں اعلیٰ سطحی زبانوں میں ڈرائیوروں اور آپریٹنگ سسٹم کے اجزاء کی ترقی کے امکان کا جائزہ لینے کے لیے کیا گیا تھا۔ فی الحال، لینکس میں میموری کے 39 میں سے 40 مسائل ڈرائیوروں سے متعلق ہیں، اس لیے زیادہ محفوظ زبان استعمال کرنے اور ڈرائیوروں کو کرنل سے باہر اور صارف کی جگہ میں منتقل کرنے کے مسائل متعلقہ رہیں اور مینوفیکچررز پہلے ہی اس سمت میں فعال طور پر تجربہ کر رہے ہیں (مثال کے طور پر، گوگل نے OS کے لیے ایک TCP اسٹیک تیار کیا ہے فشیا گو زبان میں، CloudFlare کمپنی پیدا کیا زنگ میں QUIC پروٹوکول کا نفاذ، ایپل نے موبائل آلات پر TCP اسٹیک کو صارف کی جگہ میں منتقل کر دیا ہے)۔

کام کے دوران، یہ نتیجہ اخذ کیا گیا کہ زنگ کی زبان ڈرائیور کی ترقی کے لیے بہترین امیدوار ہے۔ زنگ کی صلاحیتیں C ڈرائیوروں کے مقابلے میں تقریباً 2% سے 10% کارکردگی میں کمی کی لاگت سے کم سطحی میموری کے انتظام سے وابستہ مسائل کو ختم کرتی ہیں۔ Go اور C# کو بھی ایسے حالات میں سسٹم کے اجزاء بنانے کے لیے موزوں سمجھا جاتا ہے جہاں کوڑا کرکٹ جمع کرنے کی وجہ سے سب ملی سیکنڈ لیٹینسی قابل قبول ہوتی ہے۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں