gfcptun:使用 GFCP over UDP 的快速、低延迟连接隧道。
为每个 gfcptun 进程提供 65535 个或更多文件描述符。
对于高速本地链路,建议使用 9000-9702 的 MTU。
针对 Linux UDP 处理建议的最小sysctl
调整参数:
net.core.rmem_max=26214400 # Tune for BDP (bandwidth delay product)
net.core.rmem_default=26214400
net.core.wmem_max=26214400
net.core.wmem_default=26214400
net.core.netdev_max_backlog=2048 # (Adjust proportional to receive window)
-sockbuf 16777217
client -r " IN:4321 " -l " :8765 " -mode fast3 -nocomp -autoexpire 900 -sockbuf 33554434 -dscp 46
server -t " OUT:8765 " -l " :4321 " -mode fast3 -nocomp -sockbuf 33554434 -dscp 46
应用程序 → 输出 (8765/TCP) → 互联网 → 输入 (4321/UDP) → 服务器 (8765/TCP)
-mode fast3 -ds 10 -ps 3
等。 要进行调整,请同时增加客户端上的-rcvwnd
和服务器上的-sndwnd
。
最小窗口大小将决定最大链路吞吐量:( ( 'Wnd' * ( 'MTU' / 'RTT' ) )
MTU 应通过-mtu 参数设置,并且永远不要超过物理接口的MTU。对于具有巨型帧的 DC/高速本地链路,强烈建议使用 9000-9702 的 MTU。
调整重传算法的攻击性:
fast3
→ fast2
→ fast
→ normal
→ default
然而,将-smuxbuf
提高到 16MiB(或更多),实际使用的值取决于链路拥塞以及可用的连续系统内存。
SMUXv2 可用于限制每个流的内存使用量。使用-smuxver 2
启用,然后使用-streambuf
(大小以字节为单位)进行调整。
-smuxver 2 -streambuf 8388608
表示 8MiB 缓冲区(每个流)。通过限制链路接收端的流缓冲区开始调整。
SMUXv2 配置不可协商,因此必须在 GFCP 链路两侧手动设置。
GOGC
运行时环境变量调优建议:
10 - 20适用于低内存系统和嵌入式设备
专用服务器为120 - 150 (或更高)
有关 (GF)SMUX(v1/v2) 调整的注意事项:
缓冲池机制为池中正在运行的对象维护一个高水位线,以便在定期运行时垃圾回收中幸存下来。
闲置时,Go 运行时会将内存返回给系统。可用于调整的变量有-sndwnd
、 -rcvwnd
、 -ds
和-ps
。
-smuxbuf
设置和GOMAXPROCS
变量可用于调整并发限制和总体资源使用之间的平衡。
增加-smuxbuf
将增加实际并发限制,但是, -smuxbuf
值与并发处理最大值不成线性正比,因为出于实际目的,Go 运行时的垃圾收集是不确定的。
只有经验测试才能提供实际链路调整和优化所需的反馈。
支持可选压缩(使用Snappy )。
压缩可以节省冗余、低熵数据的带宽,但在所有其他情况下会增加开销(和 CPU 使用率)。
默认情况下启用压缩:使用-nocomp
禁用。
USR1
信号后,将显示详细的链接信息。 -mode manual -nodelay 1 -interval 20 -resend 2 -nc 1