我想将 UDP 数据包直接从以太网适配器复制到我的用户空间缓冲区
我的设置的一些细节:
我正在从一对千兆以太网摄像头接收数据。结合起来,我每秒接收 28800 个 UDP 数据包(每行 1 个数据包 * 30FPS * 2 个摄像头 * 480 行)。我无法切换到巨型帧,并且我已经在研究调整驱动程序级别的中断以降低 CPU 利用率。我在这里追求的是减少我复制这个 ~40MB/s 数据流的次数。
这是我在这方面找到的最佳来源,但我希望有更完整的参考或证据证明这种方法在实践中行之有效。
我想将 UDP 数据包直接从以太网适配器复制到我的用户空间缓冲区
我的设置的一些细节:
我正在从一对千兆以太网摄像头接收数据。结合起来,我每秒接收 28800 个 UDP 数据包(每行 1 个数据包 * 30FPS * 2 个摄像头 * 480 行)。我无法切换到巨型帧,并且我已经在研究调整驱动程序级别的中断以降低 CPU 利用率。我在这里追求的是减少我复制这个 ~40MB/s 数据流的次数。
这是我在这方面找到的最佳来源,但我希望有更完整的参考或证据证明这种方法在实践中行之有效。
您最好的途径是recvmmsg
增加 RX 中断合并。
http://lwn.net/Articles/334532/
您可以降低并匹配 Wireshark/tcpdump 的操作方式,但尝试任何高于它的严肃处理必须自己解码所有内容都是徒劳的。
每秒只有 30,000 个数据包我不会太担心复制数据包,当处理每秒 3,000,000 条消息时会出现这些问题。