想要创建一个实现用户空间网络堆栈的项目,以便用户空间应用程序可以访问网卡,我以前从未这样做过,我想知道是否有可能使用它来接近硬件像python这样的语言,如果不是,哪种语言最好?
1 回答
几乎可以肯定这样做,但取决于你想走多远,你需要用另一种语言编写一些部分。本文[1]的作者用 Python编写了他们的用户空间网络驱动程序的一个版本,但他们使用 Cython 进行外部内存管理。
虽然为此使用 Python 可能是可行的,但 Python 比许多其他语言慢得多。我提到的论文的作者用 10 种语言实现了他们的驱动程序并进行了比较,Python 是最慢的——比第二慢的慢 10 倍(但他们确实注意到(在 [2] 中)除了Python 之外的所有驱动程序驱动程序针对性能进行了优化)。
一般来说,如果您想学习如何进行系统编程,我建议您使用系统语言,如 C 或 Rust。传统上,这种类型的代码通常是用 C 编写的。如果你想要支持使用除 C 之外的其他语言的论据,同样的作者写了这篇论文[2],讨论了为什么你会想要使用更高级的语言(从 Rust 到 Python)用于编写网络驱动程序。
简而言之,如果您希望 Python 不仅仅是一个玩具项目,那么它可能不是最好的语言,但是如果您想这样做,那么这些论文中的 Python 代码可能是从最低级开始的好地方 -水平部件;事实上,作者希望对其他人有所帮助[2]:
我们为 Python 中的 PCIe 驱动程序开发提供了原语,我们希望对其他人有所帮助,因为据我们所知,这是 Python 中的第一个 PCIe 驱动程序。
P. Emmerich、M. Pudelko、S. Bauer、S. Huber、T. Zwickl 和 G. Carle,“用户空间网络驱动程序”,ACM/IEEE Symposium on Architectures for Networking and Communications Systems (ANCS 2019),2019 .arXiv :1901.10664 [cs.NI]
P. Emmerich、S. Ellmann、F. Bonk、A. Egger、EG Sánchez-Torija、T. Günzel、S. Di Luzio、A. Obada、M. Stadlmeier、S. Volt 和 G. Carle,“案例用高级编程语言编写网络驱动程序,”在 ANCS 2019 中。arXiv :1909.06344 [cs.NI]