From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
To: dccp@vger.kernel.org
Subject: [PATCH 1/6]: Fix bug in calculation of first t_nom and first t_ipi
Date: Tue, 21 Nov 2006 15:45:07 +0000 [thread overview]
Message-ID: <200611211545.07412@strip-the-willow> (raw)
[DCCP]: Fix bug in calculation of first t_nom and first t_ipi
Problem:
--------
Currently the inter-packet-interval for the first packet is set to 500msec instead
of the 1 second specified in RFC 3448 (detailed derivation below).
Furthermore, the code is complicated, since t_ipi is, in fact, added twice to t_0 = t_now.
Solution:
---------
This patch
* sets the initial value of t_ipi to 1 second, as per RFC 3448
* simplifies the initial setting of t_ipi and t_delta through a case analysis
Detailed Derivation:
--------------------
When the first CCID 3 packet is sent in ccid3_hc_tx_send_packet, t_ipi is set to
hctx->ccid3hctx_t_ipi = TFRC_INITIAL_IPI;
which is USEC_PER_SEC / 4 = 250 msec. This is then added twice to t_0, due to:
case TFRC_SSTATE_NO_SENT:
// ...
/* Set nominal send time for initial packet */
hctx->ccid3hctx_t_nom = now;
timeval_add_usecs(&hctx->ccid3hctx_t_nom, hctx->ccid3hctx_t_ipi);
rc = 0;
break;
// ...
/* Can we send? if so add options and add to packet history */
if (rc = 0) {
// ...
timeval_add_usecs(&hctx->ccid3hctx_t_nom, hctx->ccid3hctx_t_ipi);
}
As a result, t_1 = t_0 + t_ipi = t_now + t_ipi
= t_0 + 500msec
This contradicts RFC 3448, due to the following requirements:
a) Section 4.2, "Sender Initialization"
"the value of X[/s] is set to 1 packet/second [...] The
initial values for R (RTT) and t_RTO are undefined"
b) Section 4.5, "Preventing Oscillations
R_sqmean is undefined since R is undefined
Therefore, X_init = X
c) Section 4.6, "Scheduling of Packet Transmissions"
t_ipi = X_init / s = 1 second
A further simplification is possible for the initial `delta' value, which is
defined in [RFC 3448, section 4.6] as
t_delta = min(t_ipi/2, t_gran/2)
t_gran/2 here is TFRC_OPSYS_HALF_TIME_GRAN = USEC_PER_SEC / (2 * HZ).
Since Linux always schedules with a higher granularity than 1 second,
the initial value of t_delta is thus simply
t_delta = min(USEC_PER_SEC / 2 , USEC_PER_SEC / (2 * HZ))
= USEC_PER_SEC / (2 * HZ)
Lastly, TFRC_INITIAL_IPI is not referenced anywhere else and can thus be removed.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
---
net/dccp/ccids/ccid3.c | 10 +++++-----
net/dccp/ccids/ccid3.h | 2 --
2 files changed, 5 insertions(+), 7 deletions(-)
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -298,13 +298,13 @@ static int ccid3_hc_tx_send_packet(struc
hctx->ccid3hctx_last_win_count = 0;
hctx->ccid3hctx_t_last_win_count = now;
ccid3_hc_tx_set_state(sk, TFRC_SSTATE_NO_FBACK);
- hctx->ccid3hctx_t_ipi = TFRC_INITIAL_IPI;
+ /* First timeout, according to [RFC 3448, 4.2], is 1 second */
+ hctx->ccid3hctx_t_ipi = USEC_PER_SEC;
+ /* Initial delta: minimum of 0.5 sec and t_gran/2 */
+ hctx->ccid3hctx_delta = TFRC_OPSYS_HALF_TIME_GRAN;
- /* Set nominal send time for initial packet */
+ /* Set t_0 for initial packet */
hctx->ccid3hctx_t_nom = now;
- timeval_add_usecs(&hctx->ccid3hctx_t_nom,
- hctx->ccid3hctx_t_ipi);
- ccid3_calc_new_delta(hctx);
rc = 0;
break;
case TFRC_SSTATE_NO_FBACK:
--- a/net/dccp/ccids/ccid3.h
+++ b/net/dccp/ccids/ccid3.h
@@ -49,8 +49,6 @@
/* Two seconds as per CCID3 spec */
#define TFRC_INITIAL_TIMEOUT (2 * USEC_PER_SEC)
-#define TFRC_INITIAL_IPI (USEC_PER_SEC / 4)
-
/* In usecs - half the scheduling granularity as per RFC3448 4.6 */
#define TFRC_OPSYS_HALF_TIME_GRAN (USEC_PER_SEC / (2 * HZ))
next reply other threads:[~2006-11-21 15:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-21 15:45 Gerrit Renker [this message]
2006-11-21 17:54 ` [PATCH 1/6]: Fix bug in calculation of first t_nom and first t_ipi Ian McDonald
2006-11-22 18:24 ` Ian McDonald
2006-11-26 3:27 ` Arnaldo Carvalho de Melo
2006-11-26 4:14 ` Ian McDonald
2006-11-26 16:48 ` Arnaldo Carvalho de Melo
2006-11-27 16:03 ` [PATCH 1/6]: Fix bug in calculation of first t_nom and first Eddie Kohler
2006-11-27 17:13 ` [PATCH 1/6]: Fix bug in calculation of first t_nom and first t_ipi Gerrit Renker
2006-11-27 17:26 ` Arnaldo Carvalho de Melo
2006-11-27 18:00 ` Gerrit Renker
2006-11-27 18:09 ` Arnaldo Carvalho de Melo
2006-11-27 18:13 ` Arnaldo Carvalho de Melo
2006-11-27 18:25 ` Gerrit Renker
2006-11-27 18:25 ` Ian McDonald
2006-11-27 18:30 ` Gerrit Renker
2006-11-27 18:34 ` Arnaldo Carvalho de Melo
2006-11-27 19:36 ` [PATCH 1/6]: Fix bug in calculation of first t_nom and first Eddie Kohler
2006-11-28 11:32 ` [PATCH 1/6]: Fix bug in calculation of first t_nom and first t_ipi Gerrit Renker
2006-11-28 11:57 ` Gerrit Renker
2006-11-28 12:34 ` Arnaldo Carvalho de Melo
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=200611211545.07412@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