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 46Aplicaçã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