kcp icon indicating copy to clipboard operation
kcp copied to clipboard

基于Rust的KCP实现(BBR流控&数据结构优化)

Open ma-chengyuan opened this issue 4 years ago • 4 comments

最近自己写项目的时候需要在大流量的情形下使用KCP,于是基于原版使用Rust编写了略微修改的KCP实现:

  • 在协议本身不做调整,完全兼容。
  • 相较于C实现进行了架构上的些许调整(回调改为poll,分离配置变量,去除check+update)。
  • 在C实现的基础之上,使用链表+滚动数组优化大窗口下的发送性能。
  • 在C实现的基础之上,使用小根堆优化RTO计时器的效率,提升重传性能。
  • 将BBR拥塞控制算法进行一定修改后试验性地运用到KCP中。

具体可以参考这篇博文。 代码可以参考这个Gist,或博文里的链接。

供大家参考:)

ma-chengyuan avatar Feb 02 '21 13:02 ma-chengyuan

good :thumbsup: 魔改的不错。

skywind3000 avatar Feb 02 '21 14:02 skywind3000

有必要优化网络收发包定时器性能,大多情况下定时器不会被触发(重传,ping,idle,)采用惰性删除(标记失效)。下次加入直接从当前位置上下调整,可以大量减少不必要的堆操作。 我在google quic项目中优化了定时器性能,测试100个活跃连接,服务器小堆定时器每秒达30w/s级别弹出和插入,优化后性能大幅度提升,perf top看不到任何堆耗时操作了。

ktprime avatar Oct 31 '21 04:10 ktprime

bbr我也尝试过魔改移植,效果其实不明显

caoli5288 avatar Oct 31 '21 14:10 caoli5288