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

Reply via email to