Német egyetemek kutatóinak csoportja
Az illesztőprogram Rust verziója teljesítményében nagyon közel áll a C nyelvű referencia-illesztőprogramhoz. A 32 csomag blokkjainak egyidejű küldésével járó terhelés alatt a Rust illesztőprogram kissé lemaradt, de a blokkonként több mint 32 csomagot tartalmazó tesztekben a sebesség gyakorlatilag nem különbözött a C illesztőprogramtól, és 28 milliós feldolgozási szinten mutatott teljesítményt. csomagok másodpercenként Xeon CPU E3-1230 v2 3.3 GHz-es szerveren.
A teljesítmény tekintetében a következő rést a Go és C# nyelvű illesztőprogramok foglalták el, amelyek meglehetősen közeli eredményeket mutattak (a Go illesztőprogram nyert a legfeljebb 16 csomagos blokkokkal végzett teszteken, és enyhén veszíteni kezdett a több mint 16 csomagot tartalmazó teszteken blokkban). A blokkonkénti 256 csomaggal a C# illesztőprogram csúcsteljesítménye hozzávetőlegesen 28 millió csomag/másodperc volt, a Go illesztőprogramé pedig hozzávetőleg 25 millió csomag/másodperc volt.
Következő, meglehetősen szoros eredménnyel, voltak a vezetők
Java, OCaml és Haskell, amelyek már érezhetően lemaradtak a korábban mérlegelt opcióktól, és nem tudták leküzdeni a másodpercenkénti 12 milliós csomagot. A Swift és a JavaScript illesztőprogramok még nagyobb késést mutattak, mivel másodpercenként 5 millió csomagot tudtak feldolgozni.
A legfelső helyezést a Python driver tette fel, amely mindössze 0.14 millió csomagot tudott feldolgozni másodpercenként. A Python implementációt használták az interpretátorok sebességének kiértékelésére JIT nélkül és speciális optimalizálás nélkül (a kód CPython 3.7-el futott, és nem volt kompatibilis a PyPy-vel, de meg kell jegyezni, hogy az adattároló struktúrák optimalizálása körülbelül 10-szeresére növelheti a teljesítményt ).
Ezenkívül látencia teszteket is végeztek a pufferelés hatékonyságának és a szemétgyűjtő hatásának kimutatására. A tesztelés során az egyes csomagok illesztőprogram általi továbbítása utáni késleltetést mérték, összehasonlítva a küldés pontos idejével. A vezetők továbbra is a C és a Rust meghajtók voltak, amelyek eredménye gyakorlatilag megkülönböztethetetlen volt a másodpercenkénti 1 millió csomag (körülbelül 20 µs) áramlásánál. A Go versenyzője jól teljesített, csak kismértékben maradt le a vezetőktől, és a 20 µs-os szinten is maradt. A C# illesztőprogram körülbelül 50 µs-os késést mutatott.
A leghosszabb késéseket a JavaScript és a Java illesztőprogramok mutatták (a késések több mint 300 µs).
A tanulmányt azért végezték, hogy felmérjék az illesztőprogramok és operációs rendszer-összetevők fejlesztésének lehetőségét a C-nél magasabb szintű nyelveken. Jelenleg a Linuxban a 39 memóriaprobléma közül 40 az illesztőprogramokhoz kapcsolódik, így a biztonságosabb nyelv használatának és az illesztőprogramok kernelből a felhasználói térbe való áthelyezésének problémái.
A munka során arra a következtetésre jutottak, hogy a Rust nyelv a legjobb jelölt a járművezetők fejlesztésére. A Rust képességei kiküszöbölik az alacsony szintű memóriakezeléssel kapcsolatos problémákat a C-illesztőprogramokhoz képest körülbelül 2–10%-os teljesítményveszteség árán. A Go és a C# alkalmasnak tekinthető rendszerelemek létrehozására is olyan helyzetekben, ahol a szemétgyűjtés okozta ezredmásodperc alatti késleltetés elfogadható.
Forrás: opennet.ru