Un gruppu di circadori da università tedesche
A versione Rust di u driver era assai vicinu in u rendiment à u driver C di riferimentu. Cù una carica cù un solu mandatu di blocchi di pacchetti 32, u driver Rust hà ritardatu un pocu, ma in i testi cù più di 32 pacchetti per bloccu, praticamenti ùn hà micca diffirenti in a velocità di u cunduttore C è hà dimustratu u rendiment à u livellu di trasfurmazioni. 28 milioni di pacchetti per seconda in un servitore cù una CPU Xeon E3-1230 v2 3.3 GHz.
U prossimu nichu in termini di prestazioni hè stata occupata da i piloti Go è C#, chì anu dimustratu risultati abbastanza vicini (u pilotu Go hà vintu in teste cù blocchi chì includenu finu à 16 pacchetti, è hà cuminciatu à perde un pocu in teste cù più di 16 pacchetti in un bloccu). Cù 256 pacchetti per bloccu, a prestazione massima per u driver C# era di circa 28Mpps, è per i driver Go, circa 25Mpps.
Dopu, cù risultati abbastanza vicinu, seguitu da i cunduttori per
Java, OCaml è Haskell, chì eranu digià notevolmente daretu à l'opzioni prima cunsiderate è ùn pudianu superà a barra di 12 milioni di pacchetti per seconda. I cunduttori basati in Swift è JavaScript anu dimustratu un backlog ancu più grande, chì anu pussutu processà flussi à u livellu di 5 milioni di pacchetti per seconda.
U cunduttore in a lingua Python hà chjusu a qualificazione, chì era capaci di processà solu 0.14 milioni di pacchetti per seconda. L'implementazione di Python hè stata aduprata per evaluà a rapidità di l'interpreti senza JIT è senza ottimisazioni specifiche (u codice hè stata eseguita cù CPython 3.7 è ùn era micca cumpatibile cù PyPy, ma hè nutatu chì l'ottimisazione di e strutture di dati puderia migliurà u rendiment per circa 10 volte).
Inoltre, i testi di latenza sò stati realizati, chì anu dimustratu l'efficacità di u buffering è l'impattu di u cullettore di basura. A prova hà misuratu a latenza dopu chì ogni pacchettu hè statu reindirizzatu da u cunduttore, cumparatu cù un tempu di mandatu cunnisciutu. I capi eranu sempre i driver C è Rust, chì i risultati eranu quasi indistinguibili per un flussu di 1 milione di pacchetti per seconda (circa 20 µs). U driver in a lingua Go hà fattu bè, chì era solu un pocu daretu à i capi è ancu mantene à u livellu di 20 µs. U driver C# mostrava ritardi di circa 50 µs.
I cunduttori basati in JavaScript è Java anu dimustratu i più grandi ritardi (ritardi più di 300 µs).
U studiu hè statu realizatu per valutà a pussibilità di sviluppà driver è cumpunenti di u sistema operatore in lingue di un livellu più altu ch'è C. Attualmente, 39 di 40 prublemi di memoria di Linux sò ligati à i driver, cusì i prublemi di aduttà una lingua più sicura è di trasfurmà i drivers fora di u kernel è in u spaziu di l'utilizatori.
In u cursu di u travagliu realizatu, hè statu cunclusu chì a lingua Rust hè u megliu candidatu per u sviluppu di u driver. I funziunalità furnuti da Rust permettenu di sbarazzà di i prublemi chì si sviluppanu per a gestione di a memoria di pocu livellu, à u costu di una penalità di rendiment di circa 2% -10% paragunatu à i cunduttori in lingua C. Go è C # sò ancu trovati adatti per creà cumpunenti di u sistema in situazioni induve i ritardi sottu-millisecondi causati da u cullettivu di basura sò accettabili.
Source: opennet.ru