Compartilhar via


Visão geral do desempenho do TCP/IP

Observação

Este artigo está incluído em uma série de 3 partes. Você pode revisar a Parte 2: Problemas de rede subjacentes ao desempenho do TCP/IP e a Parte 3: Problemas conhecidos do desempenho do TCP/IP.

O desempenho do Transmission Control Protocol/Internet Protocol (TCP/IP) é comparativo. A comparação deve ser realizada com pontos de extremidade idênticos em termos de hardware, caminho de rede e sistema operacional (SO). O desempenho na vida real é diferente porque há vários fatores envolvidos que podem causar um gargalo. Esses fatores geralmente são a rede subjacente, o desenho do TCP e a taxa de transmissão real de E/S de armazenamento.

Leia mais sobre o ajuste de desempenho para definir a configuração de melhor desempenho para os endpoints.

O ajuste automático da janela de recebimento TCP é um recurso definido pelo aplicativo usado para aumentar a escala da conexão para utilizar a largura de banda em redes de alta latência. Por exemplo, se o TCP estiver configurado para usar o nível de ajuste automático para normal e se o aplicativo tiver buffer suficiente definido para a janela TCP, o sistema operacional dimensionará o TCP para o máximo rapidamente. No entanto, esse recurso foi projetado para redes de latência mais alta. Para redes de baixa latência, não há esse requisito, pois não haverá muitos segmentos em tempo real (por exemplo, na infraestrutura de rede).

Para redes de alta latência com uma janela TCP que não é dimensionada para o máximo de uma só vez, há algoritmos como CUBIC, NewReno e Compound TCP para determinar o produto de atraso de largura de banda (BDP) e dimensionar a janela de acordo. O sistema operacional Windows atribui um algoritmo de congestionamento a cada soquete criado.

As configurações de TCP são predefinidas no Windows 10. Use o cmdlet Get-NetTCPSettings para obter as configurações de TCP e use o cmdlet Get-NetTCPConnection para exibir as propriedades de conexão TCP, como endereço IP local ou remoto, porta local ou remota e estado da conexão.

Aqui estão algumas dicas para aumentar a taxa de transferência:

  • Certifique-se de que não há problemas de rede subjacentes (perda de pacotes).
  • Habilite propriedades avançadas da NIC para recursos de desempenho (como quadros Jumbo, RSS/VMQ, recursos de descarregamento e RSC), exceto se houver um problema de compatibilidade de rede subjacente ou para fins de solução de problemas.
  • Certifique-se de que o TCP esteja configurado para usar o nível de ajuste automático como normal.
  • Use a análise do Monitor de Desempenho para garantir que não haja nenhum gargalo de CPU ou de armazenamento.
  • Selecione recursos de segurança com base nos requisitos reais das organizações.
  • Crie uma linha de base.

Ferramenta de teste para taxa de transferência TCP

Para obter a maior taxa de transferência possível para um determinado hardware, você deve ajustar os fatores de desempenho. Certifique-se de que não haja problemas de rede subjacentes (perda de pacotes). Use a ferramenta NTttcp.exe ou ctsTraffic.exe para testar a taxa de transferência. Consulte Ferramentas de desempenho para cargas de trabalho de rede.

Gargalos para taxa de transferência TCP

Não use o monitor de rede nem faça logs de nível de pacote de rede durante os testes de taxa de transferência TCP. Os filtros de monitoramento NDIS (Network Driver Interface Specification) adicionam um atraso para o remetente e os receptores cada vez que um pacote é registrado. Essa operação exige recursos da CPU e gera muitas E/S de armazenamento. O desempenho diminui quando os logs de nível de pacote são obtidos porque o TCP está tentando se recuperar da perda de pacotes.

Adicionar segurança tem seus próprios problemas de custo e desempenho. Protocolos de segurança, como o IPsec, têm sobrecarga e requisitos extras de processamento. Comparando a proteção de dados com a integridade dos dados, o modo de integridade do IPsec deve ser preferido para reduzir o custo de processamento. O software de segurança também tem um custo enorme no processamento de pacotes, o que causará saídas mais lentas.

Se o desempenho testado não corresponder às expectativas, use os logs conforme definido em Contadores de desempenho relacionados à rede.

Depois de verificar se há problemas de desempenho do TCP, verifique os protocolos associados à camada superior, como protocolos do sistema de arquivos (Server Message Block (SMB) ou Network File System (NFS)). Esses protocolos exigem recursos do processador e E/S de disco. A velocidade lenta é causada por um driver ou hardware defeituoso, uma fila DPC (chamada de procedimento adiada) alta e/ou E/S de disco lentas. Descobrir qual componente do sistema operacional está causando altos DPCs é um desafio porque isso requer uma análise usando o log do Xperf/Windows Performance Recorder (WPR) (CPU). Encontrar problemas de lentidão relacionados ao disco é comparativamente mais fácil. Para obter mais informações, consulte Examinando e ajustando o desempenho do disco.

Durante o teste, os aplicativos de teste (aplicativos cliente e servidor) podem ser ajustados para usar vários threads com valores de buffer altos o suficiente para atingir a taxa de transferência máxima. No entanto, isso pode não refletir as condições reais porque o número de threads e buffer que cada chamada de API pode utilizar é limitado com base na programação. Além disso, o protocolo da camada de aplicativo (SMB ou Common Internet File System (CIFS)) tem seu próprio buffer e otimização (Ajuste de desempenho para servidores de arquivos ou SMB: Guia de solução de problemas). Se o aplicativo não funcionar conforme o esperado para a linha de base, trabalhe com um especialista em aplicativos para encontrar o gargalo.

Como criar uma linha de base

Uma linha de base de desempenho deve ser criada para comparar a taxa de transferência atual. Para entender melhor a rede, crie a linha de base no início da implantação.

Uma linha de base é formada pelos seguintes pontos principais:

  • Redes de origem e destino
  • Latência e contagem de saltos entre essas redes
  • Capacidade e configuração do processador/interface
  • Prazo dos testes (horário de trabalho/horário de folga/horário de ponta)
  • Versões do sistema operacional
  • Tração de taxa de transferência e push de taxa de transferência

Observação

Crie a linha de base com os mesmos modelos de servidor (mesmo número de placas NIC e capacidade do processador) para manter o poder de processamento quase igual.

Observe o buffer e acompanhe o número de sessões de transporte criadas pelas ferramentas de teste. Quatro sessões simultâneas de transporte TCP podem avaliar a utilização da CPU uniformemente com o RSS ativado.

Aqui estão as etapas para medir a taxa de transferência e criar uma linha de base:

  1. Baixe a ferramenta ctsTraffic . Aqui está uma descrição de alguns parâmetros da ferramenta ctsTraffic.

    Parâmetro Descrição
    -listen:<IP/*> Essa opção é usada para escuta de porta em servidores. Se * for especificado, a ferramenta ctsTraffic escutará todos os endereços IP disponíveis nessa máquina. Por exemplo, -listen:*.
    -target:<IP> Essa opção é usada em clientes e especifica o endereço IP do servidor no qual ctsTraffic.exe está sendo executado e está no estado de escuta. Por exemplo, -target:192.168.1.10.
    -pattern:pull A ferramenta CtsTraffic usa o padrão Push por padrão. Isso significa que os dados são enviados do cliente para o servidor. Quando essa opção é usada no cliente e no servidor, os dados são recebidos no cliente. Não use essa opção ao executar um teste de push.
    -connections:<num> Essa opção especifica o número de conexões TCP. Os soquetes TCP serão criados a partir do cliente simultaneamente. Oito é comumente usado, pois as filas RSS em placas de rede de nível médio são 8. Por exemplo, -connections:8.
    -iterations:<num> Esta opção especifica o número multiplicado de conexões no -connections:. Por exemplo, -iterations:10. Com 10 iterações, o cliente tentará 80 conexões no total. Se essa opção não for especificada, o cliente continuará tentando 8 conexões até 1000 conexões.
    -statusfilename:<filename.csc> Use essa opção para liberar a opção de nível 1 do console para um .txt arquivo compatível com o Microsoft Excel.
    -connectionfilename:<filename.csv> Use essa opção para liberar detalhes detalhados. Por exemplo, informações de nível de soquete, como o tempo gasto por cada soquete para transferir os dados. Você pode verificar se há algum erro ou solução de problemas avançada com esta opção.
    -consoleverbosity:<0|1|2|3> Essa opção especifica a exibição ou a saída no monitor enquanto o teste está em execução. Por exemplo, -consoleverbosity:1.
  2. Abra o Monitor de Recursos no lado receptor. Por exemplo, se você usar -pattern:pullo , abra-o no cliente, caso contrário, abra-o no servidor.

  3. Inicie a ferramenta ctsTraffic no servidor e execute o seguinte comando:

    Ctstraffic.exe -listen:* -consoleverbosity:1 <-pattern:pull>
    

    Executando o comando ctsTraffic no lado do servidor.

  4. Inicie a ferramenta ctsTraffic no cliente e execute o seguinte comando:

    Ctstraffic.exe -target:<serverip> -consoleverbosity:1 <-pattern:pull> -connections:8 -iterations:10
    

    Executando o comando ctsTraffic no lado do cliente.

  5. Certifique-se de que os processadores do lado receptor sejam utilizados uniformemente. Se não estiverem, verifique o problema com o RSS para descobrir qual deles não funciona conforme o esperado.

    Os detalhes do uso da CPU no lado receptor.

  6. Calcule a taxa de transferência em bits/segundo de acordo com o resultado no cliente. Consulte o exemplo na captura de tela a seguir:

    O resultado do comando ctsTraffic no lado do cliente.

    Neste exemplo, a taxa de transferência é de quase 19 Gb/s e é calculada da seguinte maneira:

    (85.899.349.200 bytes/36,678 segundos) * 8 = 18.735.885.097,33355 (bits/segundo)

Próximas etapas