最近自己写项目的时候需要在大流量的情形下使用KCP,于是基于原版使用Rust编写了略微修改的KCP实现:
- 在协议本身不做调整,完全兼容。
- 相较于C实现进行了架构上的些许调整(回调改为poll,分离配置变量,去除
check
+update
)。 - 在C实现的基础之上,使用链表+滚动数组优化大窗口下的发送性能。
- 在C实现的基础之上,使用小根堆优化RTO计时器的效率,提升重传性能。
- 将BBR拥塞控制算法进行一定修改后试验性地运用到KCP中。
具体可以参考 这篇博文 。
代码可以参考 这个Gist ,或博文里的链接。
供大家参考:)
3条答案
按热度按时间2nbm6dog1#
good 👍
魔改的不错。
fjaof16o2#
有必要优化网络收发包定时器性能,大多情况下定时器不会被触发(重传,ping,idle,)采用惰性删除(标记失效)。下次加入直接从当前位置上下调整,可以大量减少不必要的堆操作。
我在google quic项目中优化了定时器性能,测试100个活跃连接,服务器小堆定时器每秒达30w/s级别弹出和插入,优化后性能大幅度提升,perf top看不到任何堆耗时操作了。
0ejtzxu13#
bbr我也尝试过魔改移植,效果其实不明显