Pētnieku grupa no Vācijas universitātēm
Draivera Rust versija pēc veiktspējas izrādījās ļoti tuva atsauces draiverim C valodā. Slodzes laikā ar vienlaicīgu 32 pakešu bloku nosūtīšanu Rust draiveris nedaudz atpalika, taču testos ar vairāk nekā 32 paketēm blokā ātrums praktiski neatšķīrās no C draivera un demonstrēja veiktspēju 28 miljonu apstrādes līmenī. paketes sekundē serverī ar Xeon CPU E3-1230 v2 3.3 GHz.
Nākamo nišu veiktspējas ziņā ieņēma draiveri Go un C# valodās, kas uzrādīja diezgan tuvus rezultātus (Go draiveris uzvarēja testos ar blokiem līdz 16 paketēm un sāka nedaudz zaudēt testos ar vairāk nekā 16 paketēm blokā). Ar 256 paketēm blokā C# draivera maksimālā veiktspēja bija aptuveni 28 miljoni pakešu sekundē, un Go draivera darbība bija aptuveni 25 miljoni pakešu sekundē.
Tālāk ar diezgan ciešiem rezultātiem bija braucēji
Java, OCaml un Haskell, kas jau manāmi atpalika no iepriekš apsvērtajām iespējām un nespēja pārvarēt 12 miljonu pakešu sekundē joslu. Swift un JavaScript draiveri uzrādīja vēl lielāku nobīdi, spējot apstrādāt straumes 5 miljonu pakešu sekundē.
Augstāko vietu pabeidza Python draiveris, kas spēja apstrādāt tikai 0.14 miljonus pakešu sekundē. Python implementācija tika izmantota, lai novērtētu tulku ātrumu bez JIT un bez īpašām optimizācijām (kods tika izpildīts, izmantojot CPython 3.7 un nebija savietojams ar PyPy, taču jāatzīmē, ka datu uzglabāšanas struktūru optimizācija varētu uzlabot veiktspēju aptuveni 10 reizes ).
Turklāt tika veikti latentuma testi, lai parādītu buferizācijas efektivitāti un atkritumu savācēja ietekmi. Pārbaudē tika mērīts latentums pēc tam, kad draiveris bija pārsūtījis katru paketi, salīdzinot ar precīzu tās nosūtīšanas laiku. Līderi joprojām bija C un Rust draiveri, kuru rezultāti praktiski nebija atšķirami plūsmai 1 miljons pakešu sekundē (aptuveni 20 µs). Go braucējs uzstājās labi, tikai nedaudz atpaliekot no līderiem un arī paliekot 20 µs līmenī. C# draiveris uzrādīja aptuveni 50 µs aizkavi.
Visilgāko aizkavi uzrādīja JavaScript un Java draiveri (latencie vairāk nekā 300 µs).
Pētījums tika veikts, lai novērtētu iespēju izstrādāt draiverus un operētājsistēmas komponentus augstāka līmeņa valodās nekā C. Pašlaik 39 no 40 Linux atmiņas problēmām ir saistītas ar draiveriem, tāpēc problēmas ar drošākas valodas izmantošanu un draiveru pārvietošanu no kodola un lietotāja vietu.
Darba gaitā tika secināts, ka Rust valoda ir labākā kandidāte autovadītāju attīstībai. Rust iespējas novērš problēmas, kas saistītas ar zema līmeņa atmiņas pārvaldību, par aptuveni 2% līdz 10% veiktspējas zudumu salīdzinājumā ar C draiveriem. Go un C# tiek uzskatīti par piemērotiem arī sistēmas komponentu izveidei situācijās, kad ir pieļaujams atkritumu savākšanas izraisītais latentums, kas ir mazāks par milisekundēm.
Avots: opennet.ru