一群来自德国大学的研究人员
Rust 版本的驱动程序在性能上与 C 语言的参考驱动程序非常接近。 在同时发送 32 个数据包块的负载下,Rust 驱动程序稍显落后,但在每个块超过 32 个数据包的测试中,速度实际上与 C 驱动程序没有什么不同,并展示了处理 28 万个数据包级别的性能具有 Xeon CPU E3-1230 v2 3.3 GHz 的服务器上每秒的数据包数。
就性能而言,下一个利基市场是 Go 和 C# 语言的驱动程序,它们显示出相当接近的结果(Go 驱动程序在最多 16 个数据包的测试中获胜,并在超过 16 个数据包的测试中开始略有下降)在一个块中)。 每个块有 256 个数据包,C# 驱动程序的峰值性能约为每秒 28 万个数据包,Go 驱动程序约为每秒 25 万个数据包。
接下来,结果相当接近,是驱动程序
Java、OCaml 和 Haskell 已经明显落后于之前考虑的选项,无法克服每秒 12 万个数据包的限制。 Swift 和 JavaScript 驱动程序表现出更大的延迟,能够以每秒 5 万个数据包的水平处理流。
排名第一的是 Python 驱动程序,它每秒只能处理 0.14 万个数据包。 使用Python实现来评估没有JIT且没有特定优化的解释器的速度(代码使用CPython 3.7执行,与PyPy不兼容,但值得注意的是,数据存储结构的优化可以将性能提高约10倍)。
此外,还进行了延迟测试,以显示缓冲的有效性和垃圾收集器的影响。 测试测量了驱动程序转发每个数据包后的延迟与其发送的确切时间。 领先者仍然是 C 和 Rust 驱动程序,对于每秒 1 万个数据包(大约 20 µs)的流量,其结果几乎无法区分。 Go 驱动程序表现良好,仅略微落后于领先者,并且也保持在 20 µs 的水平。 C# 驱动程序显示大约 50 µs 的延迟。
JavaScript 和 Java 驱动程序显示了最长的延迟(延迟超过 300 µs)。
该研究的目的是评估用比 C 更高级的语言开发驱动程序和操作系统组件的可能性。 目前,Linux 中 39 个内存问题中有 40 个与驱动程序有关,因此使用更安全的语言并将驱动程序从内核移出到用户空间的问题
在工作过程中,得出的结论是 Rust 语言是驱动程序开发的最佳候选者。 Rust 的功能消除了与低级内存管理相关的问题,但与 C 驱动程序相比,代价是大约 2% 到 10% 的性能损失。 Go 和 C# 也被认为适合在垃圾收集导致的亚毫秒级延迟可接受的情况下创建系统组件。
来源: opennet.ru