گروهی از محققان دانشگاه های آلمان
نسخه Rust درایور از نظر عملکرد بسیار نزدیک به درایور مرجع در زبان C است. تحت یک بار با ارسال همزمان بلوکهای 32 بسته، درایور Rust کمی عقب بود، اما در آزمایشهایی با بیش از 32 بسته در هر بلوک، سرعت عملاً تفاوتی با درایور C نداشت و عملکردی در سطح پردازش 28 میلیون نشان داد. بسته ها در ثانیه روی سروری با پردازنده Xeon E3-1230 v2 3.3 گیگاهرتز.
جایگاه بعدی از نظر عملکرد توسط درایورهای زبان های Go و C# اشغال شد که نتایج نسبتاً نزدیکی را نشان دادند (درایور Go در تست هایی با بلوک های حداکثر 16 بسته برنده شد و در تست هایی با بیش از 16 بسته شروع به از دست دادن اندکی کرد. در یک بلوک). با 256 بسته در هر بلوک، اوج عملکرد درایور C# تقریباً 28 میلیون بسته در ثانیه و درایور Go تقریباً 25 میلیون بسته در ثانیه بود.
بعدی، با نتایج نسبتا نزدیک، رانندگان برای
جاوا، OCaml و Haskell که قبلاً به طرز محسوسی از گزینه های در نظر گرفته شده قبلی عقب مانده بودند و نتوانستند بر 12 میلیون بسته در ثانیه غلبه کنند. درایورهای سوئیفت و جاوا اسکریپت تأخیر بیشتری را نشان دادند و قادر به پردازش جریان در سطح 5 میلیون بسته در ثانیه بودند.
رتبه برتر توسط درایور پایتون تکمیل شد که قادر به پردازش تنها 0.14 میلیون بسته در ثانیه بود. پیاده سازی Python برای ارزیابی سرعت مفسرها بدون JIT و بدون بهینه سازی خاص مورد استفاده قرار گرفت (کد با استفاده از CPython 3.7 اجرا شد و با PyPy سازگار نبود، اما اشاره شده است که بهینه سازی ساختارهای ذخیره سازی داده می تواند عملکرد را حدود 10 برابر بهبود بخشد. ).
علاوه بر این، آزمایشهای تأخیر برای نشان دادن اثربخشی بافر و تأثیر جمعآورنده زباله انجام شد. این آزمایش تاخیر را پس از ارسال هر بسته توسط راننده در مقایسه با زمان دقیق ارسال آن اندازه گیری کرد. رهبران همچنان درایورهای C و Rust بودند که نتایج آنها برای جریان 1 میلیون بسته در ثانیه (تقریباً 20 میکرو ثانیه) عملاً غیرقابل تشخیص بود. راننده Go عملکرد خوبی داشت و تنها کمی از رهبران عقب بود و همچنین در سطح 20 میکرو ثانیه باقی ماند. درایور سی شارپ تاخیرهایی در حدود 50 میکروثانیه نشان داد.
بیشترین تاخیرها توسط جاوا اسکریپت و درایورهای جاوا (تأخیر بیش از 300 میکرو ثانیه) نشان داده شد.
این مطالعه به منظور ارزیابی امکان توسعه درایورها و اجزای سیستم عامل در زبان های سطح بالاتر از C انجام شد. در حال حاضر 39 مشکل از 40 مشکل حافظه در لینوکس مربوط به درایورها است، بنابراین مسائل مربوط به استفاده از زبان امن تر و انتقال درایورها به خارج از هسته و به فضای کاربر
در طول کار، به این نتیجه رسیدیم که زبان Rust بهترین نامزد برای توسعه درایور است. قابلیت های Rust مشکلات مربوط به مدیریت حافظه در سطح پایین را با هزینه تقریباً 2% تا 10% کاهش عملکرد در مقایسه با درایورهای C برطرف می کند. Go و C# همچنین برای ایجاد اجزای سیستم در شرایطی که تأخیر زیر میلیثانیهای ناشی از جمعآوری زباله قابل قبول است، مناسب در نظر گرفته میشوند.
منبع: opennet.ru