linux - 如何获得最佳 tcpip 套接字数据速率性能
问题描述
每个 tcp 数据包打包尽可能多的数据显然会降低开销的相对权重。增加缓冲区大小可以提高对 CPU 使用峰值的鲁棒性。
但是还可以做些什么来实现最高的数据速率呢?
增加数据读取器线程的优先级是个好主意吗?如果使用最高优先级,该线程是否会与网络驱动程序竞争 CPU 使用率并实际上损害性能?
就可实现的数据速率而言,阻塞还是非阻塞最好?
在非常高的数据速率下,是否可以在缓冲区达到 90% 时检测到接收缓冲区的溢出并触发高优先级读取?
其他通过 tcpip 套接字实现高数据速率的技术?
解决方案
一种方法是使用繁忙轮询从 NIC 获取数据。这可以通过减少中断开销来提高数据速率。这是在 DPDK 等高性能数据包处理框架中完成的。
另一种方法是避免将数据包从内核空间复制到用户空间。我不知道这是否可能在您的情况下。通过将内核内存映射到用户空间内存来避免复制数据包。将数据复制到用户空间是网络堆栈中最耗时的步骤之一。这也是在 DPDK 中完成的。
推荐阅读
- llvm - 从 LLVM callInst 临时提取
- r - 当出现次数未知时,如何用反向引用替换?
- linux - 提示:没有函数匹配给定的名称和参数类型。`json_build_object`
- scala - 如何在 Scala 中引用本地项目
- angular - FIREBASE 警告:用户回调引发了异常。TypeError:无法读取未定义的属性“myID”
- r - 检测新的因子水平按时间和组累积出现
- react-native - ReactNative - FlatList 在滚动之前不会更新
- jquery - 单击日期名称并在 Fullcalendar 中选择一周中同一天的所有日期
- c++ - 此代码段的时间复杂度
- go - 究竟什么是 websocket.Upgrader?