Revision One: Cleaning up the Obvious
In this version of the example program, a few obvious changes have been made that will take initial strides at improving performance. This version of the code is far from performance-tuned, but it is a good incremental step that enables examination of the effects of incrementally better approaches.
Warning
This example of the application provides intentionally poor performance, in order to illustrate performance improvements possible with changes to code. Do not use this code sample in your application; it is for illustration purposes only.
#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;
}
Changes in this Version
This version reflects the following changes:
- Removed SNDBUF=0. The 200 millisecond delays due to unbuffered sends and delayed acknowledgments are removed.
- Removed the Send-Send-Receive behavior. This change eliminates 200-millisecond delays due to Nagle and delayed ACK interactions.
- Removed little-endian assumption. The bytes are now in order.
Remaining Problems
In this version, the following problems remain:
- The application is still connect heavy. Since the 600+ millisecond delays are removed, the application now hits the 12 connects-per-second sustained rate. Many concurrent connections now becomes an issue.
- The application is still fat; unchanged cells are still propagated to the server.
- The application still exhibits poor streaming; 3-byte sends are still small sends.
- The application now sends 2 bytes/RTT, which equals 4 KB/s on directly connected Ethernet. This is not too fast, but TIME-WAIT will likely cause problems first.
- The overhead is down to 99.3%, which is still not a good overhead percentage.
Key Performance Metrics
The following key performance metrics are expressed in Round Trip Time (RTT), Goodput, and Protocol Overhead. See the Network Terminology topic for an explanation of these terms.
This version reflect the following performance metrics:
- Cell Time—2×RTT
- Goodput—2 bytes/RTT
- Protocol Overhead—99.3 percent
Related topics