Skip to contentSkip to conversation

: Update TX RTT sampling to use ktime_t

PATCH In review Gerrit Renker 2 participants 2 messages Jun 11, 2007 – Jun 16, 2007 Networking

lore
Share & tools
lore
#0 lore raw

PATCH 6/6 : Update TX RTT sampling to use ktime_t

[CCID3]: Update TX RTT sampling to use ktime_t

Using the new TX history interface (which looks up send time in ktime_t units), the CCID3 sender side is now upgraded to use the ktime_t interface for sampling RTT values.

---
 net/dccp/ccids/ccid3.c |   25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)
net/dccp/ccids/ccid3.c +9 -16
@@ -407,8 +407,7 @@ static void ccid3_hc_tx_packet_recv(stru
 {
 	struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk);
 	struct ccid3_options_received *opt_recv;
-	struct dccp_tx_hist_entry *packet;
-	struct timeval now;
+	ktime_t t_send, now;
 	unsigned long t_nfb;
 	u32 pinv, r_sample;
 
@@ -424,14 +423,12 @@ static void ccid3_hc_tx_packet_recv(stru
 	switch (hctx->ccid3hctx_state) {
 	case TFRC_SSTATE_NO_FBACK:
 	case TFRC_SSTATE_FBACK:
-		/* get packet from history to look up t_recvdata */
-		packet = dccp_tx_hist_find_entry(&hctx->ccid3hctx_hist,
-					      DCCP_SKB_CB(skb)->dccpd_ack_seq);
-		if (unlikely(packet = NULL)) {
-			DCCP_WARN("%s(%p), seqno %llu(%s) doesn't exist "
-				  "in history!\n",  dccp_role(sk), sk,
-			    (unsigned long long)DCCP_SKB_CB(skb)->dccpd_ack_seq,
-				dccp_packet_name(DCCP_SKB_CB(skb)->dccpd_type));
+		/* estimate RTT from history if ACK number is valid */
+		if (! tfrc_tx_hist_when(&t_send, &hctx->ccid3hctx_hist,
+				        DCCP_SKB_CB(skb)->dccpd_ack_seq)) {
+			DCCP_WARN("%s(%p): %s with bogus ACK-%llu\n", dccp_role(sk), sk,
+				  dccp_packet_name(DCCP_SKB_CB(skb)->dccpd_type),
+				  (unsigned long long)DCCP_SKB_CB(skb)->dccpd_ack_seq);
 			return;
 		}
 
@@ -446,12 +443,11 @@ static void ccid3_hc_tx_packet_recv(stru
 		else				       /* can not exceed 100% */
 			hctx->ccid3hctx_p = 1000000 / pinv;
 
-		dccp_timestamp(sk, &now);
-
 		/*
 		 * Calculate new RTT sample and update moving average
 		 */
-		r_sample = dccp_sample_rtt(sk, &now, &packet->dccphtx_tstamp);
+		now = ktime_get_real();
+		r_sample = dccp_sample_rtt(sk, ktime_delta(now, t_send));
 		hctx->ccid3hctx_rtt = tfrc_ewma(hctx->ccid3hctx_rtt, r_sample, 9);
 
 		if (hctx->ccid3hctx_state = TFRC_SSTATE_NO_FBACK) {
@@ -493,9 +489,6 @@ static void ccid3_hc_tx_packet_recv(stru
 		/* unschedule no feedback timer */
 		sk_stop_timer(sk, &hctx->ccid3hctx_no_feedback_timer);
 
-		/* remove all packets older than the one acked from history */
-		dccp_tx_hist_purge_older(ccid3_tx_hist,
-					 &hctx->ccid3hctx_hist, packet);
 		/*
 		 * As we have calculated new ipi, delta, t_nom it is possible
 		 * that we now can send a packet, so wake up dccp_wait_for_ccid
#1 lore raw
Quoted 6 lines · Gerrit Renker

[CCID3]: Update TX RTT sampling to use ktime_t

Using the new TX history interface (which looks up send time in ktime_t units), the CCID3 sender side is now upgraded to use the ktime_t interface for sampling RTT values.

Signature · 3 lines
Web: http://wand.net.nz/~iam4/
Blog: http://iansblog.jandi.co.nz
WAND Network Research Group