gfcptun: un túnel de conexión rápido y de baja latencia que utiliza GFCP sobre UDP.
Ponga a disposición 65535 o más descriptores de archivos por proceso gfcptun.
Se recomienda una MTU de 9000-9702 para enlaces locales de alta velocidad.
Parámetros mínimos de ajuste sysctl
sugeridos para el manejo de UDP de Linux:
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
Aplicación → Salida (8765/TCP) → Internet → Entrada (4321/UDP) → Servidor (8765/TCP)
-mode fast3 -ds 10 -ps 3
, etc. Para ajustar, aumente -rcvwnd
en el cliente y -sndwnd
en el servidor, al unísono.
El tamaño mínimo de la ventana dictará el rendimiento máximo del enlace: ( 'Wnd' * ( 'MTU' / 'RTT' ) )
La MTU debe configurarse mediante el parámetro -mtu y nunca exceder la MTU de la interfaz física. Para enlaces locales de CC/alta velocidad con tramas gigantes, se recomienda encarecidamente utilizar una MTU de 9000-9702.
Ajustar la agresividad del algoritmo de retransmisión:
fast3
→ fast2
→ fast
→ normal
→ default
Aumente -smuxbuf
a 16MiB (o más); sin embargo, el valor real a usar depende de la congestión del enlace así como de la memoria contigua disponible del sistema.
SMUXv2 se puede utilizar para limitar el uso de memoria por flujo. Habilítelo con -smuxver 2
y luego sintonícelo con -streambuf
(tamaño en bytes) .
-smuxver 2 -streambuf 8388608
para un búfer de 8MiB (por transmisión).Comience a ajustar limitando el búfer de transmisión en el lado receptor del enlace.
La configuración de SMUXv2 no se negocia , por lo que debe configurarse manualmente en ambos lados del enlace GFCP.
Recomendación de ajuste de variables del entorno de ejecución GOGC
:
10 - 20 para sistemas con poca memoria y dispositivos integrados
120 - 150 (o superior) para servidores dedicados
Notas sobre el ajuste (GF)SMUX(v1/v2):
El mecanismo del grupo de búfer mantiene una marca de agua alta para que los objetos en tránsito del grupo sobrevivan a la recolección periódica de basura en tiempo de ejecución.
El tiempo de ejecución de Go devolverá la memoria al sistema cuando esté inactivo. Las variables que se pueden utilizar para ajustar esto son -sndwnd
, -rcvwnd
, -ds
y -ps
.
La configuración -smuxbuf
y la variable GOMAXPROCS
se pueden utilizar para ajustar el equilibrio entre el límite de simultaneidad y el uso general de recursos .
Aumentar -smuxbuf
aumentará el límite de concurrencia práctico; sin embargo, el valor -smuxbuf
no es linealmente proporcional al máximo de manejo de concurrencia porque la recolección de basura del tiempo de ejecución de Go no es, a efectos prácticos, determinista.
Sólo las pruebas empíricas pueden proporcionar la retroalimentación necesaria para el ajuste y la optimización de enlaces en el mundo real.
Se admite la compresión opcional (usando Snappy ).
La compresión ahorra ancho de banda en datos redundantes y de baja entropía , pero aumentará la sobrecarga (y el uso de la CPU) en todos los demás casos.
La compresión está habilitada de forma predeterminada : use -nocomp
para deshabilitarla.
USR1
, se mostrará información detallada del enlace. -mode manual -nodelay 1 -interval 20 -resend 2 -nc 1