读取网络数据的最快方法?

时间:2013-08-16 20:39:02

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

我在尽可能最快的时间内读取数据包的替代方法有哪些?

在用户空间中编写驱动程序?

我从来没有为网卡写过驱动程序(虽然它不像编写整个操作系统那么困难我会感兴趣吗?)。我是否可以获取已存在的驱动程序代码,该代码必须存在于某处的Linux中,并将其“移植”到用户空间中? Linux内核驱动程序和我的驱动程序都会尝试竞争相同的数据包吗?

不是编写驱动程序,而是在C / C ++应用程序堆栈之后立即访问网络数据?

我对这种方法知之甚少 - 所以如果有人能在这里提供帮助,我会感兴趣。

我有兴趣实现自己的零拷贝技术,以尽可能快地获取数据包数据。这台计算机不需要使用普通的互联网 - 它可能是两台计算机之间的专用网络连接(用于TCP和UDP)。

编辑:

我的意思是延迟,而不是吞吐量

2 个答案:

答案 0 :(得分:2)

正如您所说,Linux中接收数据包的最低延迟是绕过Linux内核,这需要特殊的驱动程序。 Mellanox,Solarflare,Myricom,Chelsio等高端网络适配器提供内核旁路软件。例如,Mellanox声称您可以使用他们的ConnectX-3卡和VMA 6.0软件在2微秒内收到数据包

  

本周Mellanox发布了其最新版本的VMA 6.0   消息传递加速器,包括增强的TCP和UDP   ConnectX-3 VPI适配卡的加速支持。超低   UDP延迟低于1.4微秒,TCP套接字延迟低于1.7   据报道,这种消息传递技术已经超过两个   比竞争产品快一倍。

http://insidehpc.com/2012/01/10/interview-mellanox-vma-6-0-tackles-latency-for-high-frequency-trading/

答案 1 :(得分:1)

我会说使用PCap应该足够快。他们还修改了Linux版本并提高了性能 - PF_RING / PF_RING DNA