Coimeas air coileanadh draibhearan lìonra ann an dreachan ann an 10 cànanan prògramaidh

Buidheann de luchd-rannsachaidh bho oilthighean Gearmailteach foillsichte результаты acras, nuair a chaidh 10 dreachan de dhràibhear àbhaisteach airson cairtean lìonra 10-gigabit Intel Ixgbe (X5xx) a leasachadh ann an diofar chànanan prògramaidh. Bidh an draibhear a’ ruith ann an àite luchd-cleachdaidh agus air a chuir an gnìomh ann an C, Rust, Go, C #, Java, OCaml, Haskell, Swift, JavaScript agus Python. Ann a bhith a’ sgrìobhadh còd, bha am prìomh fòcas air a bhith a’ coileanadh an coileanadh as fheàrr, a’ toirt aire do fheartan gach cànan. Tha na roghainnean uile co-ionann ann an gnìomh agus tha timcheall air 1000 loidhne de chòd ann. Leasachaidhean pròiseict sgaoileadh fo chead BSD.

Thionndaidh an dreach Rust den draibhear gu math faisg air coileanadh an draibhear iomraidh sa chànan C. Fo luchd le bhith a’ cur bhlocaichean de 32 pacaidean aig an aon àm, bha an draibhear Rust beagan air dheireadh, ach ann an deuchainnean le barrachd air 32 pacaidean gach bloca, cha mhòr nach robh an astar eadar-dhealaichte bhon draibhear C agus sheall e coileanadh aig ìre giollachd 28 millean. pacaidean gach diog air frithealaiche le Xeon CPU E3-1230 v2 3.3 GHz.

Coimeas air coileanadh draibhearan lìonra ann an dreachan ann an 10 cànanan prògramaidh

Bha an ath àite a thaobh coileanadh air a ghabhail thairis le draibhearan anns na cànanan Go agus C#, a sheall toraidhean gu math dlùth (bhuannaich an draibhear Go ann an deuchainnean le blocaichean suas ri 16 pacaidean, agus thòisich e air beagan a chall ann an deuchainnean le barrachd air 16 pacaidean ann am bloc). Le 256 pacaidean gach bloc, bha an ìre as àirde de choileanadh an draibhear C # timcheall air 28 millean pacaid gach diog, agus bha an draibhear Go timcheall air 25 millean pacaid gach diog.

An ath rud, le toraidhean gu math faisg, bha na draibhearan airson
Java, OCaml agus Haskell, a bha mar-thà gu mòr air dheireadh air na roghainnean a chaidh beachdachadh roimhe agus nach b’ urrainn dhaibh faighinn thairis air na 12 millean pacaid gach diog. Sheall draibhearan Swift agus JavaScript dàil eadhon nas motha, comasach air sruthan a phròiseasadh aig ìre 5 millean pacaid gach diog.

Chaidh an rangachadh as àirde a chrìochnachadh leis an draibhear Python, a bha comasach air dìreach 0.14 millean pacaid a phròiseasadh gach diog. Chaidh buileachadh Python a chleachdadh gus astar an eadar-mhìnearan a mheasadh às aonais JIT agus às aonais optimizations sònraichte (chaidh an còd a chuir gu bàs le bhith a ’cleachdadh CPython 3.7 agus cha robh e co-chòrdail ri PyPy, ach thathas a’ toirt fa-near gum faodadh optimization de structaran stòraidh dàta coileanadh a leasachadh timcheall air 10 tursan. ).

A bharrachd air an sin, chaidh deuchainnean latency a dhèanamh gus èifeachdas buffering agus buaidh an neach-cruinneachaidh sgudail a nochdadh. Thomhais an deuchainn an latency às deidh gach pacaid a chuir air adhart leis an draibhear an taca ris an dearbh ùine a chaidh a chuir. Bha na stiùirichean fhathast nan draibhearan C agus Rust, agus cha mhòr nach robh na toraidhean air an eadar-dhealachadh airson sruth de 1 millean pacaid gach diog (timcheall air 20 µs). Rinn an draibhear Go gu math, le bhith dìreach beagan air dheireadh air na stiùirichean agus cuideachd a’ fuireach aig ìre 20 µs. Sheall an draibhear C# dàil de mu 50 µs.
Chaidh an dàil as fhaide a nochdadh le draibhearan JavaScript agus Java (latency nas motha na 300 µs).

Coimeas air coileanadh draibhearan lìonra ann an dreachan ann an 10 cànanan prògramaidh

Chaidh an sgrùdadh a dhèanamh gus measadh a dhèanamh air comasachd draibhearan agus co-phàirtean siostam obrachaidh a leasachadh ann an cànanan àrd-ìre na C. An-dràsta, tha duilgheadasan cuimhne 39 a-mach à 40 ann an Linux co-cheangailte ri draibhearan, agus mar sin tha na cùisean mu bhith a’ cleachdadh cànan nas tèarainte agus a’ gluasad dhràibhearan a-mach às an kernel agus a-steach gu àite luchd-cleachdaidh. fhathast buntainneach agus tha luchd-saothrachaidh mu thràth a’ dèanamh deuchainn air an taobh seo (mar eisimpleir, tha Google air stac TCP a leasachadh airson an OS Fuchsia ann an cànan Go, companaidh CloudFlare chruthachadh buileachadh protocol QUIC ann an Rust, tha Apple air an stac TCP air innealan gluasadach a ghluasad gu àite luchd-cleachdaidh).

Rè na h-obrach, chaidh co-dhùnadh gur e cànan Rust an tagraiche as fheàrr airson leasachadh draibhearan. Bidh comasan Rust a’ cur às do na duilgheadasan co-cheangailte ri riaghladh cuimhne aig ìre ìosal aig cosgais timcheall air 2% gu 10% de chall dèanadais an coimeas ri draibhearan C. Thathas cuideachd den bheachd gu bheil Go agus C # freagarrach airson co-phàirtean siostam a chruthachadh ann an suidheachaidhean far a bheilear a’ gabhail ri latency fo-millisecond air adhbhrachadh le cruinneachadh sgudail.

Source: fosgailtenet.ru

Cuir beachd ann