coupled congestion control for multipath transmission

The reasons to develop coupled congestion control have been proposed in [1]

Goal 1 (Improve Throughput) A multipath flow should perform at least as well as a single path flow would on the best of the paths available to it.
Goal 2 (Do no harm) A multipath flow should not take up more capacity from any of the resources shared by its different path than if it were a single flow using only one of these paths. This guarantees it will not unduly harm other flows.
Goal 3 (Balance congestion) A multipath flow should move as much traffic as possible off its most congested paths, subject to meeting the first two goals.

Theory on LIA

 Based on the congestion window control rule of Reno, several congestion control methods (LIA, OLIA, Balia) have beed developed.
 The congesition window adjustment rule of Reno is:
w ( t + 1 ) ← { w ( t ) + I when an ack is received w ( t ) − D when loss is detected (1) w(t+1)\leftarrow \begin{cases} w(t)+I & \text{when an ack is received} \\ w(t)-D & \text{when loss is detected} \end{cases}\tag{1} w(t+1){w(t)+Iw(t)Dwhen an ack is receivedwhen loss is detected(1)
 In Reno, I = α w I=\frac{\alpha}{w} I=wα, D = β w D=\beta w D=βw. 对于Reno, α = 1 , β = 0.5 \alpha=1, \beta=0.5 α=1,β=0.5.
 According to [2], the differential equation of TCP Reno is:
x ˙ = 1 − p r t t 2 − x 2 p 2 = x r t t { I ( 1 − p ) − D p } (2) \dot x=\frac{1-p}{rtt^2}-\frac{x^2p}{2}=\frac{x}{rtt}\{I(1-p)-Dp\}\tag{2} x˙=rtt21p2x2p=rttx{I(1p)Dp}(2)
 Here, x = w r t t x=\frac{w}{rtt} x=rttw.
 Let x ˙ = 0 \dot x=0 x˙=0, the theory throughput of tcp is,
x = 1 r t t α ( 1 − p ) p ∗ β (3) x=\frac{1}{rtt}\sqrt{\frac{\alpha(1-p)}{p*\beta}}\tag{3} x=rtt1pβα(1p) (3)
 The congestion window incremental rule of LIA is:
I m p t c p = max ⁡ w r r t t r 2 ( ∑ k ∈ S w k r t t k ) 2 = max ⁡ w r r t t r 2 ( ∑ k ∈ S x k ) 2 (4) I_{mptcp}=\frac{\max \frac{w_r}{rtt_r^2}}{(\sum_{k\in S}{\frac{w_k}{rtt_k}})^2}=\frac{\max \frac{w_r}{rtt_r^2}}{(\sum_{k\in S}{x_k})^2}\tag{4} Imptcp=(kSrttkwk)2maxrttr2wr=(kSxk)2maxrttr2wr(4)
 Substituting (4) to (1), I ( 1 − p ) = D p = w p 2 I(1-p)=Dp=\frac{wp}{2} I(1p)=Dp=2wp。The theory throughput of LIA:
∑ k ∈ S x k = 1 r t t 2 ( 1 − p ) p \sum_{k\in S} x_k=\frac{1}{rtt}\sqrt{\frac{2(1-p)}{p}} kSxk=rtt1p2(1p)
 That guaratees the multipath LIA session can maintail bottleneck fairness when sharing the same bottlenck with single path session.
 The way to calculate α \alpha α in LIA is:
α = max ⁡ w r r t t r 2 ( ∑ k ∈ S w k r t t k ) 2 = w b e s t ( ∑ k ∈ S w k ∗ r t t b e s t r t t k ) 2 \alpha=\frac{\max \frac{w_r}{rtt_r^2}}{(\sum_{k\in S}{\frac{w_k}{rtt_k}})^2}=\frac{w_{best}}{(\sum_{k\in S}{\frac{w_k*rtt_{best}}{rtt_k}})^2} α=(kSrttkwk)2maxrttr2wr=(kSrttkwkrttbest)2wbest
 After every 1 α \frac{1}{\alpha} α1 acknowledged packets, the size of congestion widnow will be increaased by 1.
 The implementation in Linux kernel。

static void mptcp_ccc_recalc_alpha(const struct sock *sk)
{
	const struct mptcp_cb *mpcb = tcp_sk(sk)->mpcb;
	const struct mptcp_tcp_sock *mptcp;
	int best_cwnd = 0, best_rtt = 0, can_send = 0;
	u64 max_numerator = 0, sum_denominator = 0, alpha = 1;

	if (!mpcb)
		return;

	/* Do regular alpha-calculation for multiple subflows */

	/* Find the max numerator of the alpha-calculation */
	mptcp_for_each_sub(mpcb, mptcp) {
		const struct sock *sub_sk = mptcp_to_sock(mptcp);
		struct tcp_sock *sub_tp = tcp_sk(sub_sk);
		u64 tmp;

		if (!mptcp_ccc_sk_can_send(sub_sk))
			continue;

		can_send++;

		/* We need to look for the path, that provides the max-value.
		 * Integer-overflow is not possible here, because
		 * tmp will be in u64.
		 */
		tmp = div64_u64(mptcp_ccc_scale(sub_tp->snd_cwnd,
				alpha_scale_num), (u64)sub_tp->srtt_us * sub_tp->srtt_us);

		if (tmp >= max_numerator) {
			max_numerator = tmp;
			best_cwnd = sub_tp->snd_cwnd;
			best_rtt = sub_tp->srtt_us;
		}
	}

	/* No subflow is able to send - we don't care anymore */
	if (unlikely(!can_send))
		goto exit;

	/* Calculate the denominator */
	mptcp_for_each_sub(mpcb, mptcp) {
		const struct sock *sub_sk = mptcp_to_sock(mptcp);
		struct tcp_sock *sub_tp = tcp_sk(sub_sk);

		if (!mptcp_ccc_sk_can_send(sub_sk))
			continue;

		sum_denominator += div_u64(
				mptcp_ccc_scale(sub_tp->snd_cwnd,
						alpha_scale_den) * best_rtt,
						sub_tp->srtt_us);
	}
	sum_denominator *= sum_denominator;
	if (unlikely(!sum_denominator)) {
		pr_err("%s: sum_denominator == 0\n", __func__);
		mptcp_for_each_sub(mpcb, mptcp) {
			const struct sock *sub_sk = mptcp_to_sock(mptcp);
			struct tcp_sock *sub_tp = tcp_sk(sub_sk);
			pr_err("%s: pi:%d, state:%d\n, rtt:%u, cwnd: %u",
			       __func__, sub_tp->mptcp->path_index,
			       sub_sk->sk_state, sub_tp->srtt_us,
			       sub_tp->snd_cwnd);
		}
	}

	alpha = div64_u64(mptcp_ccc_scale(best_cwnd, alpha_scale_num), sum_denominator);

	if (unlikely(!alpha))
		alpha = 1;

exit:
	mptcp_set_alpha(mptcp_meta_sk(sk), alpha);
}

Evaluation of LIA on ns3.

 Two subflow is running on disjoint paths.
 Flow3 is a reno flow.
 Sending rate synamic,mp denotes the total throughput of multipath session:
在这里插入图片描述
 Rate calculated at receiver side. flow1 and flow4 is the two subfow of lia session. flow4 sharing path with single Reno flow3.
 And flow3 can gain better throughput. Due to the existence of multipath session, the throughput of single path session and multipath session is improved.
在这里插入图片描述
 If you are interested, some other coupled congestion control algorithms for multipath transmission are also introducted and evaluated in [6,7,8]。
[1] Coupled Congestion Control for Multipath Transport Protocols
[2] AIMD吞吐量公式的推导
[3] mptcp_coupled.c https://github.com/multipath-tcp/mptcp/blob/mptcp_v0.95/net/mptcp/mptcp_coupled.c
[4] Shared Bottleneck-Based Congestion Control and Packet Scheduling for Multipath TC
[5] Packet Scheduling in Multipath TCP: Fundamentals, Lessons, and Opportunities
[6] Evaluation multipath weswood congestion control on ns3
[7] Evaluate multipath BBR congestion control on ns3
[8] Evaluate multipath balia congestion control on ns3
[9] Evaluate multipath olia congestion control on ns3

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值