Estou interessado em respostas específicas:
- A NIC com GRO edita / cria o TCP ACK ou qualquer outro pacote (ou esse recurso é transparente para as pilhas TCP do receptor / remetente)?
- Deve haver um tempo limite / evento quando a NIC deve passar os "segmentos colados" para a pilha TCP? O que eles são?
- Na configuração do encaminhamento de pacotes - o recurso GRO também tenta ler os ACKs do receptor (veja abaixo por que estou perguntando isso)?
- Qualquer fonte que explique o GRO e também outros recursos de transferência de NIC (TSO, LSO ...) melhor do que as páginas de manual da wikipedia e do linux seria realmente apreciada.
Mais detalhes:
Estou solucionando um problema de desempenho com uma implementação IPSec. O problema é que a largura de banda disponível não é distribuída igualmente nos quatro túneis da VPN (distribuídos aproximadamente como 200MBps / 200MBps / 1MBps / 1MBps; cada túnel VPN encapsula uma conexão TCP única). De vez em quando, no PCAP, vejo que o servidor da web fica ocioso por cerca de 2 segundos (aguardando ACK). O download é retomado quando o servidor da web retransmite segmentos não reconhecidos.
Meu entendimento interno do PCAP é que o NIC GRO apresenta pacotes de cola juntos, mas às vezes não os passa para a pilha TCP em tempo hábil e isso está causando os problemas.
Como este servidor VPN não possui interfaces que terminam conexões TCP, apenas encaminha pacotes. Depois, tentei desativar o GRO e depois observei que o tráfego era distribuído igualmente em todos os túneis. Além disso, quando o dimensionamento da janela TCP está desabilitado no servidor da Web, a largura de banda também é distribuída mesmo com o GRO ativado (é por isso que eu tive a pergunta nº 3).
Estou usando o 2.6.32-27 linux no servidor Ubuntu 10.04 (64 bits). A NIC é Intel 82571EB. Todas as interfaces (cliente HTTP, cliente VPN, servidor VPN, servidor Web) são conectadas diretamente em cadeia com cabos Ethernet de 1Gbit.