This is version three of the patch to increase the minimum
bound of the nofeedback timer. It now features
* millisecond granularity for increased testing comfort
* a more informative configuration menu
This patch is against the very latest tree by acme-2.6.20
======> For testing against 2.6.19 one would need to use
a value of 1000 since this was the default in 2.6.19
calculation of nofeedback timeout.
----------------------> Patchv3 <---------------------------
[DCCP]: Use higher RTO default for CCID3
The TFRC nofeedback timer normally expires after the maximum of 4
RTTs and twice the current send interval (RFC 3448, 4.3). On LANs
with a small RTT this can mean a high processing load and reduced
performance, since then the nofeedback timer is triggered very
frequently. As a result, the sending rate quickly converges towards
zero.
This patch provides a configuration option to set the bound for the
nofeedback timer, using as default the TCP lower bound of 1 second.
By setting the configuration option to 0, strict RFC 3448 behaviour
can be enforced for the nofeedback timer.
Signed-off-by: Gerrit Renker <[EMAIL PROTECTED]>
------------------------------------------------------------------------------
net/dccp/ccids/Kconfig | 23 ++++++++++++++++-------
net/dccp/ccids/ccid3.c | 16 +++++++---------
2 files changed, 23 insertions(+), 16 deletions(-)
------------------------------------------------------------------------------
diff --git a/net/dccp/ccids/Kconfig b/net/dccp/ccids/Kconfig
index d29713c..80f4698 100644
--- a/net/dccp/ccids/Kconfig
+++ b/net/dccp/ccids/Kconfig
@@ -92,8 +92,8 @@ config IP_DCCP_CCID3_DEBUG
config IP_DCCP_CCID3_RTO
int "Use higher bound for nofeedback timer"
- default 1
- depends on IP_DCCP_CCID3
+ default 100
+ depends on IP_DCCP_CCID3 && EXPERIMENTAL
---help---
Use higher lower bound for nofeedback timer expiration.
@@ -104,13 +104,22 @@ config IP_DCCP_CCID3_RTO
frequently.
This option enables to set a higher lower bound for the nofeedback
- value. Values in units of seconds can be set here.
+ value. Values in units of milliseconds can be set here.
A value of 0 disables this feature by enforcing the value specified
- in RFC 3448. It is recommended to use the default value of 1 second,
- as this is also the suggested lower bound for TCP (RFC 2988, 2.4).
+ in RFC 3448. The following values have been suggested as bounds for
+ experimental use:
+ * 16-20ms to match the typical multimedia inter-frame interval
+ * 100ms as a reasonable compromise [default]
+ * 1000ms corresponds to the lower TCP RTO bound (RFC 2988, 2.4)
+
+ The default of 100ms is a compromise between a large value for
+ efficient DCCP implementations, and a small value to avoid
disrupting
+ the network in times of congestion.
+
+ The purpose of the nofeedback timer is to slow DCCP down when there
+ is serious network congestion: experimenting with larger values
should
+ therefore not be performed on WANs.
- Using a value of 2 seconds corresponds to the initial timeout (RFC
- 3448, 4.2); higher values than this should not normally be
necessary.
endmenu
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index 2e43cbf..846af6f 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -246,7 +246,7 @@ static void ccid3_hc_tx_no_feedback_time
/*
* Schedule no feedback timer to expire in
* max(t_RTO, 2 * s/X) = max(t_RTO, 2 * t_ipi)
- * See comments above regarding the value of t_RTO.
+ * See comments in packet_recv() regarding the value of t_RTO.
*/
t_nfb = max(hctx->ccid3hctx_t_rto, 2 * hctx->ccid3hctx_t_ipi);
break;
@@ -514,16 +514,14 @@ static void ccid3_hc_tx_packet_recv(stru
sk->sk_write_space(sk);
/*
- * Update timeout interval for the nofeedback timer:
- *
- * A value of CONFIG_IP_DCCP_CCID3_RTO=0 lets the nofeedback
- * timer expire as per [RFC 3448, 4]; a value of 1 second
- * corresponds to the lower bound suggested for TCP (see RFC
- * 2988, 2.4).
+ * Update timeout interval for the nofeedback timer.
+ * We use a configuration option to increase the lower bound.
+ * This can help avoid triggering the nofeedback timer too often
+ * ('spinning') on LANs with small RTTs.
*/
hctx->ccid3hctx_t_rto = max_t(u32, 4 * hctx->ccid3hctx_rtt,
- (CONFIG_IP_DCCP_CCID3_RTO *
- USEC_PER_SEC));
+ CONFIG_IP_DCCP_CCID3_RTO *
+ (USEC_PER_SEC/1000) );
/*
* Schedule no feedback timer to expire in
* max(t_RTO, 2 * s/X) = max(t_RTO, 2 * t_ipi)
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html