Een groep onderzoekers van Duitse universiteiten
De Rust-versie van de driver bleek qua prestaties zeer dicht bij de referentiedriver in de C-taal te liggen. Onder belasting met gelijktijdig verzenden van blokken van 32 pakketten liep de Rust-driver iets achter, maar in tests met meer dan 32 pakketten per blok was de snelheid praktisch niet anders dan die van de C-driver en demonstreerde hij prestaties op het niveau van verwerking van 28 miljoen pakketten per seconde op een server met een Xeon CPU E3-1230 v2 3.3 GHz.
De volgende niche op het gebied van prestaties werd ingenomen door stuurprogramma's in de talen Go en C#, die redelijk goede resultaten lieten zien (het Go-stuurprogramma won in tests met blokken van maximaal 16 pakketten en begon lichtjes te verliezen in tests met meer dan 16 pakketten in een blok). Met 256 pakketten per blok bedroegen de piekprestaties van het C#-stuurprogramma ongeveer 28 miljoen pakketten per seconde, en het Go-stuurprogramma ongeveer 25 miljoen pakketten per seconde.
Vervolgens, met redelijk goede resultaten, kwamen de coureurs aan de beurt
Java, OCaml en Haskell, die al merkbaar achterbleven bij de eerder overwogen opties en de balk van 12 miljoen pakketten per seconde niet konden overwinnen. Swift- en JavaScript-stuurprogramma's vertoonden een nog grotere vertraging, omdat ze streams konden verwerken met een snelheid van 5 miljoen pakketten per seconde.
De toppositie werd gecompleteerd door de Python-driver, die slechts 0.14 miljoen pakketten per seconde kon verwerken. De Python-implementatie werd gebruikt om de snelheid van de tolken te evalueren zonder JIT en zonder specifieke optimalisaties (de code werd uitgevoerd met behulp van CPython 3.7 en was niet compatibel met PyPy, maar er wordt opgemerkt dat optimalisatie van gegevensopslagstructuren de prestaties met ongeveer 10 keer zou kunnen verbeteren ).
Daarnaast zijn latentietests uitgevoerd om de effectiviteit van buffering en de impact van de garbage collector aan te tonen. Bij de tests werd de latentie gemeten nadat elk pakket door de driver was doorgestuurd, vergeleken met het exacte tijdstip waarop het werd verzonden. De leiders waren nog steeds de C- en Rust-drivers, waarvan de resultaten vrijwel niet van elkaar te onderscheiden waren voor een stroom van 1 miljoen pakketten per seconde (ongeveer 20 µs). De Go-coureur presteerde goed, stond slechts iets achter op de leiders en bleef ook op het niveau van 20 µs. De C#-driver vertoonde vertragingen van ongeveer 50 µs.
De langste vertragingen werden waargenomen door JavaScript- en Java-stuurprogramma's (latenties van meer dan 300 µs).
Het onderzoek werd uitgevoerd om de mogelijkheid te beoordelen om stuurprogramma's en besturingssysteemcomponenten te ontwikkelen in talen van een hoger niveau dan C. Momenteel zijn 39 van de 40 geheugenproblemen in Linux gerelateerd aan stuurprogramma's, dus de problemen van het gebruik van een veiligere taal en het verplaatsen van stuurprogramma's uit de kernel naar de gebruikersruimte
In de loop van het werk werd geconcludeerd dat de Rust-taal de beste kandidaat is voor de ontwikkeling van stuurprogramma's. De mogelijkheden van Rust elimineren de problemen die gepaard gaan met geheugenbeheer op laag niveau, ten koste van ongeveer 2% tot 10% prestatieverlies vergeleken met C-stuurprogramma's. Go en C# worden ook geschikt geacht voor het maken van systeemcomponenten in situaties waarin latentie van minder dan een milliseconde, veroorzaakt door garbage collection, acceptabel is.
Bron: opennet.ru