Ulinganisho wa utendaji wa dereva wa mtandao katika matoleo katika lugha 10 za programu

Kundi la watafiti kutoka vyuo vikuu vya Ujerumani ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° matokeo majaribio, wakati ambapo matoleo 10 ya kiendeshi cha kawaida cha kadi za mtandao za Intel Ixgbe (X10xx) 5-gigabit zilitengenezwa katika lugha tofauti za programu. Dereva huendesha katika nafasi ya mtumiaji na inatekelezwa katika C, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript na Python. Wakati wa kuandika msimbo, lengo kuu lilikuwa kufikia utendakazi bora zaidi, kwa kuzingatia sifa za kila lugha. Chaguzi zote zinafanana katika utendakazi na zinajumuisha takriban mistari 1000 ya msimbo. Maendeleo ya mradi kuenea chini ya leseni ya BSD.

Toleo la Rust la dereva liligeuka kuwa karibu sana katika utendaji wa dereva wa kumbukumbu katika lugha ya C. Chini ya mzigo na utumaji wa wakati huo huo wa vizuizi vya pakiti 32, dereva wa Rust alikuwa nyuma kidogo, lakini katika majaribio na pakiti zaidi ya 32 kwa kila block, kasi hiyo haikuwa tofauti na dereva wa C na ilionyesha utendaji katika kiwango cha usindikaji milioni 28. pakiti kwa sekunde kwenye seva iliyo na Xeon CPU E3-1230 v2 3.3 GHz.

Ulinganisho wa utendaji wa dereva wa mtandao katika matoleo katika lugha 10 za programu

Niche iliyofuata katika suala la utendaji ilichukuliwa na madereva katika lugha za Go na C #, ambayo ilionyesha matokeo ya karibu (dereva wa Go alishinda katika majaribio na vizuizi vya hadi pakiti 16, na alianza kupoteza kidogo katika majaribio na pakiti zaidi ya 16. katika block). Ikiwa na pakiti 256 kwa kila block, utendakazi wa kilele wa kiendesha C# ulikuwa takriban pakiti milioni 28 kwa sekunde, na kiendeshi cha Go kilikuwa takriban pakiti milioni 25 kwa sekunde.

Ifuatayo, kwa matokeo ya karibu sana, walikuwa madereva kwa
Java, OCaml na Haskell, ambazo tayari zilikuwa nyuma ya chaguzi zilizozingatiwa hapo awali na hazikuweza kushinda pakiti milioni 12 kwa kila baa ya pili. Viendeshaji vya Swift na JavaScript vilionyesha kuchelewa zaidi, kuwa na uwezo wa kuchakata mitiririko kwa kiwango cha pakiti milioni 5 kwa sekunde.

Kiwango cha juu kilikamilishwa na dereva wa Python, ambaye aliweza kusindika pakiti milioni 0.14 tu kwa sekunde. Utekelezaji wa Python ulitumiwa kutathmini kasi ya wakalimani bila JIT na bila uboreshaji maalum (msimbo ulitekelezwa kwa kutumia CPython 3.7 na haukuendana na PyPy, lakini inabainika kuwa uboreshaji wa miundo ya kuhifadhi data inaweza kuboresha utendaji kwa takriban mara 10. )

Zaidi ya hayo, majaribio ya muda wa kusubiri yalifanywa ili kuonyesha ufanisi wa kuhifadhi na athari za mtoaji wa takataka. Jaribio lilipima muda wa kusubiri baada ya kila pakiti kusambazwa na dereva ikilinganishwa na muda halisi ilipotumwa. Viongozi walikuwa bado madereva wa C na Rust, matokeo ambayo hayakuweza kutofautishwa kwa mtiririko wa pakiti milioni 1 kwa sekunde (takriban 20 Β΅s). Dereva wa Go alifanya vizuri, akiwa nyuma kidogo tu ya viongozi na pia kubaki katika kiwango cha 20 Β΅s. Dereva wa C# alionyesha ucheleweshaji wa takriban 50 Β΅s.
Ucheleweshaji mrefu zaidi ulionyeshwa na viendeshi vya JavaScript na Java (muda wa kusubiri wa zaidi ya 300 Β΅s).

Ulinganisho wa utendaji wa dereva wa mtandao katika matoleo katika lugha 10 za programu

Utafiti ulifanyika ili kutathmini uwezekano wa kuendeleza viendeshaji na vipengele vya mfumo wa uendeshaji katika lugha za kiwango cha juu kuliko C. Hivi sasa, shida 39 kati ya 40 za kumbukumbu katika Linux zinahusiana na viendeshaji, kwa hivyo maswala ya kutumia lugha salama zaidi na kusonga viendesha nje ya kernel na kuingia kwenye nafasi ya mtumiaji. kubaki muhimu na watengenezaji tayari wanajaribu kikamilifu katika mwelekeo huu (kwa mfano, Google imeunda safu ya TCP kwa OS Fuchsia katika lugha ya Go, kampuni ya CloudFlare kuundwa utekelezaji wa itifaki ya QUIC huko Rust, Apple imehamisha mkusanyiko wa TCP kwenye vifaa vya rununu kwenye nafasi ya mtumiaji).

Wakati wa kazi hiyo, ilihitimishwa kuwa lugha ya Rust ndiyo mgombea bora wa maendeleo ya madereva. Uwezo wa kutu huondoa matatizo yanayohusiana na usimamizi wa kumbukumbu wa kiwango cha chini kwa gharama ya takriban 2% hadi 10% hasara ya utendaji ikilinganishwa na viendeshaji C. Go na C# pia huchukuliwa kuwa zinafaa kwa kuunda vipengee vya mfumo katika hali ambapo muda wa kusubiri wa milisekunde ndogo unaosababishwa na ukusanyaji wa takataka unakubalika.

Chanzo: opennet.ru

Kuongeza maoni