-
Notifications
You must be signed in to change notification settings - Fork 199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add token into stream #19
Conversation
你这样做最大的传输速度被限制在 16KB/RTT了 |
實測過並不會限制在16KB/RTT |
你这个ping值太小,如果ping值一大,比如200ms,你速度就下来了 |
我去租一台ping 200ms的主機試試@@ |
scaleway的巴黎主機(VC1S)實測 iperf server端皆為: 改過的:
原本的:
client設定
server設定:
|
看了下,session.token你没有去掉, 总阀门没有关啊。 只是在当前的基础上,还增加了限速。 |
我明白你的意思了,你是想通过接收方发送控制信息,告诉发送方停止推流。 发送方必须要执行cmdFUL,cmdEMP进行阻塞。 这种方法的主要的问题就是可能造成限速, 最终 cmdFUL, cmdEMP会成为驱动下一次数据发送的时钟信号,这个时钟信号的间隔就是RTT。 你上面的测试是一个快速的consumer,可能并没有触发到cmdFUL/EMP。也就和原来一样的结果。 |
session.token沒去掉是為了限制記憶體的總使用量 那我這個設計只是加入一個通知的功能 是的 ok |
问题的核心在于,在什么条件下去通知发送方,阈值什么是合理的,16KB是拍脑袋? 为什么不是在 stream buffer 达到整体半窗(MaxReceiveBuffer/2)的时候. |
好的 至於
然而read/write的頻率是有上限的 |
|
為何我不用選MaxReceiveBuffer / 2 正常來說stream buffer使用量會是一個夠小但是變化頻率高的數值 是解決少數慢速receiver造成卡住的問題沒錯 另外我發現我命名好像不是那麼好 |
修改名字是可以的,另外,这个改动不兼容原来的代码,会造成session.go:273的退出,需要一个开关。 另外 CI 目前还过不了,你需要测试下:
|
在config裡面加入一個bool來開關行嗎? test的部份我覺得蠻奇怪的
|
预设应该同之前的版本保持一致,用法无需改动。 |
Codecov Report
@@ Coverage Diff @@
## master #19 +/- ##
=========================================
+ Coverage 89.06% 90.1% +1.04%
=========================================
Files 4 4
Lines 384 475 +91
=========================================
+ Hits 342 428 +86
- Misses 37 40 +3
- Partials 5 7 +2
Continue to review full report at Codecov.
|
算是trade off吧 |
我还是觉得,这个问题有根本的困难,内存总用量和流量平衡不可兼得。 |
列一下幾個已知條件/現象:
那我試試看改個這種東西出來: |
3acabae
to
41aab74
Compare
431da70
to
abaf4a6
Compare
abaf4a6
to
31ccec0
Compare
降速是无论如何也不能接受的,影响的用户量太大了。 |
我先观察一下 |
未来两周会有点忙,后面再回复,暂时没有时间验证这个,告知一下。 |
要不要另外編譯一版kcptun |
不急,慢慢来,先思考一下。 |
抱歉晚回复,前几周工作上的事有点忙。 |
我始终觉得:
这三者最多同时满足两者。 |
大致上正確 |
@cs8425 有空更新一个最新版本么?感觉你说得有道理,我想测试测试。 |
非常感谢,一回家就开始测试了,手动 merge 了一波。直观感觉效果挺好的~~~ 具体参数还没提供。 对了,go test -race 测试不过。 |
感謝提醒 找到問題點了 |
懶的慢慢修 |
那天晚上为了这个问题我测试到半夜 1 点,现在修复这个问题了?就是 TestParallel2 测试不过,其它改了是没问题的。 |
#18
解決一個慢的stream餓死其他stream的問題
保留原本的token來控制總buffer的使用量
除非夠慢又夠多的stream才會造成餓死的問題
(stream的MaxBuffer * N >= session的MaxBuffer)
config的預設值目前我是抓比較高, 可以看情況調整
每個Session最多16MB (MaxReceiveBuffer)
每個Stream最多16kB (MaxStreamBuffer)
Stream buffer小於4kB的時候允許對面寫入新資料 (MinStreamBuffer)
預設值能允許1024個慢速stream才會造成餓死
假設不被惡意攻擊(對面無視
cmdFUL
控制封包繼續傳)此情況下記憶體使用量 ~= 16MB