Samanburður á frammistöðu netbílstjóra í útgáfum á 10 forritunarmálum

Hópur vísindamanna frá þýskum háskólum опубликовала результаты tilraun, þar sem 10 útgáfur af venjulegum reklum fyrir 10 gígabita Intel Ixgbe (X5xx) netkort voru þróaðar á mismunandi forritunarmálum. Ökumaðurinn keyrir í notendarými og er útfærður í C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript og Python. Við ritun kóða var aðaláherslan lögð á að ná sem bestum árangri með hliðsjón af eiginleikum hvers tungumáls. Allir valkostir eru eins í virkni og samanstanda af um það bil 1000 línum af kóða. Verkefnaþróun dreifing undir BSD leyfinu.

Rust útgáfa ökumanns reyndist vera mjög nálægt viðmiðunarökumanninum á C tungumálinu í frammistöðu. Undir álagi með samtímis sendingu kubba með 32 pökkum var Rust ökumaðurinn aðeins á eftir, en í prófunum með meira en 32 pökkum á kubba var hraðinn nánast ekkert frábrugðinn C ökumanni og sýndi frammistöðu á því stigi að vinna 28 milljónir. pakka á sekúndu á netþjóni með Xeon CPU E3-1230 v2 3.3 GHz.

Samanburður á frammistöðu netbílstjóra í útgáfum á 10 forritunarmálum

Næsta sess hvað varðar frammistöðu var upptekinn af ökumönnum á Go og C# tungumálunum, sem sýndu nokkuð góðar niðurstöður (Go bílstjórinn vann í prófum með allt að 16 pakka blokkir og fór að tapa aðeins í prófum með meira en 16 pakka í blokk). Með 256 pakka í blokk var hámarksafköst C# ökumanns um það bil 28 milljónir pakka á sekúndu og Go ökumanns var um það bil 25 milljónir pakka á sekúndu.

Næst, með nokkuð nánum árangri, voru ökumenn fyrir
Java, OCaml og Haskell, sem voru þegar áberandi á eftir fyrri valmöguleikum og gátu ekki sigrast á 12 milljón pakka á sekúndu bar. Swift og JavaScript reklar sýndu enn meiri töf, að geta unnið strauma á stigi 5 milljón pakka á sekúndu.

Efstu röðun var lokið af Python ökumanni, sem gat aðeins unnið 0.14 milljónir pakka á sekúndu. Python útfærslan var notuð til að meta hraða túlkanna án JIT og án sérstakra hagræðinga (kóðinn var keyrður með CPython 3.7 og var ekki samhæfður við PyPy, en tekið er fram að fínstilling á gagnageymslukerfi gæti bætt afköst um það bil 10 sinnum ).

Að auki voru leyfðarpróf gerðar til að sýna fram á árangur stuðpúðunar og áhrif sorphirðu. Prófunin mældi leynd eftir að hver pakki var sendur af ökumanni miðað við nákvæmlega tímann sem hann var sendur. Leiðtogarnir voru enn C og Rust ökumennirnir, en niðurstöður þeirra voru nánast óaðgreinanlegar fyrir flæði 1 milljón pakka á sekúndu (u.þ.b. 20 µs). Go ökumaðurinn stóð sig vel, var aðeins örlítið á eftir leiðtogunum og var einnig áfram á stigi 20 µs. C# bílstjórinn sýndi tafir upp á um það bil 50 µs.
Lengstu tafirnar voru sýndar af JavaScript og Java rekla (töf meira en 300 µs).

Samanburður á frammistöðu netbílstjóra í útgáfum á 10 forritunarmálum

Rannsóknin var gerð til að meta möguleikann á að þróa rekla og stýrikerfishluta á æðra tungumálum en C. Eins og er, tengjast 39 af 40 minnisvandamálum í Linux reklum, svo vandamálin við að nota öruggara tungumál og færa rekla út úr kjarnanum og inn í notendarýmið. áfram viðeigandi og framleiðendur eru nú þegar virkir að gera tilraunir í þessa átt (til dæmis hefur Google þróað TCP stafla fyrir stýrikerfið Fuchsia á Go tungumáli, CloudFlare fyrirtæki búin til innleiðingu á QUIC samskiptareglunum í Rust, hefur Apple flutt TCP stafla á farsímum í notendarými).

Í vinnunni var komist að þeirri niðurstöðu að Rust-tungumálið væri besti kosturinn fyrir þróun ökumanns. Hæfileiki Rust útrýma vandamálunum sem tengjast minnisstjórnun á lágu stigi á kostnað sem nemur um það bil 2% til 10% afköstum samanborið við C ökumenn. Go og C# eru einnig taldir hentugir til að búa til kerfishluta í aðstæðum þar sem leynd undir millisekúndna af völdum sorpsöfnunar er ásættanleg.

Heimild: opennet.ru

Bæta við athugasemd