Revisión uno: limpieza de la obvia
En esta versión del programa de ejemplo, se han realizado algunos cambios obvios que tomarán los pasos iniciales para mejorar el rendimiento. Esta versión del código está lejos de optimizar el rendimiento, pero es un buen paso incremental que permite examinar los efectos de enfoques incrementalmente mejores.
Advertencia
En este ejemplo de la aplicación se proporciona un rendimiento intencionadomente deficiente, con el fin de ilustrar las mejoras de rendimiento posibles con los cambios en el código. No use este ejemplo de código en la aplicación; es solo para fines 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;
}
Cambios en esta versión
Esta versión refleja los siguientes cambios:
- Se quitó SNDBUF=0. Se quitan los retrasos de 200 milisegundos debido a envíos no almacenados en el búfer y confirmaciones retrasadas.
- Se ha quitado el comportamiento Send-Send-Receive. Este cambio elimina retrasos de 200 milisegundos debido a interacciones de Nagle y ACK retrasadas.
- Se quitó la suposición little-endian. Los bytes están ahora en orden.
Problemas restantes
En esta versión, los siguientes problemas siguen siendo:
- La aplicación todavía está conectado con mucha carga. Dado que se quitan los retrasos de más de 600 milisegundos, la aplicación alcanza ahora la tasa sostenida de 12 conexiones por segundo. Muchas conexiones simultáneas ahora se convierten en un problema.
- La aplicación sigue siendo grasa; las celdas sin cambios se siguen propagando al servidor.
- La aplicación sigue mostrando un streaming deficiente; Los envíos de 3 bytes siguen siendo envíos pequeños.
- La aplicación ahora envía 2 bytes/RTT, que es igual a 4 KB/s en Ethernet conectado directamente. Esto no es demasiado rápido, pero TIME-WAIT probablemente causará problemas primero.
- La sobrecarga es del 99,3 %, que sigue sin ser un buen porcentaje de sobrecarga.
Métricas clave de rendimiento
Las siguientes métricas clave de rendimiento se expresan en Tiempo de ida y vuelta (RTT), Goodput y Sobrecarga del protocolo. Consulte el tema Terminología de red para obtener una explicación de estos términos.
Esta versión refleja las siguientes métricas de rendimiento:
- Tiempo de celda: 2×RTT
- Goodput: 2 bytes/RTT
- Sobrecarga de protocolo: 99,3 por ciento
Temas relacionados