gfcptun: Um túnel de conexão rápido e de baixa latência usando GFCP sobre UDP.
Disponibilize 65.535 ou mais descritores de arquivo por processo gfcptun.
MTU de 9000-9702 é recomendado para links locais de alta velocidade.
Parâmetros mínimos de ajuste sysctl
sugeridos para manipulação de UDP no 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
Aplicação → Saída (8765/TCP) → Internet → Entrada (4321/UDP) → Servidor (8765/TCP)
-mode fast3 -ds 10 -ps 3
, etc. Para ajustar, aumente -rcvwnd
no cliente e -sndwnd
no servidor, em uníssono.
O tamanho mínimo da janela determinará a taxa de transferência máxima do link: ( 'Wnd' * ( 'MTU' / 'RTT' ) )
O MTU deve ser definido pelo parâmetro -mtu e nunca exceder o MTU da interface física. Para links locais DC/de alta velocidade com enquadramento jumbo, é altamente recomendado usar um MTU de 9000-9702.
Ajuste a agressividade do algoritmo de retransmissão:
fast3
→ fast2
→ fast
→ normal
→ default
Aumente -smuxbuf
para 16MiB (ou mais), no entanto, o valor real a ser usado depende do congestionamento do link, bem como da memória contígua do sistema disponível.
SMUXv2 pode ser usado para limitar o uso de memória por fluxo. Habilite com -smuxver 2
e depois ajuste com -streambuf
(tamanho em bytes) .
-smuxver 2 -streambuf 8388608
para um buffer de 8 MiB (por stream).Comece o ajuste limitando o buffer de fluxo no lado receptor do link.
A configuração do SMUXv2 não é negociada , portanto deve ser definida manualmente em ambos os lados do link GFCP.
Recomendação de ajuste de variável de ambiente de tempo de execução GOGC
:
10 - 20 para sistemas com pouca memória e dispositivos embarcados
120 - 150 (ou superior) para servidores dedicados
Notas sobre o ajuste (GF)SMUX(v1/v2):
O mecanismo do pool de buffers mantém um limite alto para objetos em trânsito do pool para sobreviver à coleta de lixo periódica em tempo de execução.
A memória será devolvida ao sistema pelo tempo de execução do Go quando ocioso. As variáveis que podem ser usadas para ajustar isso são -sndwnd
, -rcvwnd
, -ds
e -ps
.
A configuração -smuxbuf
e a variável GOMAXPROCS
podem ser usadas para ajustar o equilíbrio entre o limite de simultaneidade e o uso geral de recursos .
Aumentar -smuxbuf
aumentará o limite prático de simultaneidade, no entanto, o valor -smuxbuf
não é linearmente proporcional ao máximo de manipulação de simultaneidade porque a coleta de lixo do tempo de execução Go é, para fins práticos, não determinística.
Somente testes empíricos podem fornecer o feedback necessário para ajuste e otimização de links no mundo real.
A compactação opcional (usando Snappy ) é suportada.
A compactação economiza largura de banda em dados redundantes e de baixa entropia , mas aumentará a sobrecarga (e o uso da CPU) em todos os outros casos.
A compactação está habilitada por padrão : use -nocomp
para desabilitar.
USR1
, informações detalhadas do link serão exibidas. -mode manual -nodelay 1 -interval 20 -resend 2 -nc 1