Babandingan kinerja supir jaringan dina versi dina 10 basa program

Sakelompok peneliti ti paguron luhur Jerman diterbitkeun hasil percobaan, salila 10 versi supir standar pikeun kartu jaringan 10-gigabit Intel Ixgbe (X5xx) dikembangkeun dina basa programming béda. Supir dijalankeun dina rohangan pangguna sareng dilaksanakeun dina C, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript sareng Python. Nalika nulis kode, fokus utama nyaéta pikeun ngahontal prestasi anu pangsaéna, kalayan merhatikeun karakteristik unggal basa. Sadaya pilihan idéntik dina fungsionalitas sareng diwangun ku kira-kira 1000 garis kode. Kamekaran proyék nyebar handapeun lisénsi BSD.

Versi Rust supir tétéla pisan deukeut kinerja supir rujukan dina basa C. Dina beban kalayan ngirim simultaneous blok 32 pakét, supir Rust éta rada balik, tapi dina tés kalawan leuwih ti 32 pakét per blok, laju praktis teu béda ti supir C jeung nunjukkeun kinerja di tingkat processing 28 juta. pakét per detik dina server kalawan Xeon CPU E3-1230 v2 3.3 GHz.

Babandingan kinerja supir jaringan dina versi dina 10 basa program

Ecological salajengna dina hal kinerja dikawasaan ku drivers dina Go jeung C # basa, nu némbongkeun hasil cukup nutup (supir Go meunang dina tés kalawan blok nepi ka 16 pakét, sarta mimiti leungit rada dina tés kalawan leuwih ti 16 pakét. dina blok). Kalayan 256 pakét per blok, kinerja puncak supir C# sakitar 28 juta pakét per detik, sareng supir Go kirang langkung 25 juta pakét per detik.

Salajengna, kalawan hasil cukup nutup, éta drivers pikeun
Java, OCaml na Haskell, nu geus noticeably katinggaleun balik pilihan saméméhna dianggap na teu bisa nungkulan 12 juta pakét per bar detik. Supir Swift sareng JavaScript nunjukkeun lag anu langkung ageung, tiasa ngolah aliran dina tingkat 5 juta pakét per detik.

Rengking luhur réngsé ku supir Python, anu ngan ukur tiasa ngolah 0.14 juta pakét per detik. Palaksanaan Python ieu dipaké pikeun evaluate laju juru tanpa JIT sarta tanpa optimizations husus (kode ieu dieksekusi maké CPython 3.7 sarta teu cocog sareng PyPy, tapi dicatet yén optimasi struktur gudang data bisa ningkatkeun kinerja ku ngeunaan 10 kali. ).

Salaku tambahan, tés latency dilaksanakeun pikeun nunjukkeun éféktivitas panyangga sareng dampak tukang sampah. Uji coba ngukur latency saatos unggal pakét diteruskeun ku supir dibandingkeun sareng waktos pastina dikirim. Pamingpinna masih supir C sareng Rust, hasilna praktis teu tiasa dibédakeun pikeun aliran 1 juta pakét per detik (kira-kira 20 µs). Supir Go ngalaksanakeun saé, ngan ukur rada di tukangeun pamimpin sareng ogé tetep dina tingkat 20 µs. Supir C # nunjukkeun telat kira-kira 50 µs.
Tunda pangpanjangna dipidangkeun ku panggerak JavaScript sareng Java (latén langkung ti 300 µs).

Babandingan kinerja supir jaringan dina versi dina 10 basa program

Panaliti ieu dilakukeun pikeun meunteun kamungkinan ngembangkeun supir sareng komponén sistem operasi dina basa tingkat anu langkung luhur tibatan C. Ayeuna, 39 tina 40 masalah mémori dina Linux aya hubunganana sareng supir, janten masalah ngagunakeun basa anu langkung aman sareng mindahkeun supir kaluar tina kernel sareng kana rohangan pangguna. tetep relevan sareng pabrik parantos aktip ékspérimén dina arah ieu (contona, Google parantos ngembangkeun tumpukan TCP pikeun OS Fuchsia dina basa Go, parusahaan CloudFlare dijieun palaksanaan protokol QUIC di Rust, Apple geus dipindahkeun tumpukan TCP dina alat nu bagerak kana spasi pamaké).

Dina kursus gawé, éta disimpulkeun yén basa Rust mangrupakeun calon pangalusna pikeun ngembangkeun supir. Kamampuhan Rust ngaleungitkeun masalah anu aya hubunganana sareng manajemén mémori tingkat rendah kalayan biaya kirang langkung 2% dugi ka 10% leungitna kinerja dibandingkeun sareng supir C. Go jeung C # ogé dianggap cocog pikeun nyieun komponén sistem dina situasi dimana latency sub-millisecond disababkeun ku ngumpulkeun sampah téh bisa ditarima.

sumber: opennet.ru

Tambahkeun komentar