10 programazio-lengoaietako bertsioetan sareko kontrolatzailearen errendimenduaren konparazioa

Alemaniako unibertsitateetako ikertzaile talde bat argitaratuko Aurkikuntza esperimentua, zeinetan 10 gigabit Intel Ixgbe (X10xx) sare-txartelen kontrolatzaile estandar baten 5 bertsio garatu ziren programazio hizkuntza ezberdinetan. Gidaria erabiltzailearen espazioan exekutatzen da eta C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript eta Python-en inplementatzen da. Kodea idazterakoan, ardatz nagusia ahalik eta errendimendurik onena lortzea izan zen, hizkuntza bakoitzaren ezaugarriak kontuan hartuta. Aukera guztiak funtzionaltasun berdinak dira eta gutxi gorabehera 1000 kode lerroz osatuta daude. Proiektuaren garapenak barreiatu BSD lizentziapean.

Gidariaren Rust bertsioa C hizkuntzan erreferentziako kontrolatzailearen errendimenduan oso hurbila izan zen. 32 pakete-blokeak aldi berean bidaltzen zituen karga baten azpian, Rust kontrolatzailea apur bat atzeratuta zegoen, baina bloke bakoitzeko 32 pakete baino gehiagoko probetan, abiadura ez zen ia desberdina C kontrolatzailearen aldean eta 28 milioi prozesatzeko mailan errendimendua erakutsi zuen. segundoko paketeak Xeon CPU E3-1230 v2 3.3 GHz duen zerbitzari batean.

10 programazio-lengoaietako bertsioetan sareko kontrolatzailearen errendimenduaren konparazioa

Errendimenduaren hurrengo nitxoa Go eta C# lengoaietako gidariek hartu zuten, eta emaitza nahiko hurbilak erakutsi zituzten (Go gidariak irabazi zuen 16 pakete arteko blokeekin egindako probetan, eta 16 pakete baino gehiagoko probetan apur bat galtzen hasi zen. bloke batean). Bloke bakoitzeko 256 paketerekin, C# kontrolatzailearen errendimendu gorena 28 milioi pakete segundoko izan da gutxi gorabehera, eta Go kontrolatzaileak segundoko 25 milioi pakete inguru.

Jarraian, emaitza nahiko hurbilekin, gidariak izan ziren
Java, OCaml eta Haskell, lehen kontuan hartutako aukeren atzean nabarmen geratzen zirenak eta ezin izan zituzten bigarren barrako 12 milioi pakete gainditu. Swift eta JavaScript kontrolatzaileek are atzerapen handiagoa erakutsi zuten, segundoko 5 milioi pakete mailan korronteak prozesatu ahal izateko.

Goiko sailkapena Python kontrolatzaileak osatu zuen, segundoko 0.14 milioi pakete soilik prozesatu ahal izan baitzituen. Python inplementazioa JIT gabe eta optimizazio zehatzik gabe interpreteen abiadura ebaluatzeko erabili zen (kodea CPython 3.7 erabiliz exekutatu zen eta ez zen PyPy-rekin bateragarria, baina datuen biltegiratze egituren optimizazioak errendimendua 10 aldiz inguru hobetu zezakeela nabarmentzen da. ).

Gainera, latentzia probak egin ziren, buffering-aren eraginkortasuna eta zabor-biltzailearen eragina erakusteko. Gidariak pakete bakoitza bidali ondoren latentzia neurtu zuen probak bidalitako denbora zehatzarekin alderatuta. Liderrak C eta Rust gidariak ziren oraindik, eta horien emaitzak ia ez ziren bereizten segundoko milioi 1 pakete (20 Β΅s gutxi gorabehera) fluxurako. Go gidaria ondo aritu zen, liderrengandik apur bat atzean geratu zen eta gainera 20 Β΅s-ko mailan mantendu zen. C# kontrolatzaileak gutxi gorabehera 50 Β΅s-ko atzerapenak erakutsi zituen.
Atzerapen luzeenak JavaScript eta Java kontrolatzaileek erakutsi zituzten (300 Β΅s baino gehiagoko latentzia).

10 programazio-lengoaietako bertsioetan sareko kontrolatzailearen errendimenduaren konparazioa

Azterketa C baino goi-mailako lengoaietan kontrolatzaileak eta sistema eragilearen osagaiak garatzeko aukera ebaluatzeko egin da. Gaur egun, Linux-en 39 memoria-arazoetatik 40 gidariekin lotuta daude, beraz, hizkuntza seguruagoa erabiltzearen eta kontrolatzaileak nukleotik kanpo eta erabiltzaileen espaziora eramatearen arazoak. garrantzitsua izaten jarraitzen du eta fabrikatzaileak modu aktiboan esperimentatzen ari dira jada norabide horretan (adibidez, Google-k TCP pila bat garatu du sistema eragilerako Fuksia Go hizkuntzan, CloudFlare konpainia sortu Rust-en QUIC protokoloaren ezarpena, Apple-k gailu mugikorretako TCP pila erabiltzailearen espaziora eraman du).

Lanean zehar, Rust hizkuntza gidariaren garapenerako hautagairik onena dela ondorioztatu zen. Rust-en gaitasunek maila baxuko memoriaren kudeaketarekin lotutako arazoak ezabatzen dituzte, gutxi gorabehera % 2 eta % 10eko errendimendu galeraren kostuarekin C kontrolatzaileekin alderatuta. Go eta C# sistemaren osagaiak sortzeko ere egokiak dira zabor bilketak eragindako milisegundo azpiko latentzia onargarria den egoeretan.

Iturria: opennet.ru

Gehitu iruzkin berria