OpenAFS Master Repository branch, master, updated. BP--openafs-stable-1_6_x-1306-g39484c6
Gerrit Code Review
Tue, 21 Jun 2011 18:53:22 -0700 (PDT)
The following commit has been merged in the master branch:
Author: Simon Wilkinson <email@example.com>
Date: Fri Jun 17 22:06:54 2011 +0100
rx: Compute smoothed RTT per call, not per peer.
RX uses the TCP RTT smoothing algorithm as described in RFC2988.
However, the TCP algorithm is designed to accept samples from a
single connection, accepting a new sample once per RTT.
RFC2988 suggests that "when multiple samples are taken
per RTT the [ alogrithm ] may keep an inadequate RTT history."
In RX's implementation, we use a single instance of this alogrithm
per peer, and input all of the samples from all of the active calls
and connections into this same instance. This leads to us taking
a significantly (potentially many magnitudes) larger number of samples
per RTT, and rapidly losing the RTT history. With RX's implementation,
short lived network events may easily bias the RTT, and cause large
numbers of packets to time out.
This change fixes this by moving the RTT calculation onto a per call
basis. We still update the peer with our caclulated value, so that new
calls may be created with an RTT corresponding to the current value for
the connection, rather than having to start high and converge downwards.
Reviewed-by: Jeffrey Altman <firstname.lastname@example.org>
Reviewed-by: Derrick Brashear <email@example.com>
Tested-by: Derrick Brashear <firstname.lastname@example.org>
src/rx/rx.c | 78 +++++++++++++++++++++++++++++-----------------
src/rx/rx.h | 4 ++-
src/rx/rx_kcommon.c | 22 +++++--------
src/rx/rx_packet.c | 2 -
src/rx/rx_prototypes.h | 1 +
src/rx/rx_user.c | 13 +++----
src/rx/test/testclient.c | 3 +-
7 files changed, 68 insertions(+), 55 deletions(-)
OpenAFS Master Repository