显示标签为“V2Ray”的博文。显示所有博文
显示标签为“V2Ray”的博文。显示所有博文

2017年10月17日星期二

传说中的性能测试

一直都有人问 V2Ray 的性能问题,一直都很无奈因为没有人测过。被问得烦了,现在给一个比较科学,比较准确的结论。

本次测试的目的

测试 VMess 和 Shadowsocks 各种加密方式,在传输过程中的极限速度。

测试方法

在同一台主机上同时启动 V2Ray 客户端和服务器端,使用环回网络(Loopback)进行网络传输。客户端会接受到预设数量的数据,然后验证服务器端发出同样数量的数据。

测试环境

一台云主机,内存 2GB,CPU 信息如下。显然这台机器本身的性能不怎么样,如果用一台更好的机器,会得到更好的绝对数值,但本次实验结果的数值比例有参考价值。
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Model name:            Virtual CPU a7769a6388d5
Stepping:              2
CPU MHz:               2399.996
BogoMIPS:              4799.99
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0,1

测试工具

特地写了两个小工具:loadgen 和 receiver。
loadgen 用于发送数据,它可以对某个端口建立连接,支持直连和 Socks 协议。可配置并发一定数量的连接,发送指定数量的数据后,验证 receiver 的反馈。如果 receiver 收到了同样数量的数据,则表明传输结束。
receiver 用于接收数据,对于每个连接,每次收到数据后,把总共收到的数据字节数发回,并等待连接发起方关闭连接。
由于 VMess 的正确性已被其它的测试验证,这里只需要验证连接畅通,即收到数据量等于发出数据量即可。

基本信息

我们用 loadgen 和 receiver 直接对接,可以得出环回网络的大致性能。实验结果如下:
数据量:50 GB / 连接
并发连接数124
速度(MB/s)426646544551
对比下面实验中的速度,可以认为环回网络的基本速度不会成为瓶颈。
进一步的基础信息,我们又测了一下使用 V2Ray 直连的速度。实验中只启动一个 V2Ray 进程,配置 Dokodemo-door <-> Freedom。实验结果如下:
数据量:10 GB / 连接
并发连接数124
速度(MB/s)640819787

VMess 测试

测试场景的差别是 VMess 的加密方式,其它都一样。传入依然是 Dokodemo-door,传出是 Freedom。
  • VMess CFB: AES-128-CFB 加密方式
  • VMess GCM: AES-128-GCM 加密方式
  • VMess Chacha: Chacha20-poly1305 加密方式
  • VMess None: 不加密
结果如下(数据量:10 GB / 连接):
解读如下:
  • 速度 GCM > Chacha > None > CFB;
  • VMess 可以同时处理多个连接。由于 CPU 是双核,所以 2 个连接的速度比单个连接快,而 4 个连接对比 2 个连接则没有明显提升;
很有趣的一点是 None 居然比 GCM 慢。不加密反而比加密慢,有一点违反常识。原因是这样的:VMess 不管加不加密,都会进行数据校验,None 中使用的校验算法是 FNV,而 GCM 是一个 AEAD 算法,自带校验。于是带 CPU 加成的校验比软件实现的校验快了不小。这一点也超出了开发人员的预期,之后会考虑提升校验的性能。

与 Shadowsocks 对比

V2Ray 和 Shadowsocks 的比较也是一个常见问题。既然我们有了一个性能测试的工具,那就一起测一下吧。
  • V2Ray SS CFB: V2Ray 中的 Shadowsocks 实现,AES-128-CFB 加密方式;
  • SS-Libev CFB: Shadowsocks libev 2.5.6,AES-128-CFB 加密方式,客户端 ss-tunnel,服务器端 ss-server;
  • SSR-PY CFB: ShadowsocksR 最新的代码(2017-01-20),AES-128-CFB 加密方式。其它的参数都是默认的:auth_aes128_md5、tls1.2_ticket_auth_compatible。
OTA 在所有 Shadowsocks 中都启用了。
实验结果(数据量:10 GB / 连接):
解读如下:
  • VMess 的速度优于 Shadowsocks;
  • 比起 ss-libev 和 ssr-python,V2Ray 在多并发连接的场景中更有优势;

结论

  • 在一台双核 2.4 GHz 的主机上,V2Ray 的极限传输速度超过 400 MB/s。
  • 如果你对速度有需求,请使用 VMess + AES-128-GCM。

后记

  • 在日常使用中,传输速度一般都不会超过 10 MB/s,上述测试的每种方式都可以满足需求。但如果你需要高性能传输,可以按测试结果选择合适的方式。
  • 上述的测试结果都是运行多次的平均值。由于虚拟机的不稳定性,误差在 5% 以下。
  • 其它方面的测试,如 CPU 和内存占用,会在后续的测试中进行。
  • loadgen 和 receiver 可以由 iPerf 替代,唯一的问题是 iPerf 不支持 Socks 协议。
  • 上述所有工具和测试脚本的源代码可以在这里找到。

来源:https://steemit.com/cn/@v2ray/3cjiux

适合自己的才是最好的

最近有很多关于 Shadowsocks 安全性以及各种解决方案的讨论,比如这个和这个,还有这个。实际上讨论的范围不仅限于 Shadowsocks,但不可否认它是目前最流行的翻墙工具,所以也是最大的目标。当然了,这类的讨论不会有什么明确的结论,谁都说服不了谁。重要的是大家表达了自己的观点和需求,让旁人也能更好的了解翻墙中可能碰到的各种问题。
于是我也来凑个热闹,说说 V2Ray 的设计理念。
首先,V2Ray 是什么?V2Ray 是一个网络代理工具。什么是代理?代理是当 A 和 B 想说话但不能直接对话时,要找 C 来传话,这时 C 就是代理。那么在这个过程中,C 有哪些职责?很简单,把话传到,把话传对,并且不泄露给除 A、B 之外的人。
看似这个描述很简单,把它应用到代理软件中,可以表述为下面的内容:
  • 开放网络连接,使得 A 和 B 可以间接地进行正常通信;
  • 通信内容不能被第三方知晓;
  • 网络连接要稳定,不能间歇或永久地失效;
之所以没有写成一二三条,是因为上述三条的优先级,在不同的人看来是不一样的。
大多数人的选择应该会是“正常通信”。毕竟翻墙工具诞生的意义就是让用户访问被墙的网站,比如 Google 被墙了,我架设一个 Shadowsocks 服务器就又可以访问 Google 。至于我在 Google 上搜索了什么,都是一些人畜无害的内容,我想别人也没兴趣知道。只要这个工具能让我爽快地访问 Google,它就是一个好工具。这种情况我们称为“速度优先”。
另外一些人可能就比较注重私密性,不管我在搜索一些什么内容,可能也就是一些网红八卦,但我就是不想让别人知道,被别人知道了我就不爽。这种情况我们称为“隐私优先”。
还有一些人对服务器的稳定性有需求,平时我不怎么翻墙,而一旦需要的时候,就一定要可以及时翻出去。几百万的大单,谈不成这个月就要喝西北风了。这些人对翻墙服务(或服务器)的稳定性要求很高,服务不能断线。而断线的情况有很多种,比如翻墙协议被识别了,或者服务器被探测了,都可以造成翻墙服务失效。这种情况我们称为“稳定优先”。
上述的三种情况在翻墙工具中都有相应的功能,比如“速度优先”可能的问题是 ISP 的 QoS 限制,应对方式是流量混淆。又比如“隐私优先”可能需要工具提供完美的加密方式。而“稳定优先”需要翻墙服务器不被探测,翻墙协议需要减少特征。正是由于这些纷繁复杂的功能,引起了大量的讨论。观众不明就里,而开发人员则忙于推销自己的产品。有些问题呢,就越讨论越看不懂了。
从 V2Ray 的角度来看,这是一个不可调和的矛盾。每个人的需求不同,适合自己的才是最好的。不能因为开发人员觉得一项功能好,就强加给用户。用户用着没效果,也不会感谢开发者。
举个例子,Shadowsocks 最近的一次协议升级,使用 AEAD 算法取代了 OTA,提供了更好的加密特性。这个升级在“速度优先”的用户看来是完全没有意义的。因为 AEAD 只是加强了数据完整性,对于 QoS 和可被探测性没有任何改进。也就是说,在客观环境不变的情况下,升级到 AEAD 不会在翻墙速度上有任何提升。于是很多人就会问,到底要不要升级 AEAD,升完对我有什么好处。由于惰性,在没有明显优势的情况下,AEAD 的推广有着很大的阻力。
V2Ray 则尝试从另一个角度来解决这样的问题:提供很多功能,让用户根据自己的需求自由组合。虽然各种组合并不一定能满足所有人的需求,但总比只有一个选择来得好。
对于上述的三个需求,V2Ray 分别提供了不同的特性:
  • 速度优先:VMess 协议、mKCP 协议、Mux.Cool 协议,内部路由分流
  • 隐私优先:TLS (完整实现,非伪装)
  • 稳定优先:HTTP 伪装、BT 伪装等,以及 Mux.Cool 协议。
V2Ray 在设计时已考虑到多个功能相互组合的使用,比如你可以使用 VMess + TLS 来达到隐私和速度的双重保证,或者使用 VMess + Mux 来提升速度和稳定性。也考虑到不同的用户的需求不同,V2Ray 的所有功能都可以选择打开或关闭,不会把任何一个功能强加给用户。不同的配置可以达到不同的效果,而在 V2Ray 中,你只需要一个配置文件就可以应对这些不同的需求。
当然 V2Ray 的功能远不止上述这些,如果你现在的翻墙工具已不能满足你的日常需求,何不试一下新的轮子呢?

来源:https://steemit.com/cn/@v2ray/47wumq