我在尽可能最快的时间内读取数据包的替代方法有哪些?
在用户空间中编写驱动程序?
我从来没有为网卡写过驱动程序(虽然它不像编写整个操作系统那么困难我会感兴趣吗?)。我是否可以获取已存在的驱动程序代码,该代码必须存在于某处的Linux中,并将其“移植”到用户空间中? Linux内核驱动程序和我的驱动程序都会尝试竞争相同的数据包吗?
不是编写驱动程序,而是在C / C ++应用程序堆栈之后立即访问网络数据?
我对这种方法知之甚少 - 所以如果有人能在这里提供帮助,我会感兴趣。
我有兴趣实现自己的零拷贝技术,以尽可能快地获取数据包数据。这台计算机不需要使用普通的互联网 - 它可能是两台计算机之间的专用网络连接(用于TCP和UDP)。
编辑:
我的意思是延迟,而不是吞吐量
答案 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 据报道,这种消息传递技术已经超过两个 比竞争产品快一倍。
答案 1 :(得分:1)
我会说使用PCap应该足够快。他们还修改了Linux版本并提高了性能 - PF_RING / PF_RING DNA。