Comments/question on no_feedback_timer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've got a few comments/questions on the no feedback timer on CCID3.
It's probably me not reading the code properly and I've got no idea
where the code came from (may have even been us!!)


In this code from ccid3_hc_tx_no_feedback_timer we work on x_recv
mostly rather than x. I'm wondering why??
		/*
		 *  Modify the cached value of X_recv
		 *
		 *  If (X_calc > 2 * X_recv)
		 *    X_recv = max(X_recv / 2, s / (2 * t_mbi));
		 *  Else
		 *    X_recv = X_calc / 4;
		 *
		 *  Note that X_recv is scaled by 2^6 while X_calc is not
		 */
		BUG_ON(hctx->ccid3hctx_p && !hctx->ccid3hctx_x_calc);

		if (hctx->ccid3hctx_x_calc > (hctx->ccid3hctx_x_recv >> 5))
			hctx->ccid3hctx_x_recv =
				max(hctx->ccid3hctx_x_recv / 2,
				    (((__u64)hctx->ccid3hctx_s) << 6) /
							      (2 * TFRC_T_MBI));
		else {
			hctx->ccid3hctx_x_recv = hctx->ccid3hctx_x_calc;
			hctx->ccid3hctx_x_recv <<= 4;
		}
		ccid3_hc_tx_update_x(sk, NULL);

and I think this then is potentially problematic when
ccid3_hc_tx_update_x if it is less than 2 rtt idle and we go past this
code:
	if (ccid3_hc_tx_idle_rtt(hctx, now) >= 2) {
		min_rate = rfc3390_initial_rate(sk);
		min_rate = max(min_rate, 2 * hctx->ccid3hctx_x_recv);
	}

because we then go through to the rest of the code and we can
effectively double the rate (min_rate is doubled at start of
ccid3_hc_tx_update_x).

This seems bizarre to me. We get no feedback and we double the rate??
I know it will get fixed in short order when we detect the loss later
on but this just seems wrong.

Can someone else verify before I fix? I do have a habit of reading
code wrong so would like verification.

Ian
-- 
Web1: http://wand.net.nz/~iam4/
Web2: http://www.jandi.co.nz
Blog: http://iansblog.jandi.co.nz
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [IETF DCCP]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux