在Linux上可能是零拷贝UDP打包接收



我想有UDP数据包直接从以太网适配器复制到我的用户空间缓冲区

关于我的设置的一些细节:

我正在从一对千兆以太网摄像机接收数据。结合起来,我每秒接收28800个UDP数据包(每行1个数据包* 30FPS * 2个摄像机* 480行)。我没有办法切换到巨型帧,而且我已经在考虑调优驱动级中断以降低CPU利用率。我在这里要做的是减少我复制这个~40MB/s的数据流的次数。

这是我在这方面找到的最好的来源,但我希望有一个更完整的参考或证明,这种方法在实践中行之有效。

这篇文章可能会有用:

http://yusufonlinux.blogspot.com/2010/11/data-link-access-and-zero-copy.html

你最好的途径是recvmmsg和增加RX中断合并。

http://lwn.net/Articles/334532/

您可以移动到更低的位置并匹配Wireshark/tcpdump的操作方式,但是尝试任何严肃的处理都必须自己解码。

每秒只有30,000个数据包,我不会太担心复制数据包,当处理每秒3,000,000个消息时,这些问题就会出现。

最新更新