在Linux上使用共享内存进行低延迟数据包处理?

时间:2013-03-14 21:11:57

标签: c linux performance udp latency

如果我要在Linux上接收UDP数据包(我不介意更改某些源代码),那么我的应用程序读取数据包的最快方法是什么?

我是否要修改网络堆栈,以便一旦收到UDP数据包,就会将其写入共享内存并让应用程序访问该内存?

堆栈是否有任何方式可以通知应用程序做出反应,而不是让应用程序不断轮询共享内存?

欢迎任何建议/进一步资源 - 我只看到:

http://www.kegel.com/c10k.html

1 个答案:

答案 0 :(得分:0)

如果延迟是一个问题,并且默认的UDP网络堆栈没有按照您的意愿执行,那么尝试使用不同的现有(可安装)网络堆栈。

示例,尝试UDP Lite,与标准UDP堆栈进行比较,此特定堆栈不会对UDP数据报执行任何校验和,从而以向应用程序层提供损坏的数据报为代价来减少延迟。

附注:您不需要“轮询”机制。阅读select的手册(它可能是pselectppoll之类的派生词),使用这样的API,内核会在您的应用程序有内容时立即“唤醒”您的应用程序或写在管道中。