Berawirdkirina performansa ajokera torê di guhertoyên bi 10 zimanên bernamekirinê de

Komek lêkolînerên ji zanîngehên Almanyayê weşandin результаты эksperimenta, di dema ku 10 guhertoyên ajokerek standard ji bo kartên torê yên 10-gigabit Intel Ixgbe (X5xx) bi zimanên bernamesaziyê yên cihêreng hatin pêşve xistin. Ajokar li cîhê bikarhêner dimeşe û di C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript û Python de tê bicîh kirin. Dema nivîsandina kodê, bala sereke li ser bidestxistina performansa çêtirîn gengaz bû, ku taybetmendiyên her zimanî li ber çavan digire. Hemî vebijark di fonksiyonê de yek in û ji nêzikî 1000 rêzikên kodê pêk tên. Pêşveçûnên projeyê belavbûn di bin lîsansa BSD de.

Guhertoya Rust ya ajokerê derket holê ku di performansê de pir nêzîkê ajokara referansê ya bi zimanê C ye. Di bin barek bi şandina hevdemî ya blokên 32 pakêtan de, ajokarê Rust hinekî li paş ma, lê di ceribandinên ku ji her blokekê zêdetirî 32 pakêt hene, leza di pratîkê de ji ajokara C cûda nebû û performansa di asta pêvajoyê de 28 mîlyon nîşan da. pakêtên serê saniyeyê li ser serverek bi Xeon CPU E3-1230 v2 3.3 GHz.

Berawirdkirina performansa ajokera torê di guhertoyên bi 10 zimanên bernamekirinê de

Cihê din di warê performansê de ji hêla ajokarên bi zimanên Go û C# ve hate dagîr kirin, ku encamên pir nêzîk nîşan dan (şofêrê Go di ceribandinên bi blokên heya 16 pakêtan de bi ser ket, û di ceribandinên bi zêdetirî 16 pakêtan de dest pê kir hinekî winda bibe. di blokê de). Digel 256 pakêtan ji bo her blokekê, performansa lûtkeya ajokarê C# bi qasî 28 mîlyon pakêt di çirkeyê de bû, û ajokarê Go jî bi qasî 25 mîlyon pakêt di çirkeyê de bû.

Dûv re, bi encamên pir nêzîk, ajokar bûn
Java, OCaml û Haskell, ku jixwe bi rengek berbiçav li paş vebijarkên berê dihatin fikirîn û nekarîn 12 mîlyon pakêtên serê duyemîn derbas bikin. Ajokarên Swift û JavaScript derengiyek hê mezintir nîşan dan, ku karîbûn di asta 5 mîlyon pakêtan de di çirkeyê de tîrêjan pêvajoyê bikin.

Rêzeya jorîn ji hêla ajokarê Python ve hate temam kirin, ku di çirkeyê de tenê 0.14 mîlyon pakêtan pêvajoyê dike. Pêkanîna Python ji bo nirxandina leza wergêran bêyî JIT û bêyî xweşbîniyên taybetî hate bikar anîn (kod bi karanîna CPython 3.7 hate darve kirin û bi PyPy re ne lihevhatî bû, lê tê destnîşan kirin ku xweşbînkirina strukturên hilanînê daneyan dikare bi qasî 10 carî performansê baştir bike. ).

Wekî din, ceribandinên derengiyê hatin kirin da ku bandoriya tampon û bandora berhevkerê çopê nîşan bidin. Piştî ku her pakêt ji hêla ajoker ve hatî şandin derengiya ceribandinê li gorî dema tam ku hatî şandin pîva. Rêber hîn jî ajokarên C û Rust bûn, encamên wan di pratîkê de ji bo herikîna 1 mîlyon pakêtan di çirkeyê de (nêzîkî 20 μs) nediyar bûn. Ajokarê Go baş performans kir, tenê hinekî li pişt rêberan bû û di heman demê de di asta 20 μs de jî ma. Ajokarê C# bi qasî 50 μs dereng nîşan da.
Derengiya herî dirêj ji hêla JavaScript û ajokarên Java-yê ve (derengiyên ji 300 μs zêdetir) hatin xuyang kirin.

Berawirdkirina performansa ajokera torê di guhertoyên bi 10 zimanên bernamekirinê de

Lêkolîn ji bo nirxandina îhtîmala pêşxistina ajokar û hêmanên pergala xebitandinê bi zimanên asta bilindtir ji C hate kirin. Heya nuha, 39 ji 40 pirsgirêkên bîranînê yên di Linux-ê de bi ajokaran ve girêdayî ne, ji ber vê yekê pirsgirêkên karanîna zimanek ewletir û derxistina ajokaran ji kernelê û li cîhê bikarhêner têkildar bimîne û çêker jixwe di vî alî de bi awayekî aktîf diceribînin (mînak, Google ji bo OS-ê stûnek TCP pêşve xistiye Fuchsia bi zimanê Go, pargîdaniya CloudFlare afirandin bicîhkirina protokola QUIC li Rust, Apple stûna TCP-ê ya li ser cîhazên mobîl veguhezandiye cîhê bikarhêner).

Di çarçoveya xebatê de hat encamdan ku zimanê Rust ji bo pêşkeftina ajokerê berendamê herî baş e. Kapasîteyên Rust pirsgirêkên ku bi rêveberiya bîra-asta nizm ve girêdayî ne bi lêçûna kêmbûna performansê ji sedî 2% heya 10% li gorî ajokarên C ji holê radikin. Go û C# di heman demê de ji bo afirandina hêmanên pergalê di rewşên ku derengiya bin-millisecondî ya ku ji ber berhevkirina çopê tê pejirandin de maqûl têne hesibandin.

Source: opennet.ru

Add a comment