是否可以使用 python 创建用户空间网络堆栈?

Is it possible to create a userspace networking stack with python?

希望创建一个实现 user-space 网络堆栈 的项目,以便用户 space 应用程序可以访问网卡,我以前从未这样做过,我想知道是否有可能使用 python 这样的语言来接近硬件,如果不能,哪种语言会是最好?

这几乎肯定是可以做到的,但取决于您想走多远,您将需要用另一种语言编写一些部分。 this paper [1] wrote a version of their user-space network driver in Python的作者,但是他们使用Cython进行外部内存管理。

虽然为此使用 Python 可能是可能的,但 Python 比许多其他语言慢得多。我提到的论文的作者 implemented their driver in 10 languages and compared them,Python 是最慢的——比第二慢的慢 10 倍(但他们确实注意到(在 [2] 中)他们所有的驱动程序 除了 Python 驱动程序针对性能进行了优化)。

一般来说,如果你想学习如何进行系统编程,我建议使用系统语言来进行,比如 C 或 Rust。传统上,这种类型的代码通常是用 C 语言编写的。如果你想要支持使用 C 语言以外的语言的论据,同一作者写道 this paper [2],其中讨论了为什么你会想要使用更高的 -用于编写网络驱动程序的级别语言(从 Rust 到 Python)。

简而言之,如果您希望它不仅仅是一个玩具项目,Python 可能不是最好的语言,但是如果您想要这样做,Python 代码来自这些论文可能是从最低级部分开始的好地方;事实上,作者希望对其他人有所帮助 [2]:

We provide primitives for PCIe driver development in Python that we hope to be helpful to others as this is the first PCIe driver in Python to our knowledge.


  1. P。 Emmerich、M. Pudelko、S. Bauer、S. Huber、T. Zwickl 和 G. Carle, "User Space Network Drivers," 在 ACM/IEEE 网络和通信系统架构研讨会 (ANCS 2019),2019 年。 arXiv:1901.10664 [cs.NI]

  2. P。 Emmerich、S. Ellmann、F. Bonk、A. Egger、E. G. Sánchez-Torija、T. Günzel、S. Di Luzio、A. Obada、M. Stadlmeier、S. Volt 和 G. Carle, "The Case for Writing Network Drivers in High-Level Programming Languages," 在 ANCS 2019 中。 arXiv:1909.06344 [cs.NI]