JÀmförelse av prestanda för nÀtverksdrivrutinen i versioner pÄ 10 programmeringssprÄk

En grupp forskare frÄn tyska universitet publicerade resultat experimentet, dÀr det utvecklades 10 varianter av en typisk drivrutin för 10-gigabiters nÀtverkskort frÄn Intel Ixgbe (X5xx) i olika programmeringssprÄk. Drivrutinen fungerar i anvÀndarrummet och Àr implementerad i sprÄken C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript och Python. Vid skrivandet av koden var fokus pÄ att uppnÄ maximal prestanda med hÀnsyn till varje sprÄks egenskaper. Funktionaliteten Àr i alla varianter identisk och bestÄr av cirka 1000 rader kod. Projektets resultat sprids under BSD-licensen.

Varianter av drivrutinen pÄ sprÄk som Rust visade sig vara mycket nÀra prestandan hos standarddrivrutinen i C. Vid belastning med samtidig överföring av block med 32 paket var Rust-drivrutinen nÄgot efter, men i tester med mer Àn 32 paket per block skilde den sig nÀstan inte i hastighet frÄn drivrutinen i C och visade en prestanda pÄ nivÄ med 28 miljoner paket per sekund pÄ en server med CPU Xeon E3-1230 v2 3,3 GHz.

JÀmförelse av prestanda för nÀtverksdrivrutinen i versioner pÄ 10 programmeringssprÄk

Den nÀsta nivÄn av prestanda upptogs av drivrutinerna i Go och C#, som visade ganska nÀra resultat (drivrutinen i Go vann i tester med block som inkluderade upp till 16 paket, men förlorade nÄgot i tester med mer Àn 16 paket per block). Vid 256 paket per block var den maximala prestandan hos drivrutinen i C# ungefÀr 28 miljoner paket per sekund, medan drivrutinen i Go var cirka 25 miljoner paket per sekund.

DÀrefter följde drivrutinerna med ganska nÀra resultat pÄ
Java, OCaml och Haskell, som redan visade en mĂ€rkbar nedgĂ„ng jĂ€mfört med de tidigare varianterna och inte kunde nĂ„ grĂ€nsen pĂ„ 12 miljoner paket per sekund. Ännu större nedgĂ„ng visade drivrutinerna i Swift och JavaScript, som endast kunde hantera strömmar pĂ„ nivĂ„ med 5 miljoner paket per sekund.

PÄ sista plats i rankningen kom drivrutinen pÄ Python, som endast lyckades hantera 0,14 miljoner paket per sekund. Implementeringen i Python anvÀndes för att mÀta hastigheten pÄ tolkar utan JIT och utan specifika optimeringar (koden kördes med CPython 3.7 och var inte kompatibel med PyPy, men det noteras att optimeringen av datalagringsstrukturer skulle kunna öka prestandan med cirka 10 gÄnger).

Ytterligare tester av latens har utförts, vilket visade effekten av buffring och pÄverkan av skrÀpsamlaren. Under testerna mÀttes latensen efter att varje paket hade omdirigerats av drivrutinen i jÀmförelse med den exakt kÀnda sÀndningstiden. Drivrutinerna pÄ C och Rust fortsÀtter att vara ledande, med resultat som var praktiskt taget identiska för en ström pÄ 1 miljon paket per sekund (ungefÀr 20 ”s). Drivrutinen pÄ Go presterade ocksÄ bra, med endast en liten skillnad jÀmfört med ledarna och höll sig ocksÄ pÄ nivÄn 20 ”s. Drivrutinen pÄ C# visade latenser pÄ cirka 50 ”s.
De största latenserna visades av drivrutiner pÄ JavaScript och Java (latenser över 300 ”s).

JÀmförelse av prestanda för nÀtverksdrivrutinen i versioner pÄ 10 programmeringssprÄk

Studien genomfördes för att utvÀrdera möjligheten att utveckla drivrutiner och operativsystemkomponenter pÄ högre programmeringssprÄk Àn C. För nÀrvarande stÄr 39 av 40 problem med minne i Linux för drivrutiner, vilket gör frÄgor om att anvÀnda ett sÀkrare sprÄk och flytta drivrutiner frÄn kÀrnan till anvÀndarutrymme aktuella. och Àr fortfarande aktuella. Producenter experimenterar redan aktivt i denna riktning (till exempel har Google utvecklat en TCP-stack för OS Fuchsia pÄ Go, CloudFlare skapat implementeringen av QUIC-protokollet pÄ Rust, Apple har flyttat TCP-stacken pÄ mobila enheter till anvÀndarutrymme).

Genom det utförda arbetet har slutsatsen dragits att Rust Àr den bÀsta kandidaten för utveckling av drivrutiner. Möjligheterna som erbjuds i Rust gör att man kan undanröja problem som uppstÄr pÄ grund av lÄgnivÄ-minneshantering, med en prestandaförlust pÄ cirka 2%-10% jÀmfört med drivrutiner pÄ C. Go och C# erkÀnns ocksÄ som lÀmpliga för att skapa systemkomponenter i situationer dÀr fördröjningar pÄ nivÄer av brÄkdelen av en millisekund, orsakade av skrÀpsamlaren, Àr acceptabla.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster