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