Krahasimi i performancës së pajisësit të rrjetit në versionet në 10 gjuhë programimi

Një grup studiuesish nga universitetet gjermane publikoi rezultatet e eksperimentit, gjatë të cilit janë zhvilluar 10 variante të një drayveri standard për karta rrjeti 10-gigabit Intel Ixgbe (X5xx) në gjuhë të ndryshme programimi. Drayveri funksionon në hapësirën e përdoruesit dhe është realizuar në gjuhët C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript dhe Python. Gjatë shkruarjes së kodit, vëmendja kryesore është përqendruar në arritjen e performancës maksimale duke marrë parasysh tiparet e secilës gjuhë. Në funksionalitet, të gjitha variantet janë identike dhe përbëhen nga rreth 1000 rreshta kodi. Arritjet e projektit shpërndahen nën licencën BSD.

Varianti i drayverit në gjuhën Rust rezultoi shumë i afërt me performancën e drayverit standard në gjuhën C. Gjatë ngarkesave me dërgesa të njëkohshme të blloqeve prej 32 paketash, drayveri Rust ishte pak më pas, por në testet me më shumë se 32 paketa në bllok, gati nuk u dallua nga drayveri në C dhe tregoi performancë në nivelin e përpunimit të 28 milion paketave në sekondë në një server me CPU Xeon E3-1230 v2 3.3 GHz.

Krahasimi i performancës së pajisësit të rrjetit në versionet në 10 gjuhë programimi

Nisha tjetër në performancë e morën driverat në gjuhët Go dhe C#, të cilët treguan rezultate mjaft të ngjashme (driveri në Go fitonte në provat me blloqe që përfshinin deri në 16 paketa, dhe filloi të humbiste pak në provat me më shumë se 16 paketa në bllok). Në 256 paketa në bllok, performanca maksimale me driverin në C# ishte rreth 28 milion paketa për sekondë, ndërsa driveri në Go ishte rreth 25 milion paketa për sekondë.

Më pas, me rezultate mjaft të ngjashme pasonin driverat në
Java, OCaml dhe Haskell, të cilët tashmë treguan një prapambetje të dukshme nga opsionet e mëparshme dhe nuk arritën të kalonin pragun prej 12 milion paketa për sekondë. Një prapambetje akoma më e madhe e treguan driverat në Swift dhe JavaScript, të cilët arritën të përpunonin flukse në nivelin e 5 milion paketa për sekondë.

Shtyu rangun e shoferit në gjuhën Python, i cili arriti të përpunonte vetëm 0.14 milion paketa në sekondë. Implementimi në Python u përdor për të vlerësuar shpejtësinë e interpretorëve pa JIT dhe pa optimizime specifike (kodi u ekzekutua duke përdorur CPython 3.7 dhe nuk ishte i përshtatshëm për PyPy, por vihet në dukje se optimizimi i strukturave të ruajtjes së të dhënave mund të rrisë performancën rreth 10 herë).

Për më tepër, u kryen teste mbi vonesat, të cilat treguan efikasitetin e buferimit dhe ndikimin e kolektorit të mbetjeve. Gjatë testimit u mat vonesa pas redirektimit të çdo pakete nga shoferi krahas me kohën e saktë të dërgimit. Sërish liderët ishin shoferët në C dhe Rust, rezultatet e të cilëve ishin gati të panjohura për një rrjedhë prej 1 milion paketash në sekondë (rreth 20 ”s). Shoferi në Go tregoi performancë të mirë, i cili vetëm u ndalua pak nga liderët dhe gjithashtu u mbajt në nivelin 20 ”s. Shoferi në C# tregoi vonesa prej rreth 50 ”s.
Shoferët në JavaScript dhe Java treguan vonesat më të mëdha (vonesat mbi 300 ”s).

Krahasimi i performancës së pajisësit të rrjetit në versionet në 10 gjuhë programimi

Studimi është kryer me qëllim vlerësimin e mundësisë për zhvillimin e pjeseve të drejtpërdrejta dhe komponentëve të sistemit operativ në gjuhë më të larta se C. Aktualisht, 39 nga 40 problemi që ndodhin me memorien në Linux lidhen me drejtpërdrejtë, kështu që çështjet që lidhen me përdorimin e një gjuhe më të sigurt dhe ndarjen e drejtpërdrejtëve nga bërthama në hapësirën e përdoruesit mbeten aktuale dhe prodhuesit tashmë po eksperimentojnë aktivisht në këtë drejtim (për shembull, Google zhvilloi TCP-stejk për sistemin operativ Fuchsia në gjuhën Go, kompania CloudFlare kreu një implementim të protokollit QUIC në gjuhën Rust, kompania Apple e transferoi TCP-stejk në pajisjet mobile në hapësirën e përdoruesit).

Gjatë punës së kryer u arrit përfundimi se gjuha Rust është kandidati më i mirë për zhvillimin e drejtorive. Mundësitë e ofruara në Rust lejojnë eliminimin e problemeve që lindin nga punimi me nivel të ulët me memorien, me një çmim të uljes së performancës rreth 2%-10% në krahasim me drejtoritë në gjuhën C. Gjuhët Go dhe C# gjithashtu janë njohur si të përshtatshme për krijimin e komponentëve sistemorë, në situata ku vonesat në nivelin e fraksioneve të milisekondave, të shkaktuara nga përdorimi i mbledhësit të plehrave, janë të pranueshme.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster