Pagtandi sa performance sa driver sa network sa 10 ka programming language

Usa ka grupo sa mga tigdukiduki gikan sa mga unibersidad sa Aleman gipatik Resulta eksperimento, diin ang 10 ka bersyon sa usa ka standard driver alang sa 10-gigabit Intel Ixgbe (X5xx) network cards naugmad sa lain-laing programming language. Ang drayber midagan sa user space ug gipatuman sa C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript ug Python. Sa pagsulat sa code, ang nag-unang tumong mao ang pagkab-ot sa pinakamaayo nga pasundayag, nga gikonsiderar ang mga kinaiya sa matag pinulongan. Ang tanan nga mga kapilian managsama sa pagpaandar ug naglangkob sa gibana-bana nga 1000 ka linya sa code. Mga kalamboan sa proyekto pagkaylap ubos sa lisensya sa BSD.

Ang Rust nga bersyon sa drayber nahimo nga duol kaayo sa pasundayag sa reference driver sa C nga pinulongan. Ubos sa usa ka load nga adunay dungan nga pagpadala sa mga bloke sa 32 nga mga pakete, ang Rust nga drayber gamay sa likod, apan sa mga pagsulay nga adunay labaw pa sa 32 nga mga pakete matag bloke, ang katulin halos walay kalainan sa C driver ug nagpakita sa performance sa lebel sa pagproseso sa 28 milyon. mga pakete matag segundo sa usa ka server nga adunay Xeon CPU E3-1230 v2 3.3 GHz.

Pagtandi sa performance sa driver sa network sa 10 ka programming language

Ang sunod nga niche sa mga termino sa pasundayag gi-okupar sa mga drayber sa Go ug C # nga mga pinulongan, nga nagpakita nga medyo duol nga mga resulta (ang drayber sa Go nakadaog sa mga pagsulay nga adunay mga bloke nga hangtod sa 16 ka pakete, ug nagsugod sa pagkawala gamay sa mga pagsulay nga adunay labaw pa sa 16 ka pakete. sa usa ka bloke). Uban sa 256 ka pakete matag bloke, ang kinatas-ang pasundayag sa drayber sa C# maoy gibana-bana nga 28 ka milyon nga pakete kada segundo, ug ang drayber sa Go maoy gibana-bana nga 25 ka milyon ka pakete kada segundo.

Sunod, uban sa medyo duol nga mga resulta, mao ang mga drayber alang sa
Ang Java, OCaml ug Haskell, nga namatikdan na nga naatras sa gikonsiderar kaniadto nga mga kapilian ug dili makabuntog sa 12 milyon nga pakete matag segundo nga bar. Ang mga drayber sa Swift ug JavaScript nagpakita og mas dako nga lag, nga makahimo sa pagproseso sa mga sapa sa lebel nga 5 milyon nga mga pakete matag segundo.

Ang pinakataas nga ranggo nahuman sa drayber sa Python, nga nakahimo sa pagproseso lamang sa 0.14 milyon nga mga pakete matag segundo. Ang pagpatuman sa Python gigamit sa pagtimbang-timbang sa katulin sa mga tighubad nga walay JIT ug walay espesipikong mga pag-optimize (ang code gipatuman gamit ang CPython 3.7 ug dili compatible sa PyPy, apan namatikdan nga ang pag-optimize sa mga istruktura sa pagtipig sa datos makapauswag sa performance sa mga 10 ka beses ).

Dugang pa, ang latency nga mga pagsulay gihimo aron ipakita ang pagka-epektibo sa buffering ug ang epekto sa tigkolekta sa basura. Gisukod sa pagsulay ang latency pagkahuman sa matag pakete nga gipasa sa drayber kung itandi sa eksaktong oras nga kini gipadala. Ang mga lider mao gihapon ang mga drayber sa C ug Rust, ang mga resulta niini halos dili mailhan alang sa dagan nga 1 milyon nga pakete matag segundo (gibana-bana nga 20 Β΅s). Maayo ang performance sa drayber sa Go, nga gamay ra sa luyo sa mga lider ug nagpabilin usab sa lebel nga 20 Β΅s. Ang drayber sa C# nagpakita ug mga paglangan sa gibana-bana nga 50 Β΅s.
Ang pinakataas nga mga paglangan gipakita sa mga drayber sa JavaScript ug Java (mga latency nga labaw sa 300 Β΅s).

Pagtandi sa performance sa driver sa network sa 10 ka programming language

Ang pagtuon gihimo aron masusi ang posibilidad sa pagpalambo sa mga drayber ug mga sangkap sa operating system sa mas taas nga lebel nga mga pinulongan kaysa C. Sa pagkakaron, ang 39 sa 40 ka mga problema sa memorya sa Linux may kalabutan sa mga drayber, mao nga ang mga isyu sa paggamit sa mas luwas nga pinulongan ug pagbalhin sa mga drayber gikan sa kernel ug ngadto sa user space. magpabilin nga may kalabutan ug ang mga tiggama aktibo na nga nag-eksperimento niini nga direksyon (pananglitan, ang Google nakahimo og TCP stack para sa OS Fuchsia sa Go nga pinulongan, CloudFlare nga kompanya gibuhat pagpatuman sa QUIC protocol sa Rust, gibalhin sa Apple ang TCP stack sa mga mobile device ngadto sa user space).

Sa dagan sa trabaho, nakahinapos nga ang Rust nga pinulongan mao ang pinakamaayo nga kandidato alang sa pagpalambo sa drayber. Ang mga kapabilidad sa Rust nagwagtang sa mga problema nga nalangkit sa ubos nga lebel sa pagdumala sa panumduman sa kantidad nga gibana-bana nga 2% ngadto sa 10% nga pagkawala sa performance kumpara sa mga drayber sa C. Ang Go ug C# giisip usab nga angay alang sa paghimo sa mga sangkap sa sistema sa mga sitwasyon diin ang sub-millisecond latency tungod sa pagkolekta sa basura madawat.

Source: opennet.ru

Idugang sa usa ka comment