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%
Tópicos relacionados