Closed alexyangjie closed 3 years ago
貌似瓶颈还是在 IO 而不是 CPU,比较希望看到 CPU 占满的测试和并发测试(模拟真实使用场景)
补充:之前有人做类似的测试,CPU 占用率没到 10,所以我猜这里的测试也是这样的情况
除了速度外,还希望看到延迟测试及并发下的延迟测试,似乎会影响体感?(需要稳定的公网线路
貌似瓶颈还是在 IO 而不是 CPU,比较希望看到 CPU 占满的测试和并发测试(模拟真实使用场景)
补充:之前有人做类似的测试,CPU 占用率没到 10,所以我猜这里的测试也是这样的情况
这个测试是在单机上完成的,在一台机器上开客户端和服务端两个实例,然后loadgen 10GB -> 客户端 -> 服务端 -> receiver,不涉及硬盘和任何外部网络,完全是本地回环。第一个测试结果是回环的极限速度,之后的测试都远远低于那个速度,说明瓶颈应该还是CPU。在测试中,TLS对于性能的影响大过具体协议的影响。同样在TLS下,VLESS性能略优于vmess和socks,但相比加密的裸vmess协议还是有差距(主要是TLS和自研加密的差距)
另外这个只是很简单的单线程压力测试,不涉及到握手,自然也就不涉及到延时等外部因素。只是单纯反映协议的计算效率。
补充:CPU图
除了速度外,还希望看到延迟测试及并发下的延迟测试,似乎会影响体感?(需要稳定的公网线路
我这是抛砖引玉,希望有条件的人能测试实际使用状况。包括稳定公网的国际线路和不太稳定的翻墙线路的使用情况。根据我这两天的实际使用情况(境外,非翻墙用途),不论是VLESS + TLS还是裸vmess 还是vmess + TLS,都能轻松达到线路的带宽极限,服务器和客户端都没有太大影响。
感谢测试,看来 TLS 对性能的影响的确比较大,如果是实际使用,还会出现 TLS in TLS,我可能会写个 xTLS 解决此问题。
bare 的 Socks5 比 VLESS 吞吐量大是比较奇怪的(至少应该一样),也可能是因为后者 outbound 的发送行为和 inbound 的读取行为使用了略微特殊的代码,分别实现了协议头向后粘合及先读取首包进行判断,我需要研究看看,也建议重新测试一下
下载,即 outbound 的读取行为则没有先读取首包进行判断,可否测试一下两者下载的吞吐量对比,以便确定是否是这里的问题
补充下torjan的数据。 以下数据在低性能windows笔记本中测得(误差较大)。
v2ray: socks - client - (各种协议) - server - freedom trojan: client - server
一、TCP连接,总数据量5G,每次发送256KB
从服务器读取数据:
协议 速度(MB/s) 与vless对比
loopback 1537 14.78
Vless (tls tcp) 104 1.00
Trojan (tls) 93 0.89
Vless (tls ws) 93 0.89
vmess (tls tcp) 79 0.76
客户端发数据给服务器
协议 速度(MB/s) 与vless对比
loopback 1523 16.55
Trojan (tls) 93 1.01
Vless (tls tcp) 92 1.00
Vless (tls ws) 83 0.90
vmess (tls tcp) 83 0.90
备注:以上测试过程中CPU总使用率Trojan大约60%而V2Ray则是100%
二、发送UDP数据包,每个包1KB,共发10万个包
服务器发包给客户端
协议 包/秒 与vless对比
loopback 54525 4.48
vmess (tls tcp) 12656 1.04
Vless (tls tcp) 12171 1.00
Trojan (tls) 4338 0.36
客户端发包给服务器
协议 包/秒 与vless对比
loopback 59347 5.79
Vless (tls tcp) 10256 1.00
vmess (tls tcp) 10108 0.99
Trojan (tls) 2833 0.28
备注:以上测试过程中CPU总使用率Trojan约80%而V2Ray是100% 测试过程中发现v2ray 4.26的udp有点问题,不过在4.27已经修复了。
利用domainsocket传输怎么差这么多,不是说domainsocket性能更好吗。。。
利用domainsocket传输怎么差这么多,不是说domainsocket性能更好吗。。。
是的,我也觉得奇怪,所以我反复测了几遍,都是一样的结果。
利用domainsocket传输怎么差这么多,不是说domainsocket性能更好吗。。。
是的,我也觉得奇怪,所以我反复测了几遍,都是一样的结果。
socks5 (tls) 196 MB/s socks5 (domainsocket) 182 MB/s
这俩居然相当。 我前面还以为我看错了。 看样子uds目前还是有些问题。
利用domainsocket传输怎么差这么多,不是说domainsocket性能更好吗。。。
是的,我也觉得奇怪,所以我反复测了几遍,都是一样的结果。
不知道vmess/VLESS用uds传输的话 结果怎么样
2020年9月27日更新若干关于tls, xtls, AEAD等对比测试。以下测试采用v2ray v4.29.0进行。
loopback 2844 MB/s
v2ray platform 1024 MB/s
vless (bare) 568 MB/s
socks5 (tcp) 568 MB/s
vmess (bare) 365 MB/s
vmess (no encryption with AEAD) 353 MB/s
vless (tls) 204 MB/s
vmess (bare with tls) 186 MB/s
socks5 (domainsocket) 179 MB/s
vless (xtls) 144 MB/s
2020年9月27日更新若干关于tls, xtls, AEAD等对比测试。以下测试采用v2ray v4.29.0进行。
loopback 2844 MB/s v2ray platform 1024 MB/s vless (bare) 568 MB/s socks5 (tcp) 568 MB/s vmess (bare) 365 MB/s vmess (no encryption with AEAD) 353 MB/s vless (tls) 204 MB/s vmess (bare with tls) 186 MB/s socks5 (domainsocket) 179 MB/s vless (xtls) 144 MB/s
刚好在做一些XTLS的测试,比较有兴趣,XTLS性能情况比较复杂,很希望有更多人能一起测试和比较.
能否告知一下具体的测试方式?
附上我的测试,针对XTLS的 https://github.com/badO1a5A90/v2ray-doc/blob/master/performance_test/XTLS/VLESS_XTLS_3_test_02.md
4.72.2版本时候的各种组合对比测试(4.29.0应该还是有效的),与您的测试的性能排序基本一致(虽然部分性能差异不一样),DS的奇怪问题也一致(在4.26的那个测试文档里,之后我未再用过DS). https://github.com/badO1a5A90/v2ray-doc/blob/master/v2ray%20speed%20test%20v4.27.2.md
除了速度外,还希望看到延迟测试及并发下的延迟测试,似乎会影响体感?(需要稳定的公网线路
一直未能找到v2ray可以用的靠谱的延迟测试方式,可有推荐工具?
2020年9月27日更新若干关于tls, xtls, AEAD等对比测试。以下测试采用v2ray v4.29.0进行。
loopback 2844 MB/s v2ray platform 1024 MB/s vless (bare) 568 MB/s socks5 (tcp) 568 MB/s vmess (bare) 365 MB/s vmess (no encryption with AEAD) 353 MB/s vless (tls) 204 MB/s vmess (bare with tls) 186 MB/s socks5 (domainsocket) 179 MB/s vless (xtls) 144 MB/s
刚好在做一些XTLS的测试,比较有兴趣,XTLS性能情况比较复杂,很希望有更多人能一起测试和比较.
能否告知一下具体的测试方式?
附上我的测试,针对XTLS的 https://github.com/badO1a5A90/v2ray-doc/blob/master/performance_test/XTLS/VLESS_XTLS_3_test_02.md
4.72.2版本时候的各种组合对比测试(4.29.0应该还是有效的),与您的测试的性能排序基本一致(虽然部分性能差异不一样),DS的奇怪问题也一致(在4.26的那个测试文档里,之后我未再用过DS). https://github.com/badO1a5A90/v2ray-doc/blob/master/v2ray%20speed%20test%20v4.27.2.md
测试方法见4楼我的回复。直接在单机上开两个进程,配置为客户端与服务端,然后用loadgen发数据,用的之前v2ray性能测试的脚本。测试不考虑网络状况,只反映该协议组合的计算量,相当于该协议在测试机上的极限性能。
不知道xtls 加解密用的是什么cipher 。也许因为硬解问题干不过普通TLS?
除了速度外,还希望看到延迟测试及并发下的延迟测试,似乎会影响体感?(需要稳定的公网线路
一直未能找到v2ray可以用的靠谱的延迟测试方式,可有推荐工具?
不知道类似工具。不过我经常没事用speedtest.net做一些简单的公网测试。澳洲往香港的公网,一般比较稳定,且延时大到足够区分不同协议的不同。对比bare vmess, tcp with tls, ws + tls等常见协议后发现,首包延时差距较大。ws +tls 大概500多,tcp tls 400多,bare vmess 250左右。但连接建立后,后续传输的延时差距可以忽略不计,基本在2ms内。
如果跑普通的数据,相比于 TLS,XTLS 只多了一些逻辑判断。另外 XTLS 应该用到了硬解(我之后会在文档更新下性能测试的注意事项)
对了,若在 XTLS 特殊功能标记开启(即 xtls-rprx-origin)状态下,发送方和接收方都会不断产生流量识别开销,所以这个数据应该也是符合预期的。
(但如果服务端用了 XTLS 却未标记开启特殊功能,即没填 xtls-rprx-origin,相关开销就会小很多,只剩几处逻辑判断)
2020年9月27日更新若干关于tls, xtls, AEAD等对比测试。以下测试采用v2ray v4.29.0进行。
loopback 2844 MB/s v2ray platform 1024 MB/s vless (bare) 568 MB/s socks5 (tcp) 568 MB/s vmess (bare) 365 MB/s vmess (no encryption with AEAD) 353 MB/s vless (tls) 204 MB/s vmess (bare with tls) 186 MB/s socks5 (domainsocket) 179 MB/s vless (xtls) 144 MB/s
刚好在做一些XTLS的测试,比较有兴趣,XTLS性能情况比较复杂,很希望有更多人能一起测试和比较.
能否告知一下具体的测试方式?
附上我的测试,针对XTLS的 https://github.com/badO1a5A90/v2ray-doc/blob/master/performance_test/XTLS/VLESS_XTLS_3_test_02.md
4.72.2版本时候的各种组合对比测试(4.29.0应该还是有效的),与您的测试的性能排序基本一致(虽然部分性能差异不一样),DS的奇怪问题也一致(在4.26的那个测试文档里,之后我未再用过DS). https://github.com/badO1a5A90/v2ray-doc/blob/master/v2ray%20speed%20test%20v4.27.2.md
那使用ds反而还不如走loopback快???
白话文一直都是说ds更快😂
@XuuKoo
本该是 ds 快,但 v2 的 ds 出入站似乎存在些问题。
测试方法见4楼我的回复。直接在单机上开两个进程,配置为客户端与服务端,然后用loadgen发数据,用的之前v2ray性能测试的脚本。测试不考虑网络状况,只反映该协议组合的计算量,相当于该协议在测试机上的极限性能。
不知道xtls 加解密用的是什么cipher 。也许因为硬解问题干不过普通TLS?
了解了,所以测试的数据流应该是没有经过一次TLS加密的. XTLS的性能优化在于减少了二次加密(原数据已经是TLS的情况下不再次加密,TLS会再次加密 有条件的话,可以测试一下这种情况下XTLS和TLS的对比
原始数据都不是TLS加密的情况倒是没想过去测,XTLS慢一点很合理吧. 但实际场景日常上网现在应该大多都是TLS加密过了吧?
但实际场景日常上网现在应该大多都是TLS加密过了吧?
确实,但是游戏多用的UDP可能没有加密(只是猜测,我也想了解)
(但如果服务端用了 XTLS 却未标记开启特殊功能,即没填 xtls-rprx-origin,相关开销就会小很多,只剩几处逻辑判断)
服务端不填xtls-rprx-origin
,还能进行XTLS连接吗?
确实,但是游戏多用的UDP可能没有加密(只是猜测,我也想了解)
传输 UDP 时不会开启 XTLS 的特殊功能。
(但如果服务端用了 XTLS 却未标记开启特殊功能,即没填 xtls-rprx-origin,相关开销就会小很多,只剩几处逻辑判断)
服务端不填
xtls-rprx-origin
,还能进行XTLS连接吗?
如果你指的是 XTLS 的特殊功能,则不能(文档写了这个参数在服务端和客户端的不同含义)。
那服务端开启XTLS又不填写xtls-rprx-origin
有什么意义吗?😂
(但如果服务端用了 XTLS 却未标记开启特殊功能,即没填 xtls-rprx-origin,相关开销就会小很多,只剩几处逻辑判断)
传输 UDP 时不会开启 XTLS 的特殊功能。
原来如此,我觉得可以这个写进文档里
那服务端开启XTLS又不填写
xtls-rprx-origin
有什么意义吗?😂
这里的“开启”应该改成“使用”:可能没有意义。但可以部分用户填写、部分用户不填写,不填写的只能用普通 TLS 来连。
2020年10月3日更新Trojan相关协议的测试
测试版本:V2Ray v4.30.0
trojan (no tls) 256 MB/s
trojan (tls) 196 MB/s
2020年10月3日更新Trojan相关协议的测试
测试版本:V2Ray v4.30.0
trojan (no tls) 256 MB/s trojan (tls) 196 MB/s
从实际使用来看trojan和vmess感觉不到什么差别(都是TLS+TCP+WEB的方式),clash测试延迟也几乎一样。 唯一不同的是,用netch测试NAT,用vmess的NAT是1,用trojan的时候是2(反而还不如vmess下的NAT等级高)。
我也提供一些游戏延迟的数据,因为没有专门的测量工具,所以主观性比较强,误差可能比较大 测试版本:V2Ray v4.30.0 mux:关闭
协议(加密) 平均延迟 波动范围
vmess (aead auto) 43ms -3ms —— +7ms
vless (xtls) 46ms -6ms —— +15ms
vmess基本不波动,vless波动较大,平均延迟也稍高一些
我也提供一些游戏延迟的数据,因为没有专门的测量工具,所以主观性比较强,误差可能比较大 测试版本:V2Ray v4.30.0 mux:关闭
协议(加密) 平均延迟 波动范围 vmess (aead auto) 43ms -3ms —— +7ms vless (xtls) 46ms -6ms —— +15ms
vmess基本不波动,vless波动较大,平均延迟也稍高一些
日常使用小火箭和clash这俩客户端测试延迟,给我的感觉也是vles波动更大(主观)。
2020年10月11日更新XTLS (xtls-rprx-direct) 的测试。在本次测试中,xtls-rprx-origin由于错误未能完成测试。
测试版本:V2Ray v4.31.0
vless (xtls-rprx-direct) 200 MB/s
vless (xtls-rprx-origin) 196 MB/s
2020年10月11日更新XTLS (xtls-rprx-direct) 的测试。在本次测试中,xtls-rprx-origin由于错误未能完成测试。
测试版本:V2Ray v4.31.0
vless (xtls-rprx-direct) 200 MB/s vless (xtls-rprx-origin) ERROR during test
v4.31.0 中,XTLS 发现传输的数据非 TLSv1.3 或 1.2 时,会自动关闭特殊功能,所以两个算法的数据应该是一样的。
另外根据我的综合经验,v2ray 多一层处理的开销似乎甚至超过了加密本身,准备尝试优化这里的性能。
2020年10月11日更新XTLS (xtls-rprx-direct) 的测试。在本次测试中,xtls-rprx-origin由于错误未能完成测试。 测试版本:V2Ray v4.31.0
vless (xtls-rprx-direct) 200 MB/s vless (xtls-rprx-origin) ERROR during test
v4.31.0 中,XTLS 发现传输的数据非 TLSv1.3 或 1.2 时,会自动关闭特殊功能,所以两个算法的数据应该是一样的。
我传输的数据是用的同样的方式。好像在使用xtls-rprx-origin时v2ray中途crash了,导致没有完成测试。我试了几遍都是一样的。不知道怎么回事。上一个版本没有此问题。
我传输的数据是用的同样的方式。好像在使用xtls-rprx-origin时v2ray中途crash了,导致没有完成测试。我试了几遍都是一样的。不知道怎么回事。上一个版本没有此问题。
这是个奇怪的情况,因为实际上这两种方式在未识别到 TLS data record 前,用到的代码都是一样的。。。
可以看一下是不是配置的问题(两边需要都是 origin 或都是 direct)
可以看一下是不是配置的问题(两边需要都是 origin 或都是 direct)
果然,少加了一个逗号。现在好了。
我的环境,trojan、xtls、vless测速都是50M(同一台伺服器,用nginx把sni隔开所以应该很公平),但浏览网页感觉明显是 xtls > trojan > vless。有什么客观的方法可以测这个差异吗?
另外根据我的综合经验,v2ray 多一层处理的开销似乎甚至超过了加密本身,准备尝试优化这里的性能。
请问xtls可以出独立的工具吗?减少开销
例如 伺服器端:把xtls当成前端,非xtls流量不解开直接转发给nginx或trojan/VLESS/NaiveProxy。 客户端:iptable设定443流量发给xtls,其他port的流量发给trojan/VLESS/NaiveProxy。
使用者自行搭配的弹性也会变大一点。
谢谢
同样无加密 tlsonly的情况下 vmess 多用了19.2%算力
我这边基于计算效率测试的 vless开tls和明文(notls)速度一样 但是效率相差283%. xtls比不开还慢 网速慢20% 计算效率也不是最高的. 比普通tls还慢9-20%
@k79e (这位还没有搞清楚 XTLS 的应用场景)感觉很多时候过于心急,我的建议是经过充分研究再提出有深度的问题或看法。
@RPRX 我用的4.31.2测试的 说明书不是提到 (v4.31.0+ 已解决此问题)
我测速用的是大文件
1L测试不是也是xtls比tls稍微慢一点么. 速度差不多不代表效率一样啊
果真数据用错了 但是现在电脑抽风了 网速变慢一倍不知道咋回事 回环也是那样. 测的xtls比vless快50-60%效率(客户端only 服务端1-2%的区别,又测了一下 服务端xtls效率高50% 客户端236% 对比是vless不开xtls和开xtls的) //是硬解的机器老aes 但是不是aesni
@kousyougi 其实这样解耦才会增加开销,而且 XTLS 需要特殊的控制指令。
目前计划有空时写一个简单的 vless-lite,含 XTLS,也会率先实现 XUDP,之后再改 v2ray 的 UDP。
计划中 vless-lite 还支持 VLESS 正式版的分享链接直接启动。
vless+ws+tls 能比vmess+ws+tls少多少CPU占用,有人测试过吗
vless+ws+tls 能比vmess+ws+tls少多少CPU占用,有人测试过吗
同时去掉ws, vless + tls 的运算效率大概比vmess + tls高8%左右 (204MB/s vs 186MB/s)。加上ws大概折损性能26MB/s。
最近看到VLESS很火,就简单做了一个本地的性能测试。测试使用https://github.com/v2ray/experiments 这里的脚本。同时也顺带做了一下目前其他主流协议的测试。
测试环境:某单核VPS。
所有测试均在该VPS进行,不涉及外网的传输,丢包,延时等情况。以下结果不是一次测出来的,而是分阶段分批次测的。仅供参考。
结果如下(由高到低排序,单位为MB/s,不是Mbps):
可以看到VLESS和不加密的vmess在使用TLS的情况下性能差距不大,相比直接的vmess协议还是有不小差距(即使vmess开启加密也是如此)。裸协议vless比vmess不加密快一些。vless + tls 比 vmess + tls + ws 稍微快一些。
以上几种协议差距在公网的条件下几乎可以忽略,因为基本都超过了G口的速度。不过对于移动设备来说,选择一个高效的协议的确能够省电。