Flow field in the configuration

Flow 是 ZBProxy 的重要内容,中文为流控,在 ZBProxy 3.0 中正式加入,通过提供多种用户可选的流控模式,极大提升了数据转发的性能和速率,在众多反向代理程序中拥有最高的性能比。
在 ZBProxy 中,我们提供了auto流控,并设为默认流控,在各个平台都可以自动选择最合适的流控模式,方便用户的使用。
即使这样,我们也建议用户了解以下流控模式的工作原理白话文,以及相关优化方法,以便精确地选择最符合自己的流控模式。

请先阅读

https://github.com/XTLS/Xray-core/discussions/59
据原文数据指出,net.ipv4.ip_forwardnet.ipv6.conf.all.forwarding会大幅影响网络效率,经我本人测试,ZBProxy 的转发效率也会受到这两个设置影响。
建议仔细阅读此文,若不需要 Linux 转发功能,请于/etc/sysctl.conf中检查并关闭这两个功能。

auto

auto 并不是一个实际的流控模式,而是一个自动选择器。
在 Linux 环境下,auto会自动选择使用linux-zerocopy
在 其他 环境下,auto会自动选择使用multiple
⚠️注意:以上为当前版本 master 分支的选择情况,在今后的版本和其他分支中可能会有所不同,应以您使用的副本的实际情况为准。

linux-zerocopy / zerocopy

所有的网络连接事实上都是由系统内核实现并托管,编程语言通过调用系统函数来进行网络操作。因此,在往常的转发过程中,所有数据先会被系统内核读入系统缓冲区,然后再由程序复制到程序的输入缓冲区,并通过程序设计复制到程序的输出缓冲区,最后再通过系统函数调用再复制到系统缓冲区,接着才是通过网络接口发送出去。
因此,传统的转发会产生众多无意义的缓冲区和缓冲区复制,而且系统缓冲区和程序缓冲区之间的复制会产生内核和应用层面的上下文切换,严重影响性能。ZeroCopy 技术的想法是删减掉两个程序缓冲区,减少上下文切换次数;合并两个系统缓冲区,通过pipe直接连同网络输入和网络输出。
linux-zerocopy实现了这样的功能,在生产环境中可以减少一倍的内存消耗和大量CPU复制损耗,大幅提升转发速率。
该流控仅支持使用 Linux 内核的系统,如 Debian、Ubuntu、CentOS、OpenWRT 和 Android。

multiple

直接调用了 Xray-core 实现,等价于 XTLS 的xtls-rprx-direct流控。
此流控会在平台支持时执行多缓冲区读写操作,即同时把数据读入多个缓冲区和从多个缓冲区写入网络接口。
目前全平台(除 Wasm)都实现了此流控模式,因此 Windows 等用户可以选择此流控。
经实验,该流控可以大幅提升传输效率,甚至在部分奇怪场景超过linux-zerocopy,一切应以测试实际为准。

origin

该模式纪念价值大于实际使用价值。

使用 Go语音 内建的复制函数进行转发,内置部分优化,但性能一般。

Where is windows-zerocopy

在研究的路上了...

results matching ""

    No results matching ""