Fix rtt and drop estimation to be more conservative

This commit is contained in:
xenia 2020-03-14 17:48:57 -04:00
parent e5b8d8f8ae
commit bc3420d520
1 changed files with 24 additions and 8 deletions

View File

@ -235,16 +235,33 @@ where
let mut sent: HashMap<SegIdx, Instant> = HashMap::new(); let mut sent: HashMap<SegIdx, Instant> = HashMap::new();
let mut rtt_est: Duration = Duration::from_millis(1050); let mut rtt_est: Duration = Duration::from_millis(1050);
let mut drop_est: usize = 0; let mut drop_est: usize = 0;
let mut drop_est_made: bool = false;
loop { loop {
let now = Instant::now();
log.debug_msg(format!("rtt_est is {}, drop_est is {}", rtt_est.as_millis(), drop_est)).await; log.debug_msg(format!("rtt_est is {}, drop_est is {}", rtt_est.as_millis(), drop_est)).await;
if drop_est > 50 { if drop_est_made {
in_flight = DEFAULT_IN_FLIGHT; if drop_est > 50 {
} else if drop_est > 35 { in_flight = DEFAULT_IN_FLIGHT;
in_flight = std::cmp::max(in_flight - 5, DEFAULT_IN_FLIGHT); } else if drop_est > 35 {
} else { in_flight = std::cmp::max(in_flight - 5, DEFAULT_IN_FLIGHT);
in_flight += 5; } else {
in_flight += 150;
}
drop_est_made = false;
let mut drain_idx = send_history.len();
for entry in send_history.iter().rev() {
if entry.1 >= now - (rtt_est / 2) {
drain_idx -= 1;
} else {
break;
}
}
send_history.drain(0..drain_idx);
ack_history.clear();
sent.clear();
acked.clear();
} }
let timer = tokio::time::delay_until(deadline); let timer = tokio::time::delay_until(deadline);
@ -279,7 +296,6 @@ where
log.debug_msg(format!("got {} acks", idxs.len())).await; log.debug_msg(format!("got {} acks", idxs.len())).await;
src.ack(&idxs); src.ack(&idxs);
let now = Instant::now();
let mut rtts: Vec<Duration> = vec![]; let mut rtts: Vec<Duration> = vec![];
for idx in idxs.iter().cloned() { for idx in idxs.iter().cloned() {
@ -315,6 +331,7 @@ where
} }
if total_pkts > 10 { if total_pkts > 10 {
drop_est = 100 - (acked_pkts * 100 / total_pkts); drop_est = 100 - (acked_pkts * 100 / total_pkts);
drop_est_made = true;
} }
} }
}; };
@ -322,7 +339,6 @@ where
for m in to_send.drain(..) { for m in to_send.drain(..) {
match m { match m {
UpMsg::Data{seg_idx, ..} => { UpMsg::Data{seg_idx, ..} => {
let now = Instant::now();
send_history.push((seg_idx, now)); send_history.push((seg_idx, now));
sent.insert(seg_idx, now); sent.insert(seg_idx, now);
}, },