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