2

我的情况:

我希望网卡上收到的数据尽快到达我的应用程序。我得出的结论是,最好的(如最低延迟)解决方案是在我的用户空间中实现网络堆栈。

网络流量可以是专有协议(如果它使编写网络堆栈更容易),因为它只是在两台本地计算机之间。

1) 我的网络堆栈需要实现的最少功能列表是什么?

2)我是否需要删除/禁用当前在我的 Linux 中的任何网络堆栈/我将如何执行此操作?

3)我将如何编写驱动程序?我想我需要找到调用驱动程序代码的确切位置,然后不是调用驱动程序/网络堆栈,而是将数据发送到我可以从我的应用程序访问的一块内存?

4

2 回答 2

1

我认为已经内置的 PF_PACKET 套接字类型正是您想要实现的。

缺点:应用程序必须以root权限启动。

本页描述了对 PF_PACKET 系统的一些增强: Linux 数据包 mmap

于 2013-08-21T20:27:26.013 回答
0

内核控制着 NIC 卡。每当您在内核和用户空间之间传递数据时,内核环之间都会发生上下文切换,这是昂贵的。我的理解是,您将使用标准 API,同时将缓冲区设置为更大的大小,从而允许一次在用户和内核空间之间复制更大的数据块,从而减少给定数据大小的上下文切换次数。

就实现您自己的堆栈而言,一个人不可能创建比内核中内置的堆栈更快的网络堆栈。

如果 linux 内核无法以您需要的速度处理数据包,您可能需要研究具有更多板载硬件处理能力的 NIC 卡。这些东西用于网络吞吐量测试等。

于 2013-08-21T21:03:52.847 回答