Германия университеттерінің зерттеушілер тобы
Драйвердің Rust нұсқасы анықтамалық C драйверіне өте жақын болды. 32 пакеттік блоктарды бір рет жіберумен жүктеме кезінде Rust драйвері сәл артта қалды, бірақ блокқа 32 пакеттен көп сынақтарда ол C драйверінен жылдамдығымен іс жүзінде ерекшеленбеді және өңдеу деңгейінде өнімділікті көрсетті. Xeon E28-3 v1230 2 ГГц процессоры бар серверде секундына 3.3 миллион пакет.
Өнімділік бойынша келесі орынды Go және C# драйверлері иеленді, олар өте жақын нәтиже көрсетті (Go драйвері 16 пакетті қамтитын блоктары бар сынақтарда жеңді, ал 16 пакеттен астам сынақтарда аздап жеңіле бастады. блок). Бір блокта 256 пакет болған кезде C# драйвері үшін ең жоғары өнімділік шамамен 28Mpps, ал Go драйверлері үшін шамамен 25Mpps болды.
Әрі қарай, өте жақын нәтижелер, содан кейін драйверлер
Java, OCaml және Haskell, олар бұрын қарастырылған опциялардан айтарлықтай артта қалды және секундына 12 миллион пакетті жеңе алмады. Swift және JavaScript негізіндегі драйверлер секундына 5 миллион пакет деңгейінде ағындарды өңдей алатын одан да үлкен артта қалушылықты көрсетті.
Python тіліндегі драйвер секундына 0.14 миллион пакетті ғана өңдей алатын рейтингті жауып тастады. Python енгізуі JIT-сіз және арнайы оңтайландыруларсыз интерпретаторлардың жылдамдығын бағалау үшін пайдаланылды (код CPython 3.7 арқылы іске қосылды және PyPy-мен үйлесімді болмады, бірақ деректер құрылымдарын оңтайландыру өнімділікті шамамен 10 есе жақсартуға болатыны атап өтілген).
Бұған қоса, буферлеудің тиімділігі мен қоқыс жинағыштың әсерін көрсететін кідіріс сынақтары жүргізілді. Сынақ белгілі жіберу уақытымен салыстырғанда әрбір пакетті драйвер қайта бағыттағаннан кейін күту уақытын өлшеді. Көшбасшылар әлі де C және Rust драйверлері болды, олардың нәтижелері секундына 1 миллион пакет (шамамен 20 мкс) ағыны үшін дерлік айырмашылығы жоқ. Go тіліндегі драйвер жақсы орындады, ол көшбасшылардан сәл ғана артта қалды және сонымен қатар 20 мкс деңгейінде болды. C# драйвері шамамен 50 мкс кідірістерді көрсетті.
JavaScript және Java негізіндегі драйверлер ең үлкен кідірістерді көрсетті (300 мкс-тен астам кідіріс).
Зерттеу драйверлер мен операциялық жүйе құрамдастарын C тілінен жоғары деңгейдегі тілдерде әзірлеу мүмкіндігін бағалау мақсатында жүргізілді. Қазіргі уақытта 39 Linux жады мәселесінің 40-ы драйверге байланысты, сондықтан қауіпсіз тілді қабылдау және драйверлерді ядродан және пайдаланушы кеңістігіне жылжыту мәселелері
Жүргізілген жұмыс барысында Rust тілі драйверді дамытуға ең жақсы үміткер деген қорытындыға келді. Rust ұсынатын мүмкіндіктер C тіліндегі драйверлермен салыстырғанда шамамен 2%-10% өнімділік айыппұлы есебінен төмен деңгейлі жадты өңдеуге байланысты туындайтын мәселелерден құтылуға мүмкіндік береді. Go және C# сонымен қатар қоқыс жинағыштан туындаған миллисекундтық кідіріс қолайлы жағдайларда жүйе құрамдастарын құру үшін қолайлы болып табылады.
Ақпарат көзі: opennet.ru