-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
v2ray 的 DS 可能存在性能问题 & v2ray 整体性能提升 #373
Comments
另外 v2ray 的整体性能也。。。需要研究一下问题在哪,优化 CPU 和内存使用(我有一些猜想,晚些时候补充)。 |
貌似其他go程序不这样... |
根据https://github.com/badO1a5A90/v2ray-doc/blob/master/performance_test/DS/20201030.md 做的测试,发现domain socket对性能影响巨大。我自己也做了很多类似的测试,发现确实如此。 以下是我做的实验: nginx配置
v2ray配置:
/dev/shm/nginx下放置着一个大小为300m的名为file的文件(因为内存不够了,我的机器内存只有1gb),/dev/shm还剩下约200m的空间 分别执行
每条命令都重复执行多次,用wget自带的速度显示进行测速,类似下面这样:
测试结果: 第二条 510MB/s 速度刚好为第一条的一半 第六条 370MB/s 其他信息: |
没啥变化,v2ray 测试配置如下,主要测试TCP回落和DS回落的性能差别
iperf3监听10000端口
用socat转发tcp和unix domain socket
TCP回落(port 10004)
DS回落(port 10005)
以上是回滚以后测试的。
结果很接近 |
macOS 10.15.7 下测试,同样配置 |
@xiaokangwang 说 TCP 有特殊优化,本来 DS 也有的(回落的 DS 可能不在这个体系内?) |
怎么优化的啊,我用如下的配置测试
结果还没回落快
直连的速度
同样上面的配置,macOS上测试,直连的速度是通过v2ray的2倍。没Linux上这么夸张。 |
@lucifer9 TG 群反馈 v4.32.0 的入站日志中来源端口均为 0,大概是改 DS 引入的问题 |
如果是用的ws或者h2,这个行为是正常的。 |
所以是否意味着,比如带TLS的情况下,DS应该超过TCP的性能?但以往一些测试中似乎也并非如此.DS一直比TCP要慢. |
VLESS XTLS Direct Mode ReadV Experiment 很成功,少一次内存拷贝,又提升了近一倍性能。回落时的 DS 如果有 ReadV,应该能提升读取返回数据的性能。但控制变量的情况下和 TCP 比还是很奇怪,难道和 v2 内部处理数据转发的方式有关?另外,回落不经过路由和 pipe 机制,数据转发流程很简单,所以跑大量数据时性能甚至能超过 Nginx。这个 pipe 机制读和写都有大锁,可能是 v2 当前性能问题的核心所在,回落的长期稳定还证明了这个 pipe 机制没有绝对必要、可以绕过,即直接对接 reader 和 writer。 https://github.com/v2fly/v2ray-core/blob/master/transport/pipe/impl.go |
这里备忘一下,XTLS Direct Mode 的 ReadV Experiment 同时证明了它在 arm、mips 上都可用,不仅限于桌面平台。待周五的新版本带来更多样本后,如果没有什么问题,将把 v2 的 ReadV 改为全平台开放,预计大幅提升裸 VMess、SS 的性能。 |
This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days |
https://github.com/badO1a5A90/v2ray-doc/blob/master/performance_test/DS/20201030.md
不知道其它 Go 程序是否会这样,但 v2ray 一直是这样。
2020/11/01 更新:
经过 @xiaokangwang 大佬的点拨,发现 v2ray 有针对纯 TCP 的 read 性能优化,之前的确没注意到:
v2ray-core/common/buf/io.go
Lines 61 to 71 in 74f96a8
这里断言出
syscall.Conn
,之后的ReadVReader
,系统直接写入 v2ray 指定的内存中,从而减少一次内存复制。而由于这个修复 47660bf ,DS 是去掉了这项优化的。(其实这里可以先判断一下
runtime.GOOS
)但可以发现,只要多套一层,比如 HTTP 伪装、WebSocket、TLS、PROXY protocol,这项优化就不会起作用了。。。
所以我会据此调整下 XTLS,实现更强的性能。
The text was updated successfully, but these errors were encountered: