Информация об изменениях

Сообщение эксперимент :: сетевой драйвер на 10 языках от 12.09.2019 10:09

Изменено 12.09.2019 10:10 kaa.python

эксперимент :: скорость работы драйвера в зависисости от языка
Довольно интересный эксперимент посвященный использованию разных языков программирования для написания драйверов. Авторы исследования не поленились и выкатили реализацию одного и того же сетевого драйвера для карт Intel Ixgbe на следующих языках: C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript и Python. Почему-то поленились сделать реализацию для C++, по мне так больше упущение, но что есть, то есть.

Как и ожидалось быстрей всего реализации на Си и Rust, фактически одна и та же скорость. Чуть медленнее, но всё равно достойный результат у Go и C# (правда C# слился из за больших задержек в тесте на 20 Mpps).

Но самое интересное в исходниках. Код на Си вполне ожидаем, классическая такая сишечка. Код на Go тоже довольно приличный, с небольшими вкраплениями unsafe, видна попытка сделать код идиоматичным на сколько это возможно с учетом задачи. Код на Rust тоже довольно хорош, хотя и погуще обмазан unsafe конструкциями, но все еще похож на Rust.

Удивительными оказались результаты для драйверов на OCaml и Haskell — они очень даже неплохо держат нагрузку, что для меня было большой неожиданностью. При этом кода на Haskell один из самых читаемых в этой коллекции реализаций, как мне показалось.

Так же интересно то, что драйвер на Java показал довольно хреновые результаты, не Python (который как и положено Python-у слился самым первым, показав всю свою знаменитую скорость работы), но тем не менее. Как же тогда её в HFT используют? Тут я сильно озадачился... надо тюнить JVM как я понимаю?
эксперимент :: скорость работы драйвера в зависисости от язы
Довольно интересный эксперимент посвященный использованию разных языков программирования для написания драйверов. Авторы исследования не поленились и выкатили реализацию одного и того же сетевого драйвера для карт Intel Ixgbe на следующих языках: C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript и Python. Почему-то поленились сделать реализацию для C++, по мне так больше упущение, но что есть, то есть.

Как и ожидалось быстрей всего реализации на Си и Rust, фактически одна и та же скорость. Чуть медленнее, но всё равно достойный результат у Go и C# (правда C# слился из за больших задержек в тесте на 20 Mpps оставив в победителях C, Rust и Go).

Но самое интересное в исходниках. Код на Си вполне ожидаем, классическая такая сишечка. Код на Go тоже довольно приличный, с небольшими вкраплениями unsafe, видна попытка сделать код идиоматичным на сколько это возможно с учетом задачи. Код на Rust тоже довольно хорош, хотя и погуще обмазан unsafe конструкциями, но все еще похож на Rust.

Удивительными оказались результаты для драйверов на OCaml и Haskell — они очень даже неплохо держат нагрузку, что для меня было большой неожиданностью. При этом кода на Haskell один из самых читаемых в этой коллекции реализаций, как мне показалось.

Так же интересно то, что драйвер на Java показал довольно хреновые результаты, не Python (который как и положено Python-у слился самым первым, показав всю свою знаменитую скорость работы), но тем не менее. Как же тогда её в HFT используют? Тут я сильно озадачился... надо тюнить JVM как я понимаю?