Cymhariaeth perfformiad gyrrwr rhwydwaith mewn 10 iaith raglennu

GrΕ΅p o ymchwilwyr o brifysgolion yr Almaen cyhoeddi y canlyniadau arbrofi, pan ddatblygwyd 10 fersiwn o yrrwr safonol ar gyfer cardiau rhwydwaith 10-gigabit Intel Ixgbe (X5xx) mewn gwahanol ieithoedd rhaglennu. Mae'r gyrrwr yn rhedeg yn y gofod defnyddiwr ac yn cael ei weithredu yn C, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript a Python. Wrth ysgrifennu cod, roedd y prif ffocws ar gyflawni'r perfformiad gorau posibl, gan gymryd i ystyriaeth nodweddion pob iaith. Mae pob opsiwn yn union yr un fath o ran ymarferoldeb ac yn cynnwys tua 1000 o linellau cod. Datblygiadau prosiect lledaenu dan y drwydded BSD.

Roedd fersiwn Rust y gyrrwr yn agos iawn o ran perfformiad i'r gyrrwr cyfeirio yn yr iaith C. O dan lwyth gydag anfon blociau o 32 pecyn ar yr un pryd, roedd y gyrrwr Rust ychydig ar ei hΓ΄l hi, ond mewn profion gyda mwy na 32 o becynnau fesul bloc, nid oedd y cyflymder bron yn wahanol i'r gyrrwr C a dangosodd berfformiad ar lefel prosesu 28 miliwn pecynnau yr eiliad ar weinydd gyda CPU Xeon E3-1230 v2 3.3 GHz.

Cymhariaeth perfformiad gyrrwr rhwydwaith mewn 10 iaith raglennu

Roedd y gilfach nesaf o ran perfformiad yn cael ei meddiannu gan yrwyr yn yr ieithoedd Go a C#, a ddangosodd ganlyniadau gweddol agos (ennillodd y gyrrwr Go mewn profion gyda blociau o hyd at 16 pecyn, a dechreuodd golli ychydig mewn profion gyda mwy nag 16 pecyn mewn bloc). Gyda 256 o becynnau fesul bloc, perfformiad brig y gyrrwr C# oedd tua 28 miliwn o becynnau yr eiliad, ac roedd y gyrrwr Go tua 25 miliwn o becynnau yr eiliad.

Nesaf, gyda chanlyniadau gweddol agos, oedd y gyrwyr ar gyfer
Java, OCaml a Haskell, a oedd eisoes yn amlwg ar ei hΓ΄l hi o'r opsiynau a ystyriwyd yn flaenorol ac ni allent oresgyn y bar 12 miliwn o becynnau yr eiliad. Dangosodd gyrwyr Swift a JavaScript oedi hyd yn oed yn fwy, gan allu prosesu ffrydiau ar lefel o 5 miliwn o becynnau yr eiliad.

Cwblhawyd y safle uchaf gan yrrwr Python, a oedd yn gallu prosesu dim ond 0.14 miliwn o becynnau yr eiliad. Defnyddiwyd gweithrediad Python i werthuso cyflymder y dehonglwyr heb JIT a heb optimeiddiadau penodol (gweithredwyd y cod gan ddefnyddio CPython 3.7 ac nid oedd yn gydnaws Γ’ PyPy, ond nodir y gallai optimeiddio strwythurau storio data wella perfformiad tua 10 gwaith ).

Yn ogystal, cynhaliwyd profion cuddni i ddangos effeithiolrwydd byffro ac effaith y casglwr sbwriel. Roedd y profion yn mesur yr hwyrni ar Γ΄l i bob pecyn gael ei anfon ymlaen gan y gyrrwr o'i gymharu Γ’'r union amser y'i hanfonwyd. Roedd yr arweinwyr yn dal i fod yn yrwyr C a Rust, ac roedd y canlyniadau bron yn anwahanadwy ar gyfer llif o 1 miliwn o becynnau yr eiliad (tua 20 Β΅s). Perfformiodd gyrrwr Go yn dda, dim ond ychydig y tu Γ΄l i'r arweinwyr a hefyd yn aros ar y lefel o 20 Β΅s. Dangosodd y gyrrwr C# oedi o tua 50 Β΅s.
Dangoswyd yr oedi hiraf gan yrwyr JavaScript a Java (cwyrn o fwy na 300 Β΅s).

Cymhariaeth perfformiad gyrrwr rhwydwaith mewn 10 iaith raglennu

Cynhaliwyd yr astudiaeth i asesu'r posibilrwydd o ddatblygu gyrwyr a chydrannau system weithredu mewn ieithoedd lefel uwch na C. Ar hyn o bryd, mae 39 allan o 40 o broblemau cof yn Linux yn gysylltiedig Γ’ gyrwyr, felly mae'r problemau o ddefnyddio iaith fwy diogel a symud gyrwyr allan o'r cnewyllyn ac i ofod defnyddwyr parhau i fod yn berthnasol ac mae gweithgynhyrchwyr eisoes yn arbrofi'n weithredol i'r cyfeiriad hwn (er enghraifft, mae Google wedi datblygu pentwr TCP ar gyfer yr OS Fuchsia yn iaith Go, cwmni CloudFlare creu gweithredu'r protocol QUIC yn Rust, mae Apple wedi symud y stac TCP ar ddyfeisiau symudol i ofod defnyddwyr).

Yn ystod y gwaith, daethpwyd i'r casgliad mai'r iaith Rust yw'r ymgeisydd gorau ar gyfer datblygu gyrwyr. Mae galluoedd Rust yn dileu'r problemau sy'n gysylltiedig Γ’ rheoli cof lefel isel ar gost o tua 2% i 10% o golled perfformiad o'i gymharu Γ’ gyrwyr C. Mae Go a C # hefyd yn cael eu hystyried yn addas ar gyfer creu cydrannau system mewn sefyllfaoedd lle mae hwyrni is-filieiliad a achosir gan gasglu sbwriel yn dderbyniol.

Ffynhonnell: opennet.ru

Ychwanegu sylw