From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
To: dccp@vger.kernel.org
Subject: [PATCH] [DCCP]: Use higher timeout value for nofeedback timer
Date: Thu, 30 Nov 2006 13:18:46 +0000 [thread overview]
Message-ID: <200611301318.46685@strip-the-willow> (raw)
This is the patch which stops the nofeedback timer from spinning
every couple of microseconds, triggered by small RTTs.
However, there are a few more bugs in CCID 3; this is work in progress.
-----------------> Commit Message <-----------------------------------
[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 RTO timeout of 1 second.
By setting the configuration option to 0, RFC 3448 behaviour can
be enforced for the nofeedback timer.
Has been tested to compile and work.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
---
net/dccp/ccids/Kconfig | 22 ++++++++++++++++++++++
net/dccp/ccids/ccid3.c | 20 +++++++++++---------
2 files changed, 33 insertions(+), 9 deletions(-)
--- a/net/dccp/ccids/Kconfig
+++ b/net/dccp/ccids/Kconfig
@@ -89,4 +89,26 @@ config IP_DCCP_CCID3_DEBUG
parameter to 0 or 1.
If in doubt, say N.
+
+config IP_DCCP_CCID3_RTO
+ int "Use higher (TCP) RTO for nofeedback timer"
+ default 1
+ depends on IP_DCCP_CCID3
+ ---help---
+ Use higher (TCP) RTO value for nofeedback expiration.
+
+ 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 option enables to set a higher upper bound for the nofeedback
+ value. Values in units of seconds 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 TCP RTO default (RFC 2988, 2.4).
+
endmenu
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -245,9 +245,10 @@ static void ccid3_hc_tx_no_feedback_time
}
/*
* Schedule no feedback timer to expire in
- * max(4 * R, 2 * s/X) = max(4 * R, 2 * t_ipi)
+ * max(t_RTO, 2 * s/X) = max(t_RTO, 2 * t_ipi)
+ * See comments above regarding the value of t_RTO.
*/
- t_nfb = max(4 * hctx->ccid3hctx_rtt, 2 * hctx->ccid3hctx_t_ipi);
+ t_nfb = max(hctx->ccid3hctx_t_rto, 2 * hctx->ccid3hctx_t_ipi);
break;
case TFRC_SSTATE_NO_SENT:
DCCP_BUG("Illegal %s state NO_SENT, sk=%p", dccp_role(sk), sk);
@@ -481,7 +482,7 @@ static void ccid3_hc_tx_packet_recv(stru
}
ccid3_pr_debug("%s, sk=%p, New RTT estimate=%uus, "
- "r_sample=%us\n", dccp_role(sk), sk,
+ "r_sample=%uus\n", dccp_role(sk), sk,
hctx->ccid3hctx_rtt, r_sample);
/* Update receive rate */
@@ -512,16 +513,17 @@ static void ccid3_hc_tx_packet_recv(stru
*/
sk->sk_write_space(sk);
- /* Update timeout interval. We use the alternative variant of
- * [RFC 3448, 3.1] which sets the upper bound of t_rto to one
- * second, as it is suggested for TCP (see RFC 2988, 2.4). */
+ /* Update timeout interval. A value of IP_DCCP_CCID3_RTO=0
+ * lets the nofeedback timer expire as per [RFC 3448, 3.1];
+ * a value of 1 second corresponds to the RTO suggested for
+ * TCP (see RFC 2988, 2.4). */
hctx->ccid3hctx_t_rto = max_t(u32, 4 * hctx->ccid3hctx_rtt,
- USEC_PER_SEC );
+ CONFIG_IP_DCCP_CCID3_RTO * USEC_PER_SEC);
/*
* Schedule no feedback timer to expire in
- * max(4 * R, 2 * s/X) = max(4 * R, 2 * t_ipi)
+ * max(t_RTO, 2 * s/X) = max(t_RTO, 2 * t_ipi)
*/
- t_nfb = max(4 * hctx->ccid3hctx_rtt, 2 * hctx->ccid3hctx_t_ipi);
+ t_nfb = max(hctx->ccid3hctx_t_rto, 2 * hctx->ccid3hctx_t_ipi);
ccid3_pr_debug("%s, sk=%p, Scheduled no feedback timer to "
"expire in %lu jiffies (%luus)\n",
next reply other threads:[~2006-11-30 13:18 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-30 13:18 Gerrit Renker [this message]
2006-11-30 22:07 ` [PATCH] [DCCP]: Use higher timeout value for nofeedback timer Lars Eggert
2006-12-01 8:10 ` Gerrit Renker
2006-12-01 9:25 ` gorry
2006-12-01 12:53 ` Gerrit Renker
2006-12-01 13:52 ` Gerrit Renker
2006-12-17 23:31 ` Eddie Kohler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200611301318.46685@strip-the-willow \
--to=gerrit@erg.abdn.ac.uk \
--cc=dccp@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox