Revisão Um: Limpando o Óbvio

Nesta versão do programa de exemplo, foram feitas algumas alterações óbvias que levarão passos iniciais para melhorar o desempenho. Essa versão do código está longe de ser ajustada pelo desempenho, mas é uma boa etapa incremental que permite examinar os efeitos de abordagens incrementalmente melhores.

Aviso

Este exemplo do aplicativo fornece desempenho intencionalmente ruim, a fim de ilustrar melhorias de desempenho possíveis com alterações no código. Não use este exemplo de código em seu aplicativo; é somente para fins de ilustração.

 

#include <windows.h>

BYTE Set(row, col, bAlive)
{
    SOCKET s = socket(...);
    BYTE byRet = 0;
    BYTE tmp[3];
    tmp[0] = (BYTE)row;
    tmp[1] = (BYTE)col;
    tmp[2] = (BYTE)bAlive;
    bind( s, ... );
    connect( s, ... );
    send( s, &tmp, 3 );
    recv( s, &byRet, 1 );
    closesocket( s );
    return byRet;
}

Alterações nesta versão

Esta versão reflete as seguintes alterações:

  • Removido SNDBUF=0. Os atrasos de 200 milissegundos devido a envios não empacotados e confirmações atrasadas são removidos.
  • Removido o comportamento enviar-enviar-recebimento. Essa alteração elimina atrasos de 200 milissegundos devido a interações de Nagle e ACK atrasadas.
  • Removeu a suposição little-endian. Os bytes agora estão em ordem.

Problemas restantes

Nesta versão, os seguintes problemas permanecem:

  • O aplicativo ainda é pesado para conexão. Como os atrasos de mais de 600 milissegundos são removidos, o aplicativo agora atinge a taxa sustentada de 12 conexões por segundo. Muitas conexões simultâneas agora se tornam um problema.
  • O aplicativo ainda está gordo; as células inalteradas ainda são propagadas para o servidor.
  • O aplicativo ainda exibe streaming ruim; Os envios de 3 bytes ainda são pequenos envios.
  • O aplicativo agora envia 2 bytes/RTT, o que equivale a 4 KB/s na Ethernet conectada diretamente. Isso não é muito rápido, mas TIME-WAIT provavelmente causará problemas primeiro.
  • A sobrecarga caiu para 99,3%, o que ainda não é uma boa porcentagem de sobrecarga.

Principais Métricas de Desempenho

As principais métricas de desempenho a seguir são expressas em RTT (Tempo de Viagem de Ida e Volta), Taxa de Transferência e Sobrecarga de Protocolo. Consulte o tópico terminologia de rede para obter uma explicação desses termos.

Esta versão reflete as seguintes métricas de desempenho:

  • Hora da célula — 2×RTT
  • Boa taxa — 2 bytes/RTT
  • Sobrecarga de protocolo – 99,3%

Aprimorando um aplicativo lento

Terminologia de rede

A versão de linha de base: um aplicativo com desempenho muito ruim

Revisão 2: Reprojetando para conexões menores

Revisão 3: Envio de Bloco Compactado

Melhorias futuras