En gruppe forskere fra tyske universiteter
Rust-versionen af driveren var meget tæt på reference C-driveren i ydeevne. Med en belastning med en enkelt afsendelse af blokke på 32 pakker haltede Rust-driveren lidt, men i test med mere end 32 pakker per blok adskilte den sig praktisk talt ikke i hastighed fra C-driveren og demonstrerede ydeevne på behandlingsniveau 28 millioner pakker i sekundet på en server med en Xeon CPU E3-1230 v2 3.3 GHz.
Den næste niche med hensyn til ydeevne blev besat af Go- og C#-drivere, som viste ret tætte resultater (Go-driveren vandt i test med blokke, der omfattede op til 16 pakker, og begyndte at tabe lidt i test med mere end 16 pakker i en blok). Med 256 pakker pr. blok var topydelsen for C#-driveren cirka 28Mpps, og for Go-driverne cirka 25Mpps.
Dernæst med ret tætte resultater, efterfulgt af chauffører for
Java, OCaml og Haskell, som allerede var mærkbart bag de tidligere overvejede muligheder og ikke kunne overvinde baren på 12 millioner pakker i sekundet. Drivere baseret på Swift og JavaScript viste et endnu større efterslæb, som var i stand til at behandle streams på niveauet 5 millioner pakker i sekundet.
Driveren i Python-sproget lukkede ratingen, som kun var i stand til at behandle 0.14 millioner pakker i sekundet. Python-implementeringen blev brugt til at evaluere hastigheden af tolke uden JIT og uden specifikke optimeringer (koden blev kørt ved hjælp af CPython 3.7 og var ikke kompatibel med PyPy, men det bemærkes, at optimering af datastrukturer kunne forbedre ydeevnen med omkring 10 gange).
Derudover blev der udført latenstest, som viste effektiviteten af buffering og virkningen af skraldeopsamleren. Testen målte latenstiden efter hver pakke blev omdirigeret af driveren, sammenlignet med en kendt sendetid. Lederne var stadig C- og Rust-driverne, hvis resultater næsten ikke kunne skelnes for et flow på 1 million pakker i sekundet (ca. 20 µs). Chaufføren i Go-sproget klarede sig godt, som kun var lidt bagefter lederne og også holdt sig på niveauet 20 µs. C#-driveren viste forsinkelser på omkring 50 µs.
Drivere baseret på JavaScript og Java viste de største forsinkelser (forsinkelser på over 300 µs).
Undersøgelsen blev udført for at evaluere muligheden for at udvikle drivere og operativsystemkomponenter på sprog på et højere niveau end C. I øjeblikket er 39 ud af 40 Linux-hukommelsesproblemer driver-relaterede, så problemerne med at indføre et mere sikkert sprog og flytte drivere ud af kernen og ind i brugerrummet
I løbet af det udførte arbejde blev det konkluderet, at Rust-sproget er den bedste kandidat til chaufførudvikling. Funktionerne leveret af Rust giver dig mulighed for at slippe af med de problemer, der opstår på grund af hukommelseshåndtering på lavt niveau, til bekostning af en ydeevnestraf på omkring 2%-10% sammenlignet med C-sprog drivere. Go og C# viser sig også at være velegnede til at bygge systemkomponenter i situationer, hvor latens på under millisekunder forårsaget af skraldeopsamleren er acceptabel.
Kilde: opennet.ru