7

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

我的设置的一些细节:

我正在从一对千兆以太网摄像头接收数据。结合起来,我每秒接收 28800 个 UDP 数据包(每行 1 个数据包 * 30FPS * 2 个摄像头 * 480 行)。我无法切换到巨型帧,并且我已经在研究调整驱动程序级别的中断以降低 CPU 利用率。我在这里追求的是减少我复制这个 ~40MB/s 数据流的次数。

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

4

2 回答 2

5

这篇文章可能有用:

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

于 2011-09-16T20:42:05.297 回答
3

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

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

您可以降低并匹配 Wireshark/tcpdump 的操作方式,但尝试任何高于它的严肃处理必须自己解码所有内容都是徒劳的。

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

于 2011-09-16T21:41:19.387 回答