
Carrying The Workload With TCP
Bill:
Worse, we saw another phenomenon where t
he TCP receive window advertised by the Unix server dropped to 0 bytes and was only able to open the window back up to 4,096 bytes before receiving more data. This occurred despite the fact that the window originally started out at 16,384 bytes.
Scott:
The window size was critical, since the Unix TCP was telling the remote TCP how much data it was willing to accept before the remote TCP must hold off and wait for an acknowledgment (ACK) packet.
Bill:
Armed with this knowledge, we then looked where we could tune TCP in the Unix server.
Scott:
A word to the wise: Change only one variable at a time. If that doesn't have the desired effect by reanalyzing the transactions, then change it back to the original setting, try another parameter and analyze again.
Bill:
In this case, we wanted to star
t by getting the MSS higher than 512 bytes.
Scott:
We knew the Unix machine was capable of utilizing an MSS of more than 512 bytes, because we could see other TCP connections to that machine utilizing an MSS of 1,460 bytes.
Bill:
What was different about those that let them enjoy a higher MSS?
Scott:
In looking at the IP addresses, we noted that the local TCP connections had a different class of IP address than the remote sites.
Bill:
Therefore, we knew that the local connections were probably on the same subnet as the Unix server.
Scott:
Knowing the local subnet mask, we confirmed that this was the case.
Bill:
The Unix server was being conservative by not allowing TCP connections from other subnets to have an MSS of greater than 512 bytes.
Scott:
This is sometimes necessary, because the Unix server has no idea what lies between the t
wo IP subnets.
Bill:
We didn't want our routers to fragment packets into multiple IP datagrams because of MTU mismatches.
Scott:
Recalling our network documentation and checking the MTU of the router's T1 ports at both ends, we determined that the largest "safe" TCP MSS that would work well with all three topologies was 1,460 bytes.
Bill:
We changed the default MSS to 1,460 for remote subnets, reanalyzed and achieved better results.
Scott:
We weren't quite there yet, as the window size was still dropping and was having a hard time keeping it open to the full 16,384 bytes.
Bill:
A call to the Unix vendor had us doubling the TCP receive window to 32,678 bytes.
Scott:
Finally, we were able to see a throughput of more than 1 Mbps, or about a quadruple improvement over our original analysis.
Bill and Scott can be reached at otw@pmg.com. Portions of trace files from selected columns are available via Pine Mountain Group's Home Page (www.pmg.com).
|