FULI

Results 240 comments of FULI

thanks for the PR, but the purpose for this repo is not for "Performance" but "Clearness" for understanding.

port should be mapped from docker to the outside or a standalone IP in k8s, keep all services share a same inside port for etcd discovery

端口已经参数化了 https://github.com/xtaci/chat/blob/master/main.go#L31

> 目前在长肥管道下如果想达到高带宽利用率,存在以下矛盾 > > 在「发送与接收端的RTT」大于「协议处理周期」(即interval参数)时,不存在同一个发送窗口的尺寸,在发送策略为窗口中有数据就应发尽发的策略下,既满足一次性突发传输的速率不超过预设带宽,又能保持持续传输达到预设带宽。 > > 举例:发送端与接收端固有物理带宽均为200mbps,平均RTT为90ms,kcptun的发送周期为20ms, kcptun的mtu设置为1400 > > 为了达成持续发送时窗口容纳BDP的数据,配置发送窗口为1536。但这会造成在突发传输时,20ms内的峰值带宽达到持续传输的(RTT/发送周期)倍数,即4.5倍,实际峰值带宽会达到约900mbps。 周期内数据量/周期 = 周期内平均速度。你这个说法有问题,我只发一个包,1400字节,用了 1us,那么带宽是140Gbps,带宽必须有一个相对较长的采样时间来作为分母。 > > 一方面,发送数据超过实际带宽对于数据传输延迟造成不利影响,另一方面,这种行为是不被服务商允许的,实际效果是在突发传输后,AWS与ALI/TX的机器间会出现对应端口传输的数据RTT变为1000ms的惩罚措施,该惩罚持续时长为60s。 > > 目前通过tc在发送端机器与接收端机器把发送速度限制到200mbps,同时做20ms的发送平滑措施,没有出现过一次惩罚问题,也没有因此而产生过断流问题。 > > 但这个措施只是保底解决被惩罚的问题,在突发期被tc丢弃的数据会依赖重传,这部分数据会增大其传输延迟。不如直接从源头上控制发送速率,达成更低的传输延迟。这样也更符合KCP的设计目标——为流速优化 > > 所以建议增加最大发送带宽限制功能,针对底层的单个KCP连接,根据配置的最大发送速率决定一次发送的最大数据量,而不是窗口有空间就全部发出去。 > >...

> > 周期内数据量/周期 = 周期内平均速度。你这个说法有问题,我只发一个包,1400字节,用了 1us,那么带宽是140Gbps,带 > 实际抓包看,单次发送数据超过20ms「购买的预设带宽」可以承载的数据量的3~4倍以上,可能引起惩罚问题。 > 如果网络服务商不惩罚,友好的采取接收一定缓冲区突发传输+长期平均固定带宽传输,那延迟增长与丢包总得选一样或者都有一些。 他的采样策略是什么,实时带宽如何计算的,这个能给出资料么。

有限的内存,并行,充分的带宽利用,三者不可兼得。这是一个困境。-- **"smux dilemma"**

可以参考这里的最后一段:https://zhuanlan.zhihu.com/p/53849089

多条链接,需要开启拥塞控制算法来避免同一底层物理链路的相互竞争。 (你可以试试在kcptun里面 -nc 0,-conn 4来开启。) 然而开启拥塞控制算法的结果就是,在高丢包链路下,不可能做到稳定传输,因为窗口不够刚性。

我在想是否可以在smux做一个流量整形,这样也许会从发送的角度来控制发送者的公平性

https://github.com/xtaci/smux/commit/78fdaa98a6b10cc3c6974cb187f7bbdc826eb772