[TCP]: Limited slow start for Highspeed TCP
Implementation of RFC3742 limited slow start. Added as part of the TCP highspeed congestion control module. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a42e9d6ce8
commit
738980ffa6
@@ -98,6 +98,10 @@ struct hstcp {
|
|||||||
u32 ai;
|
u32 ai;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int max_ssthresh = 100;
|
||||||
|
module_param(max_ssthresh, int, 0644);
|
||||||
|
MODULE_PARM_DESC(max_ssthresh, "limited slow start threshold (RFC3742)");
|
||||||
|
|
||||||
static void hstcp_init(struct sock *sk)
|
static void hstcp_init(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct tcp_sock *tp = tcp_sk(sk);
|
struct tcp_sock *tp = tcp_sk(sk);
|
||||||
@@ -119,9 +123,23 @@ static void hstcp_cong_avoid(struct sock *sk, u32 adk, u32 rtt,
|
|||||||
if (!tcp_is_cwnd_limited(sk, in_flight))
|
if (!tcp_is_cwnd_limited(sk, in_flight))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (tp->snd_cwnd <= tp->snd_ssthresh)
|
if (tp->snd_cwnd <= tp->snd_ssthresh) {
|
||||||
tcp_slow_start(tp);
|
/* RFC3742: limited slow start
|
||||||
else {
|
* the window is increased by 1/K MSS for each arriving ACK,
|
||||||
|
* for K = int(cwnd/(0.5 max_ssthresh))
|
||||||
|
*/
|
||||||
|
if (max_ssthresh > 0 && tp->snd_cwnd > max_ssthresh) {
|
||||||
|
u32 k = max(tp->snd_cwnd / (max_ssthresh >> 1), 1U);
|
||||||
|
if (++tp->snd_cwnd_cnt >= k) {
|
||||||
|
if (tp->snd_cwnd < tp->snd_cwnd_clamp)
|
||||||
|
tp->snd_cwnd++;
|
||||||
|
tp->snd_cwnd_cnt = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (tp->snd_cwnd < tp->snd_cwnd_clamp)
|
||||||
|
tp->snd_cwnd++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
/* Update AIMD parameters */
|
/* Update AIMD parameters */
|
||||||
if (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd) {
|
if (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd) {
|
||||||
while (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd &&
|
while (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd &&
|
||||||
|
Reference in New Issue
Block a user