Поређење перформанси мрежног драјвера у верзијама на 10 програмских језика

Група истраживача са немачких универзитета опубликовала налази експеримент, током којег је развијено 10 верзија стандардног драјвера за 10-гигабитне Интел Икгбе (Кс5кк) мрежне картице на различитим програмским језицима. Драјвер ради у корисничком простору и имплементиран је у Ц, Руст, Го, Ц#, Јава, ОЦамл, Хаскелл, Свифт, ЈаваСцрипт и Питхон. Приликом писања кода, главни фокус је био на постизању најбољих могућих перформанси, узимајући у обзир карактеристике сваког језика. Све опције су идентичне у функционалности и састоје се од приближно 1000 линија кода. Развој пројекта ширење под БСД лиценцом.

Испоставило се да је Руст верзија драјвера по перформансама веома блиска референтном драјверу у језику Ц. Под оптерећењем са истовременим слањем блокова од 32 пакета, Руст драјвер је заостајао, али у тестовима са више од 32 пакета по блоку, брзина се практично није разликовала од Ц драјвера и показала је перформансе на нивоу обраде 28 милиона пакета у секунди на серверу са Ксеон ЦПУ Е3-1230 в2 3.3 ГХз.

Поређење перформанси мрежног драјвера у верзијама на 10 програмских језика

Следећу нишу у погледу перформанси заузели су драјвери на језицима Го и Ц#, који су показали прилично блиске резултате (го драјвер је победио у тестовима са блоковима до 16 пакета, а почео је благо да губи у тестовима са више од 16 пакета у блоку). Са 256 пакета по блоку, вршне перформансе Ц# драјвера биле су приближно 28 милиона пакета у секунди, а Го драјвера приближно 25 милиона пакета у секунди.

Следећи, са прилично тесним резултатима, били су возачи за
Јава, ОЦамл и Хаскелл, који су већ приметно заостајали за претходно разматраним опцијама и нису могли да превазиђу 12 милиона пакета у секунди. Свифт и ЈаваСцрипт драјвери су показали још веће заостајање, будући да су могли да обрађују стреамове на нивоу од 5 милиона пакета у секунди.

Највишу позицију је завршио Питхон драјвер, који је могао да обради само 0.14 милиона пакета у секунди. Питхон имплементација је коришћена за процену брзине интерпретатора без ЈИТ-а и без специфичних оптимизација (код је извршен помоћу ЦПитхон 3.7 и није био компатибилан са ПиПи, али се примећује да би оптимизација структура за складиштење података могла да побољша перформансе за око 10 пута ).

Поред тога, спроведени су тестови кашњења да би се показала ефикасност баферовања и утицај сакупљача смећа. Тестирањем је измерено кашњење након што је сваки пакет прослеђен од стране драјвера у поређењу са тачним временом када је послан. Лидери су и даље били Ц и Руст драјвери, чији су резултати били практично неразлучиви за проток од 1 милион пакета у секунди (приближно 20 µс). Го возач се добро показао, заостајао је за водећим тек незнатно и такође се задржао на нивоу од 20 µс. Ц# драјвер је показао кашњење од приближно 50 µс.
Најдужа кашњења су показали ЈаваСцрипт и Јава драјвери (латенције веће од 300 µс).

Поређење перформанси мрежног драјвера у верзијама на 10 програмских језика

Студија је спроведена да би се проценила могућност развоја драјвера и компоненти оперативног система на језицима вишег нивоа од Ц. Тренутно, 39 од 40 проблема са меморијом у Линуку је повезано са драјверима, тако да су проблеми коришћења безбеднијег језика и премештања драјвера из кернела у кориснички простор остати релевантан и произвођачи већ активно експериментишу у овом правцу (на пример, Гоогле је развио ТЦП стек за ОС Фуксија на језику Го, компанија ЦлоудФларе створена имплементација КУИЦ протокола у Руст-у, Аппле је преместио ТЦП стек на мобилним уређајима у кориснички простор).

У току рада је закључено да је Руст језик најбољи кандидат за развој драјвера. Руст-ове могућности елиминишу проблеме повезане са управљањем меморијом ниског нивоа по цени од приближно 2% до 10% губитка перформанси у поређењу са Ц драјверима. Го и Ц# се такође сматрају погодним за креирање системских компоненти у ситуацијама када је кашњење испод милисекунде узроковано сакупљањем смећа прихватљиво.

Извор: опеннет.ру

Додај коментар