Compartilhar via


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. Esta versão do código está longe de ser ajustada pelo desempenho, mas é uma boa etapa incremental que permite o exame dos 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; é apenas para fins ilustrativos.

 

#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 de Envio-Envio-Recebimento. Essa alteração elimina atrasos de 200 milissegundos devido ao Nagle e interações ACK atrasadas.
  • Remoção da 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; células inalteradas ainda são propagadas para o servidor.
  • O aplicativo ainda exibe streaming insatisfatório; Os envios de 3 bytes ainda são pequenos envios.
  • O aplicativo agora envia 2 bytes/RTT, que é igual 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 é um bom percentual 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), Goodput 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
  • Goodput — 2 bytes/RTT
  • Sobrecarga de protocolo — 99,3%

Aprimorando um aplicativo lento

Terminologia de rede

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

Revisão 2: Reprojetando para menos conexões

Revisão 3: Envio de Bloco Compactado

Melhorias futuras