10 پروگرامنگ ٻولين ۾ نيٽ ورڪ ڊرائيور ڪارڪردگي جو مقابلو

جرمن يونيورسٽين مان محققن جو هڪ گروپ شايع ٿيل نتيجن ماهر, جنهن دوران 10-gigabit Intel Ixgbe (X10xx) نيٽ ورڪ ڪارڊ لاءِ عام ڊرائيور جا 5 مختلف قسمون مختلف پروگرامنگ ٻولين ۾ تيار ڪيون ويون. ڊرائيور يوزر اسپيس ۾ هلندو آهي ۽ C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript ۽ Python ۾ لاڳو ٿئي ٿو. ڪوڊ لکڻ وقت، هر ٻوليءَ جي خاصيتن کي نظر ۾ رکندي، سڀ کان وڌيڪ ممڪن ڪارڪردگي حاصل ڪرڻ تي ڌيان ڏنو ويو. ڪارڪردگي جي لحاظ کان، سڀ اختيار هڪجهڙا آهن ۽ لڳ ڀڳ 1000 لائنن جي ڪوڊ تي مشتمل آهن. پروجيڪٽ جي ڪاميابين ڦهلڻ BSD لائسنس جي تحت.

ڊرائيور جو مورچا نسخو ڪارڪردگي جي حوالي سان سي ڊرائيور جي تمام ويجهو هو. 32 پيڪن جي بلاڪن جي هڪ واحد موڪلڻ سان، رسٽ ڊرائيور ٿورڙي دير ٿي وئي، پر 32 پيڪٽس في بلاڪ کان وڌيڪ ٽيسٽن ۾، اهو عملي طور تي سي ڊرائيور کان رفتار ۾ فرق نه ڪيو ۽ پروسيسنگ جي سطح تي ڪارڪردگي جو مظاهرو ڪيو. Xeon CPU E28-3 v1230 2 GHz سان سرور تي 3.3 ملين پيڪيٽ في سيڪنڊ.

10 پروگرامنگ ٻولين ۾ نيٽ ورڪ ڊرائيور ڪارڪردگي جو مقابلو

ڪارڪردگي جي لحاظ کان ايندڙ جڳهه تي Go ۽ C# ڊرائيورن جو قبضو هو، جنهن جا ڪافي ويجهي نتيجا ڏيکاريا ويا (گو ڊرائيور ٽيسٽن ۾ کٽيو جنهن ۾ 16 پيڪيجز شامل هئا، ۽ 16 کان وڌيڪ پيڪيجز سان ٽيسٽن ۾ ٿورو وڃائڻ شروع ڪيو. بلاڪ). 256 پيڪٽس في بلاڪ سان، C# ڊرائيور لاءِ چوٽي جي ڪارڪردگي تقريبن 28Mpps هئي، ۽ Go ڊرائيورز لاءِ، تقريبن 25Mpps.

اڳيون، ڪافي ويجهي نتيجن سان، ڊرائيور جي پٺيان
جاوا، OCaml ۽ Haskell، جيڪي اڳ ۾ ئي غور ڪيل اختيارن جي پويان اڳ ۾ ئي قابل ذڪر هئا ۽ 12 ملين پيڪٽس في سيڪنڊ جي بار کي ختم نه ڪري سگهيا. سوفٹ ۽ جاوا اسڪرپٽ تي ٻڌل ڊرائيورن اڃا به وڌيڪ پسمانده ڏيکاريا، جيڪي 5 ملين پيڪيٽ في سيڪنڊ جي سطح تي اسٽريم کي پروسيس ڪرڻ جي قابل هئا.

پٿون ٻولي ۾ ڊرائيور ريٽنگ بند ڪري ڇڏي، جيڪا صرف 0.14 ملين پيڪيٽ في سيڪنڊ کي پروسيس ڪرڻ جي قابل هئي. Python عمل درآمد JIT کان سواءِ ترجمانن جي رفتار کي جانچڻ لاءِ استعمال ڪيو ويو ۽ بغير مخصوص اصلاحن جي (ڪوڊ CPython 3.7 استعمال ڪندي هلايو ويو ۽ PyPy سان مطابقت نه هو، پر اهو نوٽ ڪيو ويو آهي ته ڊيٽا جي جوڙجڪ جي اصلاح ڪارڪردگي کي 10 ڀيرا بهتر ڪري سگهي ٿي).

اضافي طور تي، ويڪرائي ٽيسٽ ڪيا ويا، جن ۾ بفرنگ جي اثرائتي ۽ ردي جي ڪليڪٽر جو اثر ڏيکاريو ويو. ٽيسٽ ويڪرائي ماپ ڪئي بعد ۾ هر پيڪٽ ڊرائيور طرفان ريڊائريڪٽ ڪيو ويو، هڪ ڄاڻايل موڪل واري وقت جي مقابلي ۾. اڳواڻ اڃا تائين سي ۽ زنگ ڊرائيور هئا، جن جا نتيجا تقريباً ڌار ڌار هئا 1 ملين پيڪيٽ في سيڪنڊ (اٽڪل 20 µs) جي وهڪري لاءِ. گو ٻولي ۾ ڊرائيور سٺو پرفارم ڪيو، جيڪو صرف اڳواڻن کان ٿورو پوئتي هو ۽ پڻ 20 µs جي سطح تي رکيو ويو. C# ڊرائيور اٽڪل 50 µs جي دير ڏيکاري.
جاوا اسڪرپٽ ۽ جاوا جي بنياد تي ڊرائيورز سڀ کان وڏي دير ڏيکاريا (تاخير 300 µs کان وڌيڪ).

10 پروگرامنگ ٻولين ۾ نيٽ ورڪ ڊرائيور ڪارڪردگي جو مقابلو

اڀياس ڪيو ويو ته جيئن ترقي ڪندڙ ڊرائيور ۽ آپريٽنگ سسٽم جي اجزاء جي امڪان کي جانچڻ لاء سي کان اعلي سطح جي ٻولين ۾. في الحال، 39 مان 40 لينڪس ميموري مسئلا ڊرائيور سان لاڳاپيل آهن، تنهنڪري هڪ محفوظ ٻولي کي اپنائڻ ۽ ڊرائيورن کي ڪني کان ٻاهر ۽ صارف جي جاء تي منتقل ڪرڻ جا مسئلا. لاڳاپيل رهي ۽ ٺاهيندڙ اڳ ۾ ئي فعال طور تي هن هدايت ۾ تجربا ڪري رهيا آهن (مثال طور، گوگل ترقي ڪئي آهي هڪ TCP اسٽيڪ OS لاءِ فوسيس Go ۾، CloudFlare ٺاهيل زنگ ۾ QUIC پروٽوڪول تي عمل درآمد، ايپل موبائل ڊوائيسز تي TCP اسٽيڪ کي صارف جي جاء تي منتقل ڪيو).

ڪم جي دوران، اهو نتيجو اهو نڪتو ته زنگ ٻولي ڊرائيور جي ترقي لاء بهترين اميدوار آهي. Rust پاران مهيا ڪيل خاصيتون توهان کي انهن مسئلن کان نجات حاصل ڪرڻ جي اجازت ڏين ٿيون جيڪي گهٽ-سطح جي ميموري هينڊلنگ سبب پيدا ٿين ٿيون، سي-ٻوليءَ جي ڊرائيورن جي مقابلي ۾ 2%-10% جي ڪارڪردگي ڏنڊ جي قيمت تي. Go ۽ C# پڻ مليا آهن سسٽم جي اجزاء جي تعمير لاءِ انهن حالتن ۾ جتي ذيلي مليسيڪنڊ دير سان گندگي ڪليڪٽر جي ڪري قابل قبول آهي.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو