为网卡实现内核旁路

时间:2013-08-21 19:26:49

标签: c linux network-programming linux-kernel driver

我的情况:

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

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

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

2)我是否需要删除/禁用当前Linux中的任何网络堆栈/我该怎么做?

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

2 个答案:

答案 0 :(得分:1)

我认为已经内置的PF_PACKET套接字类型完全符合您的要求。

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

本页描述了PF_PACKET系统的一些增强功能: Linux packet mmap

答案 1 :(得分:0)

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

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

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

相关问题