Perbandingan kinerja driver jaringan ing versi ing 10 basa pamrograman

Klompok peneliti saka universitas Jerman diterbitake asil eksperimen, sajrone 10 versi driver standar kanggo kertu jaringan 10 gigabit Intel Ixgbe (X5xx) dikembangake ing macem-macem basa program. Pembalap mlaku ing ruang pangguna lan diimplementasikake ing C, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript lan Python. Nalika nulis kode, fokus utama yaiku kanggo nggayuh kinerja sing paling apik, kanthi nimbang karakteristik saben basa. Kabeh opsi padha ing fungsi lan kalebu kira-kira 1000 baris kode. Pangembangan proyek Penyebaran ing lisensi BSD.

Versi Rust saka driver dadi banget cedhak karo kinerja driver referensi ing basa C. Ing beban kanthi ngirim pamblokiran 32 paket bebarengan, driver Rust rada ketinggalan, nanging ing tes kanthi luwih saka 32 paket saben blok, kacepetan meh ora beda karo driver C lan nuduhake kinerja ing tingkat pangolahan 28 yuta. paket per detik ing server karo Xeon CPU E3-1230 v2 3.3 GHz.

Perbandingan kinerja driver jaringan ing versi ing 10 basa pamrograman

Niche sabanjure babagan kinerja dikuwasani dening pembalap ing basa Go lan C #, sing nuduhake asil sing cukup cedhak (pembalap Go menang ing tes kanthi pamblokiran nganti 16 paket, lan wiwit ilang rada ing tes kanthi luwih saka 16 paket. ing blok). Kanthi 256 paket saben blok, kinerja puncak driver C# kira-kira 28 yuta paket per detik, lan driver Go kira-kira 25 yuta paket per detik.

Sabanjure, karo asil nyedhaki cedhak, padha pembalap kanggo
Jawa, OCaml lan Haskell, kang wis noticeably ketinggalan opsi sadurunge dianggep lan ora bisa ngatasi 12 yuta paket saben bar detik. Pembalap Swift lan JavaScript nuduhake lag sing luwih gedhe, bisa ngolah stream ing tingkat 5 yuta paket per detik.

Peringkat paling dhuwur rampung dening pembalap Python, sing mung bisa ngolah 0.14 yuta paket per detik. Implementasi Python digunakake kanggo ngevaluasi kacepetan interpreter tanpa JIT lan tanpa optimasi tartamtu (kode kasebut dieksekusi nggunakake CPython 3.7 lan ora kompatibel karo PyPy, nanging dicathet yen optimasi struktur panyimpenan data bisa nambah kinerja kira-kira 10 kaping. ).

Kajaba iku, tes latensi ditindakake kanggo nuduhake efektifitas buffering lan dampak saka tukang sampah. Pengujian kasebut ngukur latensi sawise saben paket diterusake dening driver dibandhingake karo wektu sing tepat dikirim. Pimpinan kasebut isih dadi pembalap C lan Rust, asile meh ora bisa dibedakake kanggo aliran 1 yuta paket per detik (kira-kira 20 Β΅s). Pembalap Go nindakake kanthi apik, mung ana ing mburi pimpinan lan uga tetep ing level 20 Β΅s. Pembalap C # nuduhake wektu tundha kira-kira 50 Β΅s.
Tundha paling dawa dituduhake dening driver JavaScript lan Java (latensi luwih saka 300 Β΅s).

Perbandingan kinerja driver jaringan ing versi ing 10 basa pamrograman

Panaliten kasebut ditindakake kanggo netepake kemungkinan ngembangake driver lan komponen sistem operasi ing basa tingkat sing luwih dhuwur tinimbang C. Saiki, 39 saka 40 masalah memori ing Linux ana hubungane karo driver, mula masalah nggunakake basa sing luwih aman lan mindhah driver metu saka kernel lan menyang ruang pangguna. tetep relevan lan manufaktur wis aktif nyobi ing arah iki (contone, Google wis ngembangake tumpukan TCP kanggo OS Fuchsia ing basa Go, perusahaan CloudFlare digawe implementasine protokol QUIC ing Rust, Apple wis mindhah tumpukan TCP ing piranti seluler menyang ruang pangguna).

Sajrone karya, disimpulake yen basa Rust minangka calon paling apik kanggo pangembangan driver. Kapabilitas Rust ngilangi masalah sing ana gandhengane karo manajemen memori tingkat rendah kanthi biaya kira-kira 2% nganti 10% mundhut kinerja dibandhingake pembalap C. Go lan C # uga dianggep cocok kanggo nggawe komponen sistem ing kahanan sing latensi sub-milidetik sing disebabake pengumpulan sampah bisa ditampa.

Source: opennet.ru

Add a comment