-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Try to optimize pipe performance #5409
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
Conversation
|
这个不重要 我好像发现从8.3到8.29之间让回环测试暴跌了将近一半 |
This comment was marked as outdated.
This comment was marked as outdated.
|
似乎来自 这个timeout太重了 |
ReadMultiBufferTimeout() 只会被调用一次吧,ReadMultiBuffer() 看起来也不重啊,r.done 就是 nil,是不是开流量统计了? Lines 39 to 53 in 9cf2211
|
|
那可能是猜错了 |
|
总之确实是从这个版本开始掉了一堆速度 那堆commit里没什么改buffer行为的 就这个commit了 |
|
也可能是中间那个buffer管道没了导致的 可能这个buffer有点必要 |
|
po 下变慢的 回环测试 看看? |
这个测试是 curl 拉 speed.cloudflare.com 已经吃满 100% CPU 了 很确定就是那个commit的问题 我已经重编译试过了 客户端问题 |
|
是write方向是因为这是客户端socks5 write回curl |
17bbad1 to
d5f17ab
Compare
|
我在 v2rayng 上实测了一下 socks outbound -> 电脑端 socks in freedom out -> iperf3 |
我的问题 没说清楚 再仔细看了一下 调用链出在vless outbound的getResponse的buf.Copy的write方向 |
|
好像是这样 看来有时候没有中间商赚差价反而会导致速度变慢 |
|
可以 我稍候在我这个setup试下vless ws |
|
就是这个问题 我试了一下通过非常反模式的方法解决writev问题的话速度就可以回去 甚至比8.3还要快(以非常dirty的方法向量化了整个SingleRrader带来的提升?) |
|
客户端 Android 服务端 Windows iperf3 怎么测都是新版好一点。。 download 平均 313 Mbits/sec --- cpu 占用 upload 325 Mbits/sec --- cpu 占用 要不你把你那边测试最优的发个 build 我再试试 |
|
再看一眼数据 似乎 download 总是 upload 的两倍 cpu。。是哪里拷贝了两次吗? |
|
那很奇怪了 |
|
你这里面还有pipe调用 似乎是来自mux 把mux关了试试 |
|
对了 这个pr本身还是ready to merge的 测试了可以用 热循环里Gosched()肯定不对 |
|
@yuhan6665 |
3bcc247 to
7b2795b
Compare
7b2795b to
8c0d32f
Compare
|
可以合并了吧 |
|
加入了测试结果:我这个带宽太小所以数值过低 不太严谨 但是可以确认新版 copyv 有提升 download 313 Mbits/sec upload 325 Mbits/sec 我看了一下代码 我觉得 4mb 在有些场景还是挺大的 我们加个 env var ? |
|
是我记错默认的pipe buffer了 现在没问题了 从policy拿bufferSize然后除上8192算出channel buffer size |
b439ac6 to
42214c3
Compare
|
简单测试了下 无问题 |
|
|
|
刚发现一点小问题 我先把主线滚回去了 让我再看一下() |
|
@RPRX @yuhan6665 |





减少滥用 runtime.Gosched() (在有buffer的情况下几乎每次write执行一次 对go调度器压力很大)
在土制小测试中可以让 mux cool 的复制效率提升大概 100% 不过test是双端一起的 不知道对服务端的提升大不大
不知道这样稍微改变一点点行为会不会影响别的part