每个tcp数据包尽可能多地打包数据将明显减少开销的相对权重。增大缓冲区大小可提高针对CPU使用率峰值的鲁棒性。
但是要实现最高数据速率还可以做些什么?
增加数据读取器线程的优先级是一个好主意吗?如果使用最高优先级,该线程是否可以与网络驱动程序竞争CPU使用率并实际上损害性能?
就可实现的数据速率而言,阻塞还是非阻塞是最好的?
在非常高的数据速率下,当缓冲区达到90%并触发高优先级读取时,是否可以检测到接收缓冲区的溢出?
通过tcpip套接字获得高数据速率的其他技术吗?
答案 0 :(得分:0)
一种方法是使用繁忙的轮询从NIC获取数据。这样可以通过减少中断开销来提高数据速率。这是在诸如DPDK之类的高性能数据包处理框架中完成的。
另一种方法是避免将数据包从内核空间复制到用户空间。对于您的情况,我不知道是否可行。通过将内核内存映射到用户空间内存来避免复制数据包。将数据复制到用户空间是网络堆栈中最耗时的步骤之一。同样,这是在DPDK中完成的。