Re: [PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
Minor comments: 1. Please move div64_64 out of yeah-tcp (and cubic where you copied it). to asm-generic/div64.h 2. Don't need separate tcp_yeah.h just put it in tcp_yeah.c. Also, maybe the vegas stuff you copied should go in one place? tcp/vegas.h? 3. whitespace: don't do: x+=someexpression ... = max( x, ... instead: x += someexpression ... = max(x, ... Using indent script in scripts/Lindent will fix these. 4. See if you can replace uses of min_t and max_t with min and max by having proper matching types on args. Basically if you need to cast maybe original type was wrong. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
Thanks, I'll check for formatting errors in the future. 2007/2/22, David Miller <[EMAIL PROTECTED]>: Applied to tcp-2.6 GIT, there were a lot of broken whitespace issues in your patch, GIT makes mention of them quite happily even without applying the patch, which I recommend you do in the future so I don't have to fix up your patches. The command I use (best with 1.5.0 GIT) is: git apply --check --whitespace=error-all file.patch Thanks. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
From: "Angelo P. Castellani" <[EMAIL PROTECTED]> Date: Mon, 19 Feb 2007 11:30:58 +0100 > From: Angelo P. Castellani <[EMAIL PROTECTED]> > > YeAH-TCP is a sender-side high-speed enabled TCP congestion control > algorithm, which uses a mixed loss/delay approach to compute the > congestion window. It's design goals target high efficiency, internal, > RTT and Reno fairness, resilience to link loss while keeping network > elements load as low as possible. > > For further details look here: > http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf > > Signed-off-by: Angelo P. Castellani <[EMAIL PROTECTED]> Applied to tcp-2.6 GIT, there were a lot of broken whitespace issues in your patch, GIT makes mention of them quite happily even without applying the patch, which I recommend you do in the future so I don't have to fix up your patches. The command I use (best with 1.5.0 GIT) is: git apply --check --whitespace=error-all file.patch Thanks. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
The patch. Angelo P. Castellani ha scritto: From: Angelo P. Castellani <[EMAIL PROTECTED]> YeAH-TCP is a sender-side high-speed enabled TCP congestion control algorithm, which uses a mixed loss/delay approach to compute the congestion window. It's design goals target high efficiency, internal, RTT and Reno fairness, resilience to link loss while keeping network elements load as low as possible. For further details look here: http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf Signed-off-by: Angelo P. Castellani <[EMAIL PROTECTED]> --- This is the YeAH-TCP implementation of the algorithm presented to PFLDnet2007 (http://wil.cs.caltech.edu/pfldnet2007/). Regards, Angelo P. Castellani Kconfig| 14 ++ Makefile |1 tcp_yeah.c | 288 + tcp_yeah.h | 134 4 files changed, 437 insertions(+) diff -uprN linux-2.6.20-a/net/ipv4/Kconfig linux-2.6.20-b/net/ipv4/Kconfig --- linux-2.6.20-a/net/ipv4/Kconfig 2007-02-04 19:44:54.0 +0100 +++ linux-2.6.20-b/net/ipv4/Kconfig 2007-02-19 10:52:46.0 +0100 @@ -574,6 +574,20 @@ config TCP_CONG_VENO loss packets. See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf +config TCP_CONG_YEAH + tristate "YeAH TCP" + depends on EXPERIMENTAL + default n + ---help--- + YeAH-TCP is a sender-side high-speed enabled TCP congestion control + algorithm, which uses a mixed loss/delay approach to compute the + congestion window. It's design goals target high efficiency, + internal, RTT and Reno fairness, resilience to link loss while + keeping network elements load as low as possible. + + For further details look here: + http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf + choice prompt "Default TCP congestion control" default DEFAULT_CUBIC diff -uprN linux-2.6.20-a/net/ipv4/Makefile linux-2.6.20-b/net/ipv4/Makefile --- linux-2.6.20-a/net/ipv4/Makefile 2007-02-04 19:44:54.0 +0100 +++ linux-2.6.20-b/net/ipv4/Makefile 2007-02-19 10:52:46.0 +0100 @@ -49,6 +49,7 @@ obj-$(CONFIG_TCP_CONG_VEGAS) += tcp_vega obj-$(CONFIG_TCP_CONG_VENO) += tcp_veno.o obj-$(CONFIG_TCP_CONG_SCALABLE) += tcp_scalable.o obj-$(CONFIG_TCP_CONG_LP) += tcp_lp.o +obj-$(CONFIG_TCP_CONG_YEAH) += tcp_yeah.o obj-$(CONFIG_NETLABEL) += cipso_ipv4.o obj-$(CONFIG_XFRM) += xfrm4_policy.o xfrm4_state.o xfrm4_input.o \ diff -uprN linux-2.6.20-a/net/ipv4/tcp_yeah.c linux-2.6.20-b/net/ipv4/tcp_yeah.c --- linux-2.6.20-a/net/ipv4/tcp_yeah.c 1970-01-01 01:00:00.0 +0100 +++ linux-2.6.20-b/net/ipv4/tcp_yeah.c 2007-02-19 10:52:46.0 +0100 @@ -0,0 +1,288 @@ +/* + * + * YeAH TCP + * + * For further details look at: + *http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf + * + */ + +#include "tcp_yeah.h" + +/* Default values of the Vegas variables, in fixed-point representation + * with V_PARAM_SHIFT bits to the right of the binary point. + */ +#define V_PARAM_SHIFT 1 + +#define TCP_YEAH_ALPHA 80 //lin number of packets queued at the bottleneck +#define TCP_YEAH_GAMMA1 //lin fraction of queue to be removed per rtt +#define TCP_YEAH_DELTA3 //log minimum fraction of cwnd to be removed on loss +#define TCP_YEAH_EPSILON 1 //log maximum fraction to be removed on early decongestion +#define TCP_YEAH_PHY 8 //lin maximum delta from base +#define TCP_YEAH_RHO 16 //lin minumum number of consecutive rtt to consider competition on loss +#define TCP_YEAH_ZETA50 //lin minimum number of state switchs to reset reno_count + +#define TCP_SCALABLE_AI_CNT 100U + +/* YeAH variables */ +struct yeah { + /* Vegas */ + u32 beg_snd_nxt; /* right edge during last RTT */ + u32 beg_snd_una; /* left edge during last RTT */ + u32 beg_snd_cwnd; /* saves the size of the cwnd */ + u8 doing_vegas_now;/* if true, do vegas for this RTT */ + u16 cntRTT; /* # of RTTs measured within last RTT */ + u32 minRTT; /* min of RTTs measured within last RTT (in usec) */ + u32 baseRTT; /* the min of all Vegas RTT measurements seen (in usec) */ + + /* YeAH */ + u32 lastQ; + u32 doing_reno_now; + + u32 reno_count; + u32 fast_count; + + u32 pkts_acked; +}; + +static void tcp_yeah_init(struct sock *sk) +{ + struct tcp_sock *tp = tcp_sk(sk); + struct yeah *yeah = inet_csk_ca(sk); + + tcp_vegas_init(sk); + + yeah->doing_reno_now = 0; + yeah->lastQ = 0; + + yeah->reno_count = 2; + + /* Ensure the MD arithmetic works. This is somewhat pedantic, + * since I don't think we will see a cwnd this large. :) */ + tp->snd_cwnd_clamp = min_t(u32, tp->snd_cwnd_clamp, 0x/128); + +} + + +static void tcp_yeah_pkts_acked(struct sock *sk, u32 pkts_acked) +{ + const struct inet_connection_sock *icsk = inet_csk(sk); + struct yeah *yeah = inet_csk_ca(sk); + + if (icsk->icsk_ca_state == TCP_CA_Open) + yeah->pkts_acked = pkts_acked; +} + +/* 64bit divisor, dividend and result. dynamic precision */ +static inline u64 div64_64(u64 dividend, u64 divisor) +{
[PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
From: Angelo P. Castellani <[EMAIL PROTECTED]> YeAH-TCP is a sender-side high-speed enabled TCP congestion control algorithm, which uses a mixed loss/delay approach to compute the congestion window. It's design goals target high efficiency, internal, RTT and Reno fairness, resilience to link loss while keeping network elements load as low as possible. For further details look here: http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf Signed-off-by: Angelo P. Castellani <[EMAIL PROTECTED]> --- This is the YeAH-TCP implementation of the algorithm presented to PFLDnet2007 (http://wil.cs.caltech.edu/pfldnet2007/). Regards, Angelo P. Castellani Kconfig| 14 ++ Makefile |1 tcp_yeah.c | 288 + tcp_yeah.h | 134 4 files changed, 437 insertions(+) - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/2][TCP] YeAH-TCP: algorithm implementation
From: Angelo P. Castellani <[EMAIL PROTECTED]> YeAH-TCP is a sender-side high-speed enabled TCP congestion control algorithm, which uses a mixed loss/delay approach to compute the congestion window. It's design goals target high efficiency, internal, RTT and Reno fairness, resilience to link loss while keeping network elements load as low as possible. For further details look here: http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf Signed-off-by: Angelo P. Castellani <[EMAIL PROTECTED]> --- This is the YeAH-TCP implementation of the algorithm presented to PFLDnet2007 (http://wil.cs.caltech.edu/pfldnet2007/). Regards, Angelo P. Castellani Kconfig| 14 ++ Makefile |1 tcp_yeah.c | 288 + tcp_yeah.h | 134 4 files changed, 437 insertions(+) diff -uprN linux-2.6.20-a/net/ipv4/Kconfig linux-2.6.20-b/net/ipv4/Kconfig --- linux-2.6.20-a/net/ipv4/Kconfig 2007-02-04 19:44:54.0 +0100 +++ linux-2.6.20-b/net/ipv4/Kconfig 2007-02-19 10:52:46.0 +0100 @@ -574,6 +574,20 @@ config TCP_CONG_VENO loss packets. See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf +config TCP_CONG_YEAH + tristate "YeAH TCP" + depends on EXPERIMENTAL + default n + ---help--- + YeAH-TCP is a sender-side high-speed enabled TCP congestion control + algorithm, which uses a mixed loss/delay approach to compute the + congestion window. It's design goals target high efficiency, + internal, RTT and Reno fairness, resilience to link loss while + keeping network elements load as low as possible. + + For further details look here: + http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf + choice prompt "Default TCP congestion control" default DEFAULT_CUBIC diff -uprN linux-2.6.20-a/net/ipv4/Makefile linux-2.6.20-b/net/ipv4/Makefile --- linux-2.6.20-a/net/ipv4/Makefile 2007-02-04 19:44:54.0 +0100 +++ linux-2.6.20-b/net/ipv4/Makefile 2007-02-19 10:52:46.0 +0100 @@ -49,6 +49,7 @@ obj-$(CONFIG_TCP_CONG_VEGAS) += tcp_vega obj-$(CONFIG_TCP_CONG_VENO) += tcp_veno.o obj-$(CONFIG_TCP_CONG_SCALABLE) += tcp_scalable.o obj-$(CONFIG_TCP_CONG_LP) += tcp_lp.o +obj-$(CONFIG_TCP_CONG_YEAH) += tcp_yeah.o obj-$(CONFIG_NETLABEL) += cipso_ipv4.o obj-$(CONFIG_XFRM) += xfrm4_policy.o xfrm4_state.o xfrm4_input.o \ diff -uprN linux-2.6.20-a/net/ipv4/tcp_yeah.c linux-2.6.20-b/net/ipv4/tcp_yeah.c --- linux-2.6.20-a/net/ipv4/tcp_yeah.c 1970-01-01 01:00:00.0 +0100 +++ linux-2.6.20-b/net/ipv4/tcp_yeah.c 2007-02-19 10:52:46.0 +0100 @@ -0,0 +1,288 @@ +/* + * + * YeAH TCP + * + * For further details look at: + *http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf + * + */ + +#include "tcp_yeah.h" + +/* Default values of the Vegas variables, in fixed-point representation + * with V_PARAM_SHIFT bits to the right of the binary point. + */ +#define V_PARAM_SHIFT 1 + +#define TCP_YEAH_ALPHA 80 //lin number of packets queued at the bottleneck +#define TCP_YEAH_GAMMA1 //lin fraction of queue to be removed per rtt +#define TCP_YEAH_DELTA3 //log minimum fraction of cwnd to be removed on loss +#define TCP_YEAH_EPSILON 1 //log maximum fraction to be removed on early decongestion +#define TCP_YEAH_PHY 8 //lin maximum delta from base +#define TCP_YEAH_RHO 16 //lin minumum number of consecutive rtt to consider competition on loss +#define TCP_YEAH_ZETA50 //lin minimum number of state switchs to reset reno_count + +#define TCP_SCALABLE_AI_CNT 100U + +/* YeAH variables */ +struct yeah { + /* Vegas */ + u32 beg_snd_nxt; /* right edge during last RTT */ + u32 beg_snd_una; /* left edge during last RTT */ + u32 beg_snd_cwnd; /* saves the size of the cwnd */ + u8 doing_vegas_now;/* if true, do vegas for this RTT */ + u16 cntRTT; /* # of RTTs measured within last RTT */ + u32 minRTT; /* min of RTTs measured within last RTT (in usec) */ + u32 baseRTT; /* the min of all Vegas RTT measurements seen (in usec) */ + + /* YeAH */ + u32 lastQ; + u32 doing_reno_now; + + u32 reno_count; + u32 fast_count; + + u32 pkts_acked; +}; + +static void tcp_yeah_init(struct sock *sk) +{ + struct tcp_sock *tp = tcp_sk(sk); + struct yeah *yeah = inet_csk_ca(sk); + + tcp_vegas_init(sk); + + yeah->doing_reno_now = 0; + yeah->lastQ = 0; + + yeah->reno_count = 2; + + /* Ensure the MD arithmetic works. This is somewhat pedantic, + * since I don't think we will see a cwnd this large. :) */ + tp->snd_cwnd_clamp = min_t(u32, tp->snd_cwnd_clamp, 0x/128); + +} + + +static void tcp_yeah_pkts_acked(struct sock *sk, u32 pkts_acked) +{ + const struct inet_connection_sock *icsk = inet_csk(sk); + struct yeah *yeah = inet_csk_ca(sk); + + if (icsk->icsk_ca_state == TCP_CA_Open) + yeah->pkts_acked = pkts_acked; +} + +/* 64bit divisor, dividend and result. dynamic precision */ +static inline u64 div64_64(u64 dividend, u64 divisor) +{ + u32 d = divisor; + + if (divisor > 0xf