Surge VIF 是 Surge 的一个重要组成部分,用于在增强模式下接管本机应用请求,和在网关模式下接管其他设备请求。
对于本机上的绝大多数 App,是以代理模式进行的接管,代理模式下性能远高于 VIF 模式。如果不是将 Surge Mac 作为网关使用,无需考虑 VIF 性能问题。
Surge Mac 5 中现在提供三个版本的 VIF 模式,分别为:
- v1:传统模式,TCP 协议栈完全由 Surge 所管理。由于 Surge 运行于 user space,这使得每个数据包均需要由 kernel space 转到 user space 处理。
- v2:5.0 版本加入,使用了 macOS 中的 Packet Filter 机制,利用了 macOS 的 TCP 协议栈,这样避免了 kernel space 和 user space 的切换开销,使得性能大幅提升。但是由于需要修改 pf 设置,导致与虚拟机网络和网络共享功能不兼容。
- v3:5.2 版本加入,绕过了 Packet Filter,使用了另一种技巧去使用 macOS 的 TCP 协议栈,性能比 v2 略低,但是避免了由于调整 pf 设置而引发的兼容性问题。
虽然新的模式下,性能得到了大幅提升,但是由于 macOS 的内核本身不是为服务器所设计,这使得 macOS 在内核网络栈内存占用过高时(最高 256MB),会粗暴的关闭当前资源占用最高的程序的 socket(当然就是 Surge Mac),造成网络中断。在无线客户端建立巨量连接(如使用 BT 下载)时很容易出现。
由于该问题几乎无法解决,这使得我们在技术路线上重新回到由 Surge 完全管理 TCP 协议栈的方案上。在 5.2.3 版本(Build 2345)中,我们针对 ARM64 指令集对 Surge 的 TCP 协议栈做了多项优化,进一步提高了 M1/M2 芯片下 v1 模式的吞吐量。
我们会在未来版本中推出更加完美的技术方案。
性能报告
以下为使用 2533 版本在不同设备下测试获得的性能报告
平台 1:MacBook Pro 2023 (M3)
v1 模式:~ 11 Gbps
v2 模式:~ 37 Gbps
v3 模式:~ 33 Gbps
平台 2:Mac mini 2023 (M2)
v1 模式:~ 9 Gbps
v2 模式:~ 28 Gbps
v3 模式:~ 25 Gbps
平台 3:MacBook Pro 2021 (M1)
v1 模式:~ 8 Gbps
v2 模式:~ 20 Gbps
v3 模式:~ 18 Gbps
平台 4:MacBook Air 2019 (Intel Core i5 1.6GHz)
v1 模式:~ 2 Gbps
v2 模式:~ 7 Gbps
v3 模式:~ 7 Gbps
注:
- 测试使用 iperf3 在回环网络下进行测试,代表了 Surge VIF 处理能力的瓶颈,与使用 Ethernet 测试结果几乎没有区别。(由于 Mac 设备没有 10Gbps 以上网卡,故只能通过回环网络进行测试)
- 请注意以上测试均为单线程测试,多线程下性能会有所提高。由于是单线程测试,所以结果仅与 CPU 的单核心性能相关,核心数量没有影响。
- 以上测试并未使用加密代理转发,若使用加密代理,吞吐量可能有所降低。
- 日常在使用 10Gbps LAN 时,同 LAN 下设备的访问通常不会被 Surge 所接管,所以只需关注是否能满足外网带宽即可。
配置建议
如无特殊需求,请保持 VIF mode 选项为「自动」,Surge 会根据硬件与使用环境,自动选择最合适的模式。
当前版本下「自动」选项的逻辑为:
- 若为 M1/M2/M3 芯片,使用 v1。
- 若为 Intel 芯片,检查是否有安装虚拟机软件(VMware Fusion/Parallels Desktop/Docker),若有使用 v3,没有使用 v2。当遇到内核网络栈重置后,自动以 v1 模式重启。
如果是比较老旧的硬件设备(2018 年以前),且遇到了带宽性能问题,可尝试强制配置 v2 模式以取得最佳性能。