Муқоисаи кори драйверҳои шабакавӣ дар 10 забони барномасозӣ

Гурухи олимони университетхои Германия нашр шудааст Натиҷаҳо озмоиш, ки дар давоми он 10 варианти драйвери маъмулӣ барои кортҳои шабакавии 10 гигабитии Intel Ixgbe (X5xx) бо забонҳои гуногуни барномасозӣ таҳия карда шуданд. Драйвер дар фазои корбар кор мекунад ва дар C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript ва Python амалӣ карда мешавад. Ҳангоми навиштани код диққати махсус ба ноил шудан ба нишондиҳандаҳои баландтарин бо назардошти хусусиятҳои ҳар як забон буд. Аз нуқтаи назари функсионалӣ, ҳама вариантҳо якхелаанд ва аз тақрибан 1000 сатри код иборатанд. Дастовардҳои лоиҳа паҳн шудан таҳти иҷозатномаи BSD.

Версияи Rust ронанда аз ҷиҳати иҷроиш ба драйвери истинод C хеле наздик буд. Ҳангоми сарборӣ бо як фиристодани блокҳои 32 пакет, ронандаи Rust каме ақиб монд, аммо дар озмоишҳо бо зиёда аз 32 пакет дар як блок, он амалан бо суръат аз драйвери C фарқ надошт ва дар сатҳи коркард нишон дод. 28 миллион пакет дар як сония дар сервер бо Xeon CPU E3-1230 v2 3.3 ГГц.

Муқоисаи кори драйверҳои шабакавӣ дар 10 забони барномасозӣ

Ҷойгоҳи навбатиро аз рӯи нишондиҳандаҳо ронандагони Go ва C# ишғол карданд, ки натиҷаҳои хеле наздик нишон доданд (драйвери Go дар санҷишҳо бо блокҳое, ки то 16 бастаро дар бар мегирифтанд, ғолиб омад ва дар санҷишҳо бо зиёда аз 16 бастаҳо дар як адад каме гум шудан гирифт. блок). Бо 256 баста дар як блок, иҷрои баландтарин барои драйвери C # тақрибан 28Mpps ва барои драйверҳои Go тақрибан 25Mpps буд.

Баъдан, бо натиҷаҳои хеле наздик, пас аз ронандагон барои
Java, OCaml ва Haskell, ки аллакай аз имконоти қаблан баррасӣшуда ба таври назаррас паси сар буданд ва натавонистанд сатри 12 миллион пакет дар як сонияро бартараф кунанд. Ронандагон дар асоси Swift ва JavaScript боз ҳам қафомонии бештареро нишон доданд, ки тавонистанд ҷараёнҳоро дар сатҳи 5 миллион пакет дар як сония коркард кунанд.

Драйвер бо забони Python рейтингро баст, ки тавонист дар як сония ҳамагӣ 0.14 миллион пакетро коркард кунад. Татбиқи Python барои арзёбии суръати тарҷумонҳо бидуни JIT ва бидуни оптимизатсияи мушаххас истифода шудааст (код бо истифода аз CPython 3.7 иҷро шуда буд ва бо PyPy мувофиқ набуд, аммо қайд карда мешавад, ки оптимизатсияи сохторҳои додаҳо метавонад корҳоро тақрибан 10 маротиба беҳтар кунад).

Илова бар ин, санҷишҳои латентӣ гузаронида шуданд, ки самаранокии буферӣ ва таъсири коллектори партовҳоро нишон доданд. Санҷиш таъхирро пас аз интиқоли ҳар як баста аз ҷониби ронанда дар муқоиса бо вақти маълуми ирсол чен кард. Роҳбарон ҳанӯз ҳам ронандагони C ва Rust буданд, ки натиҷаҳои онҳо барои ҷараёни 1 миллион пакет дар як сония (тақрибан 20 мкс) қариб фарқ намекарданд. Ронанда бо забони Go хуб баромад кард, ки аз пешвоён каме ақиб монд ва инчунин дар сатҳи 20 мкс нигоҳ дошта шуд. Ронандаи C# тақрибан 50 мкс таъхирҳоро нишон дод.
Ронандагон дар асоси JavaScript ва Java таъхирҳои калонтаринро нишон доданд (таъхирҳо зиёда аз 300 мкс).

Муқоисаи кори драйверҳои шабакавӣ дар 10 забони барномасозӣ

Таҳқиқот бо мақсади баҳодиҳии имкони таҳияи драйверҳо ва ҷузъҳои системаи амалиётӣ бо забонҳои сатҳи баландтар аз C гузаронида шуд. Дар айни замон, аз 39 мушкилоти хотираи Linux 40-тои он ба драйверҳо вобаста аст, бинобар ин, масъалаҳои қабули забони бехатар ва интиқоли драйверҳо аз ядро ​​ва фазои корбар дахлдор боқӣ мемонад ва истеҳсолкунандагон аллакай дар ин самт фаъолона озмоиш мекунанд (масалан, Google стеки TCP барои OS таҳия кардааст. Фуксиа дар Go, CloudFlare офаридааст татбиқи протоколи QUIC дар Rust, Apple стеки TCP-ро дар дастгоҳҳои мобилӣ ба фазои корбар интиқол дод).

Дар рафти кор ба хулосае омад, ки забони русй барои такмили ронандагон бехтарин номзад аст. Хусусиятҳои аз ҷониби Rust пешниҳодшуда ба шумо имкон медиҳанд, ки аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, бо арзиши ҷаримаи иҷроиш тақрибан 2% -10% дар муқоиса бо драйверҳои забони C халос шавед. Go ва C# инчунин барои сохтани ҷузъҳои система дар ҳолатҳое мувофиқанд, ки таъхири субмиллисония аз ҷониби коллектори партовҳо қобили қабул аст.

Манбаъ: opennet.ru

Илова Эзоҳ