首页 > 解决方案 > 如何获得最佳 tcpip 套接字数据速率性能

问题描述

每个 tcp 数据包打包尽可能多的数据显然会降低开销的相对权重。增加缓冲区大小可以提高对 CPU 使用峰值的鲁棒性。

但是还可以做些什么来实现最高的数据速率呢?

增加数据读取器线程的优先级是个好主意吗?如果使用最高优先级,该线程是否会与网络驱动程序竞争 CPU 使用率并实际上损害性能?

就可实现的数据速率而言,阻塞还是非阻塞最好?

在非常高的数据速率下,是否可以在缓冲区达到 90% 时检测到接收缓冲区的溢出并触发高优先级读取?

其他通过 tcpip 套接字实现高数据速率的技术?

标签: linuxwindowssocketstcp

解决方案


一种方法是使用繁忙轮询从 NIC 获取数据。这可以通过减少中断开销来提高数据速率。这是在 DPDK 等高性能数据包处理框架中完成的。

另一种方法是避免将数据包从内核空间复制到用户空间。我不知道这是否可能在您的情况下。通过将内核内存映射到用户空间内存来避免复制数据包。将数据复制到用户空间是网络堆栈中最耗时的步骤之一。这也是在 DPDK 中完成的。


推荐阅读