|
|
|
| Network Performance Notes
|
|
Knowledge Base ID |
KB06300101 |
| Category | INFORMATION |
|
Effected Product |
Rawether for Windows, the Win32 NDIS Framework |
|
Effected Versions |
All |
| Effected Platforms | All |
![]()
These notes discuss two aspects of network performance:
| TCP Performance - The ability of the network to transport TCP
user data. | |
| NDIS Performance - The ability of a NDIS network monitor to collect packets. |
This is a theoretical discussion that can only provide estimates of performance. These estimates are but one part of the design and development of NDIS packet monitor software. It should be understood that:
Experimentation, instrumentation and measurement is the only way to actually understand the performance of computer systems.
TCP performance is a measure of the ability of a network to transport TCP user data. The performance calculations account for data link and IP/TCP protocol overhead associated with transporting TCP user data for various packet sizes.
These estimates are adapted from Section 24 of TCP/IP Illustrated Volume 1 - The Protocols, by W. Richard Stevens. Published 1994 by Addison-Wesley Publishing, Inc. They are extended to include information of interest to developers of network software for the Windows platform.
The bulk of the performance calculations are based on operation on a 10Mbps Ethernet LAN. Simple scaling is used in the summary to extrapolate to 100Mbps FastEthernet and 1000Mbps Gigabit Ethernet LANs.
In calculating network performance it is convenient to represent inter-packet gap in terms of the time it takes to transmit one "real" network byte. For example, the Ethernet inter-packet gap is 9.6 microseconds, which is the time it takes to transmit 12 "real" network bytes. Where appropriate these "virtual" bytes are enclosed on parentheses "()".
NDIS Performance is a measure of the required capability for a NDIS-based packet monitor to collect packets on the network - theoretically without loss. There are two (2) parameters of interest:
| Packet Data Rate - The number of bytes-per-second that the NDIS monitor must collect. | |
| Packet Frequency - The number of packets-per-second that the NDIS monitor must support. |
In calculating NDIS performance understand that NDIS does not provide a way to observe the 8-byte Ethernet preamble nor the 4-byte Ethernet CRC. Of course, NDIS does not directly observe the inter-packet gap as received bytes.
These notes provide an estimate of the performance of a hypothetical loss-less packet monitor. No consideration is given to the demands of application or driver packet data processing, bandwidth of logging facilities, network adapter capabilities, etc.
![]()
The Tables below provide a summary of the performance estimates:
| 10Mbps Ethernet Performance Summary | |
| 100Mbps FastEthernet Performance Summary | |
| 1000Mbps Gigabit Ethernet Performance Summary |
| 10Mbps Ethernet Performance Summary | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| 100Mbps Ethernet Performance Summary | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| 1000Mbps Ethernet Performance Summary | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
The detailed calculations used to provided these estimates are provided below. This is just simple arithmetic...
| MTU 1500, MSS 1460 Performance Calcularions | |
| MTU 576, MSS 536 Performance Calculations | |
| Small Packet - SS 256 Performance Calculations | |
| Runt Packet Performance Calculations |
![]()
There are two fairly obvious conclusions that can be distilled from the performance estimates:
- NDIS Throughput Requirement - This varies so little that the NDIS throughput design goal is basically the theoretical performance of the network media.
- Runt Packet Frequency Support Requirement - The packet frequency of minimum size ("runt") packets places significant demands on the design and implementation of a packet monitor.
The runt packet frequency is particularly intimidating. On the slowest 10Mbps LAN the run packet frequency is 14,880 packets/second. If each runt packet is lifted from kernel-space to user-space, then there would be 14,880 kernel-user transitions per second. Even if this could be achieved on high-performance systems it is clear that a goal of an NDIS packet monitor would be to reduce the number of these transitions.
|
NDIS |
Runt Packet Frequency packets/sec |
|
|---|---|---|
| 10Mbps Ethernet | 1,250,000 | 14,880 |
| 100Mbps FastEthernet | 12,500,000 | 148,800 |
| 100Mbps Gigabit Ethernet | 125,000,000 | 1,488,000 |
![]()
This is the performance on a 10Mbps local area network.
| Field | Data #bytes |
ACK #bytes |
|---|---|---|
| Ethernet preamble |
8 |
8 |
| Ethernet destination address |
6 |
6 |
| Ethernet source address |
6 |
6 |
| Ethernet type field |
2 |
2 |
| IP Header |
20 |
20 |
| TCP Header |
20 |
20 |
| User data |
1460 |
0 |
| Pad (to Ethernet minimum) |
0 |
6 |
| Ethernet CRC |
4 |
4 |
| Interpacket gap (9.6 microsecond) |
(12) |
(12) |
| Total | 1538 | 84 |
If the TCP window is opened to its maximum size (65535, not using the window scale option), this allows a window of 44 1460-byte segments. It the receiver sends an ACK every 22nd segment the throughput calculation becomes:
|
throughput = |
22 x 1460 bytes |
x |
10,000,000 bits/sec |
= 1,183,667 bytes/sec |
|
22 x 1538 bytes + 84 bytes |
8 bits/byte |
Under the same conditions a NDIS-based network monitor would observe 1514 bytes of each TCP data packet and 60 bytes of each ACK packet. The corresponding NDIS throughput would be:
|
NDIS throughput = |
22 x 1514 bytes + 60 bytes |
x |
10,000,000 bits/sec |
= 1,229,658 bytes/sec |
22 x 1538 bytes + 84 bytes |
8 bits/byte |
Here is an estimate of the packet frequency that NDIS would observe during an interval where the 22 TCP data packets and the ACK were exchanged:
|
NDIS packet throughput = |
22 + 1 |
x |
10,000,000 bits/sec |
= 848 packets/sec |
22 x 1538 bytes + 84 bytes |
8 bits/byte |
![]()
This is the performance observed when accessing the Internet using a 10Mbps local area network where the remote MTU is throttled to the traditional 576-byte limit.
| Field | Data #bytes |
ACK #bytes |
|---|---|---|
| Ethernet preamble |
8 |
8 |
| Ethernet destination address |
6 |
6 |
| Ethernet source address |
6 |
6 |
| Ethernet type field |
2 |
2 |
| IP Header |
20 |
20 |
| TCP Header |
20 |
20 |
| User data |
536 |
0 |
| Pad (to Ethernet minimum) |
0 |
6 |
| Ethernet CRC |
4 |
4 |
| Interpacket gap (9.6 microsecond) |
(12) |
(12) |
| Total | 614 | 84 |
If the TCP window is opened to its maximum size (65535, not using the window scale option), this allows a window of 122 536-byte segments. It the receiver sends an ACK every 61th segment the throughput calculation becomes:
|
throughput = |
61 x 536 bytes |
x |
10,000,000 bits/sec |
= 1,088,763 bytes/sec |
|
61 x 614 bytes + 84 bytes |
8 bits/byte |
Under the same conditions a NDIS-based network monitor would observe 590 bytes of each TCP data packet and 60 bytes of each ACK packet. The corresponding NDIS throughput would be:
|
NDIS throughput = |
61 x 590 bytes + 60 bytes |
x |
10,000,000 bits/sec |
= 1,200,450 bytes/sec |
61 x 614 bytes + 84 bytes |
8 bits/byte |
Here is an estimate of the packet frequency that NDIS would observe during an interval where the 61 TCP data packets and the ACK were exchanged:
|
NDIS packet throughput = |
61 + 1 |
x |
10,000,000 bits/sec |
= 2,065 packets/sec |
61 x 614 bytes + 84 bytes |
8 bits/byte |
![]()
This is the performance for a continuous stream of "small" (256-byte SS) packets on a 10Mbps local area network.
| Field | Data #bytes |
ACK #bytes |
|---|---|---|
| Ethernet preamble |
8 |
8 |
| Ethernet destination address |
6 |
6 |
| Ethernet source address |
6 |
6 |
| Ethernet type field |
2 |
2 |
| IP Header |
20 |
20 |
| TCP Header |
20 |
20 |
| User data |
256 |
0 |
| Pad (to Ethernet minimum) |
0 |
6 |
| Ethernet CRC |
4 |
4 |
| Interpacket gap (9.6 microsecond) |
(12) |
(12) |
| Total | 334 | 84 |
If the TCP window is opened to its maximum size (65535, not using the window scale option), this allows a window of 256 256-byte segments. It the receiver sends an ACK every 128th segment the throughput calculation becomes:
|
throughput = |
128 x 256 bytes |
x |
10,000,000 bits/sec |
= 956,205 bytes/sec |
|
128 x 334 bytes + 84 bytes |
8 bits/byte |
Under the same conditions a NDIS-based network monitor would observe 310 bytes of each TCP data packet and 60 bytes of each ACK packet. The corresponding NDIS throughput would be:
|
NDIS throughput = |
128 x 310 bytes + 60 bytes |
x |
10,000,000 bits/sec |
= 1,159,655 bytes/sec |
128 x 334 bytes + 84 bytes |
8 bits/byte |
Here is an estimate of the packet frequency that NDIS would observe during an interval where the 128 TCP data packets and the ACK were exchanged:
|
NDIS packet throughput = |
128 + 1 |
x |
10,000,000 bits/sec |
= 3,764 packets/sec |
128 x 334 bytes + 84 bytes |
8 bits/byte |
![]()
This is the performance for a continuous stream of minimum size ("runt") packets on a 10Mbps local area network. This condition produces the maximum packet frequency.
| Field | #bytes |
|---|---|
| Ethernet preamble |
8 |
| Ethernet destination address |
6 |
| Ethernet source address |
6 |
| Ethernet type field |
2 |
| IP Header |
20 |
| TCP Header |
20 |
| User data |
6 |
| Pad (to Ethernet minimum) |
0 |
| Ethernet CRC |
4 |
| Interpacket gap (9.6 microsecond) |
(12) |
| Total | 84 |
...:
|
throughput = |
6 bytes |
x |
10,000,000 bits/sec |
= 1,088,783 bytes/sec |
|
84 bytes |
8 bits/byte |
A NDIS-based network monitor would observe 60 bytes of each runt TCP data packet:
|
NDIS throughput = |
60 bytes |
x |
10,000,000 bits/sec |
= 892,857 bytes/sec |
84 bytes |
8 bits/byte |
Here is an estimate of the packet frequency that NDIS would observe when runt packets are sent continuously:
|
NDIS packet throughput = |
1 |
x |
10,000,000 bits/sec |
= 14,880 packets/sec |
84 bytes |
8 bits/byte |
Note the "magic number" 14,880 packets-per-second! You may see this number in the specification for routers and other network products as the "forward rate". Achieving this rate means that the product can forward a continuous flood of runt packets without loss.
![]()
| June 30, 2001 | Initial release. |
![]()
| Keywords | RAWETHER,NDIS,PERFORMANCE |
| Created | June 30, 2001 |
| Last Reviewed | June 30, 2001 |
![]()
Mailing Lists ·
PCAUSA Newsletter
·
PCAUSA Discussion List
|