Saksamaa ülikoolide uurimisrühm tulemused , mille raames töötati välja 10 esitaja versiooni 10-gigabitti Intel Ixgbe (X5xx) võrgukaartide jaoks erinevates programmeerimiskeeltes. Esitaja töötab kasutajaruumi ja on rakendatud keeltes C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript ja Python. Koodi kirjutamisel pöörati tähelepanu maksimaalse jõudluse saavutamisele, arvestades iga keele eripära. Funktsionaalsuselt on kõik versioonid identsed ja koosnevad umbes 1000 koodireast. Projekti saavutused BSD litsentsi all.
Rust keeles kirjutatud esitaja osutus hõre kui võrdlusena C keeles kirjutatud esitaja. 32 paketi korraga saatmise koormuse puhul jäi Rust-esitaja veidi maha, kuid teste, kus oli rohkem kui 32 paketti, ei erinenud kiirus peaaegu C keeles kirjutatud esitaja omast ja demonstreeris jõudlust 28 miljonit paketti sekundis Xeon E3-1230 v2 3,3 GHz protsessoriga serveris.
Järgneva taseme saavutasid Go ja C# keeles kirjutatud esitajad, mis näitasid piisavalt sarnaseid tulemusi (Go esitaja võitis testides, kus plokid sisaldasid kuni 16 paketti, ja hakkas veidi kaotama testides, kus oligi rohkem kui 16 paketti). 256 paketti plokis saavutas C# esitaja tipptulemuse umbes 28 miljonit paketti sekundis, samas kui Go esitaja oli umbes 25 miljonit paketti sekundis.
Seejärel järgnesid üsna lähedaste tulemustega esitajad
Java, OCaml ja Haskell, kes juba märgatavalt jäid eelnevalt arutatud versioonidest maha ning ei saanud ületada 12 miljoni paketi piiri sekundis. Veelgi rohkem maha jäi Swift ja JavaScript keeles kirjutatud esitaja, mis suudsid töödelda vooge umbes 5 miljoni paketi tasemel sekundis.
Reitingu lõpetas Python keeles kirjutatud esitaja, mis suutis töödelda vaid 0,14 miljonit paketti sekundis. Python-i rakendust kasutati tõlgendajate töö kiirusel hindamise hindamiseks ilma JIT-i ja spetsiifiliste optimeeringuteta (kood käitis CPython 3.7 ja ei olnud ühilduv PyP-yga, kuid märgitakse, et andmestruktuuride optimeerimine võiks tõsta tõhusust umbes 10 korda).
Lisaks viidi läbi viivituse testid, mis näitasid vahemälu efektiivsust ja prügikogumise mõju. Testimisel mõõdeti viivitust pärast iga paketi ülekandmist draiveri poolt võrreldes täpselt teadaoleva saatmisajaga. Edetabeli tipus olid jätkuvalt C ja Rust keeles kirjutatud draiverid, mille tulemused olid peaaegu eristamatud miljoni paketti sekundis (umbes 20 µs). Väga hästi esines ka Go keeles kirjutatud draiver, mis jäi liidritest vaid veidi maha ja hoidis samuti 20 µs taset. C# draiver näitas viivitusi umbes 50 µs.
Suurimad viivitused näitasid JavaScripti ja Java draiverid (viivitused üle 300 µs).
Uuring tehti eesmärgiga hinnata kõrgema taseme keeles, nagu C, draiverite ja operatsioonisüsteemi komponentide arendamise võimalusi. Hetkel moodustavad 39 40 probleemist, mis on seotud mäluga Linuxis, draiverid, seetõttu on rohkem turvalise keele kasutamise ja draiverite tuumast kasutajaruumi viimise küsimused ja tootjad katsetavad juba aktiivselt selle suunaga (näiteks Google arendas välja TCP-steki operatsioonisüsteemile Go keeles, CloudFlare rakenduse protokolli QUIC Rust keeles, Apple tõi TCP-steki mobiilseadmetes kasutajaruumi).
Tehtud töö jooksul jõuti järeldusele, et Rust keel on parim kandidaat draiverite arendamiseks. Rusti pakutavad võimalused võimaldavad vabaneda probleemidest, mis tekivad madala taseme mälu haldamise tõttu, samas kui sooritusvõime langus on ligikaudu 2%-10% võrreldes C keele draiveritega. Go ja C# keeled on samuti tunnustatud sobivateks süsteemi komponentide loomisel, olukordades, kus viivitused mõne millisekundi tasemel, mis on põhjustatud prügikogu kasutamisest, on vastuvõetavad.
Allikas: opennet.ru
