Kuenzanisa kwekuita kwenetwork driver mushanduro mumitauro gumi yekuronga

Boka revaongorori kubva kumayunivhesiti eGerman yakabudiswa mhedzisiro experiment, panguva iyo gumi mavhezheni emutyairi akajairwa e10-gigabit Intel Ixgbe (X10xx) makadhi etiweki akagadzirwa mumitauro yakasiyana-siyana. Mutyairi anomhanya munzvimbo yemushandisi uye anoitwa muC, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript uye Python. Pakunyora kodhi, chinangwa chikuru chaive chekuwana kuita kwakanakisa, tichifunga nezvemaitiro emutauro wega wega. Sarudzo dzese dzakafanana mukushanda uye dzine angangoita 5 mitsetse yekodhi. Kuvandudzwa kweprojekiti paradzira pasi peBSD rezinesi.

Iyo Rust vhezheni yemutyairi yakave pedyo zvakanyanya mukuita kune referensi mutyairi mumutauro weC. Pasi pemutoro nekutumira panguva imwe chete yezvivharo zvemapaketi makumi matatu nembiri, mutyairi weRust aive kumashure zvishoma, asi mukuedzwa aine anopfuura makumi matatu nemaviri mapaketi pabhuroka, kumhanya kwacho kwaisatombosiyana nemutyairi weC uye kwakaratidza kuita padanho rekugadzirisa 32 miriyoni. mapaketi pasekondi pane sevha ine Xeon CPU E32-28 v3 1230 GHz.

Kuenzanisa kwekuita kwenetwork driver mushanduro mumitauro gumi yekuronga

Iyo niche yakatevera maererano nekuita yaive yakagarwa nevatyairi mumitauro yeGo neC#, iyo yakaratidza mhedzisiro yepedyo (mutyairi weGo akahwina mumiyedzo nemabhuroka anosvika gumi nematanhatu emapaketi, ndokutanga kurasikirwa zvishoma mumiyedzo aine anopfuura gumi nematanhatu mapaketi. mubhuroko). Iine 16 mapaketi pablock, kuita kwepamusoro kwemutyairi weC# kwaisvika 16 miriyoni mapaketi pasekondi, uye mutyairi weGo angangoita 256 miriyoni mapaketi pasekondi.

Zvakazotevera, zvine maresults ari pedyo, aive madhiraivha e
Java, OCaml neHaskell, izvo zvanga zvatove kusara kumashure kwezvakambofungidzirwa sarudzo uye zvakatadza kukunda mamirioni gumi nemaviri mapaketi pasekondi imwe. Vatyairi veSwift neJavaScript vakaratidza kusakara kwakatokura, vachikwanisa kugadzirisa hova padanho remamiriyoni mashanu emapaketi pasekondi.

Nzvimbo yepamusoro yakapedzwa nemutyairi wePython, uyo akakwanisa kugadzirisa 0.14 mamiriyoni emapaketi pasekondi. Kushandiswa kwePython kwakashandiswa kuongorora kumhanya kwevaturikiri pasina JIT uye pasina kunyatsogadzirisa (code yakaitwa pachishandiswa CPython 3.7 uye yakanga isingaenderane nePyPy, asi zvinoonekwa kuti optimization yezvimiro zvekuchengetedza data inogona kuvandudza mashandiro nekanosvika gumi. )

Pamusoro pezvo, bvunzo dze latency dzakaitwa kuratidza kushanda kwebuffering uye kukanganisa kweanonhonga marara. Kuedzwa kwakayera latency mushure mekunge pakiti imwe neimwe yatumirwa nemutyairi zvichienzaniswa nenguva chaiyo yayakatumirwa. Vatungamiriri vakanga vachiri vatyairi veC uye Rust, migumisiro yacho yakanga isinganzwisisiki pakuyerera kwemamiriyoni emapakiti pasekondi (inenge 1 Β΅s). Mutyairi weGo akashanda zvakanaka, achingova kumashure zvishoma kwevatungamiriri uye achiramba ari pamwero we20 Β΅s. Mutyairi weC# airatidza kunonoka kweanosvika makumi mashanu Β΅s.
Kunonoka kunonoka kwakaratidzwa neJavaScript neJava driver (latencies yeanopfuura 300 Β΅s).

Kuenzanisa kwekuita kwenetwork driver mushanduro mumitauro gumi yekuronga

Chidzidzo ichi chakaitwa kuongorora mukana wekugadzira vatyairi uye masisitimu ekushandisa mumitauro yepamusoro-soro kupfuura C. Parizvino, makumi matatu nemapfumbamwe kubva pamakumi mana matambudziko ekurangarira muLinux ane hukama nevatyairi, saka nyaya dzekushandisa mutauro wakachengeteka uye kufambisa madhiraivha kunze kwekernel uye munzvimbo yemushandisi. ramba uchikosha uye vagadziri vari kutoedza nekushingaira munzira iyi (semuenzaniso, Google yakagadzira TCP stack yeOS Fuchsia mumutauro weGo, CloudFlare kambani created Kuitwa kweQUIC protocol muRust, Apple yakafambisa iyo TCP stack pane nharembozha munzvimbo yemushandisi).

Mukati mebasa racho, zvakagumiswa kuti mutauro weRust ndiwo wakanakira kusimudzira mutyairi. Kugona kweRust kunobvisa matambudziko ane chekuita neakaderera-level memory manejimendi pamutengo weinosvika 2% kusvika 10% kurasikirwa kwekuita zvichienzaniswa nevatyairi veC. Enda uye C # inoonekwawo seyakakodzera kugadzira masisitimu zvikamu mumamiriro ezvinhu apo sub-millisecond latency inokonzerwa nekuunganidzwa kwemarara inogamuchirwa.

Source: opennet.ru

Voeg