Como o GRO (descarregamento de recebimento genérico) funciona em placas de rede mais avançadas?

14

Estou interessado em respostas específicas:

  1. A NIC com GRO edita / cria o TCP ACK ou qualquer outro pacote (ou esse recurso é transparente para as pilhas TCP do receptor / remetente)?
  2. Deve haver um tempo limite / evento quando a NIC deve passar os "segmentos colados" para a pilha TCP? O que eles são?
  3. 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)?
  4. 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.

user389238
fonte

Respostas:

15

Eu achei este artigo incrivelmente útil: JLS2009: transferência de recebimento genérica . Ele fornece uma excelente visão geral de como o GRO funciona.

  1. Alguns adaptadores podem fazer isso, mas os drivers associados também precisam estar cientes disso. Além disso, os próprios drivers podem fazer isso no software. Como isso acontece antes de entrar na pilha TCP / IP do Kernel, no momento em que a pilha TCP / IP do espaço do kernel é totalmente inserida, os pacotes foram reequilibrados.
  2. O tempo limite é definido pela especificação do GRO como um 'tick' de TCP / IP (incremento do campo Time Stamp), que é um número muito pequeno, mas em redes rápidas vários pacotes ainda podem ser recebidos.
  3. O GRO entrará em ação no lado receptor do encaminhador e, de fato, o GRO foi criado para que o método LRO mais ganancioso parasse de estragar os pacotes nos encaminhadores.
  4. Esse artigo ao qual vinculei acima realmente ajuda.

O Ethtool pode ativar / desativar o GRO em interfaces específicas. Depende da versão.

sysadmin1138
fonte
1
Eu atualizei minha pergunta. Parece que você respondeu # 1 no contexto de todos os recursos de descarregamento (o IMHO GRO por si só não gera ACKs - apenas "cola" todos os pacotes para um tiquetaque TCP / IP e os manipula no sistema operacional). Obrigado!
User389238