-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Inline function to dynamically detect thin streams based on the number of packets in flight. Used to dynamically trigger thin-stream mechanisms if enabled by ioctl or sysctl. Signed-off-by: Andreas Petlund <apetlund@simula.no> Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Andreas Petlund
authored and
David S. Miller
committed
Feb 18, 2010
1 parent
16cad98
commit 5aa4b32
Showing
2 changed files
with
55 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
Thin-streams and TCP | ||
==================== | ||
A wide range of Internet-based services that use reliable transport | ||
protocols display what we call thin-stream properties. This means | ||
that the application sends data with such a low rate that the | ||
retransmission mechanisms of the transport protocol are not fully | ||
effective. In time-dependent scenarios (like online games, control | ||
systems, stock trading etc.) where the user experience depends | ||
on the data delivery latency, packet loss can be devastating for | ||
the service quality. Extreme latencies are caused by TCP's | ||
dependency on the arrival of new data from the application to trigger | ||
retransmissions effectively through fast retransmit instead of | ||
waiting for long timeouts. | ||
|
||
After analysing a large number of time-dependent interactive | ||
applications, we have seen that they often produce thin streams | ||
and also stay with this traffic pattern throughout its entire | ||
lifespan. The combination of time-dependency and the fact that the | ||
streams provoke high latencies when using TCP is unfortunate. | ||
|
||
In order to reduce application-layer latency when packets are lost, | ||
a set of mechanisms has been made, which address these latency issues | ||
for thin streams. In short, if the kernel detects a thin stream, | ||
the retransmission mechanisms are modified in the following manner: | ||
|
||
1) If the stream is thin, fast retransmit on the first dupACK. | ||
2) If the stream is thin, do not apply exponential backoff. | ||
|
||
These enhancements are applied only if the stream is detected as | ||
thin. This is accomplished by defining a threshold for the number | ||
of packets in flight. If there are less than 4 packets in flight, | ||
fast retransmissions can not be triggered, and the stream is prone | ||
to experience high retransmission latencies. | ||
|
||
Since these mechanisms are targeted at time-dependent applications, | ||
they must be specifically activated by the application using the | ||
TCP_THIN_LINEAR_TIMEOUTS and TCP_THIN_DUPACK IOCTLS or the | ||
tcp_thin_linear_timeouts and tcp_thin_dupack sysctls. Both | ||
modifications are turned off by default. | ||
|
||
References | ||
========== | ||
More information on the modifications, as well as a wide range of | ||
experimental data can be found here: | ||
"Improving latency for interactive, thin-stream applications over | ||
reliable transport" | ||
http://simula.no/research/nd/publications/Simula.nd.477/simula_pdf_file |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters