Lines Matching refs:ca

94 	u8  nv_min_cwnd;	/* nv won't make a ca decision if cwnd is
100 u8 nv_rtt_cnt; /* RTTs without making ca decision */;
123 static inline void tcpnv_reset(struct tcpnv *ca, struct sock *sk)
127 ca->nv_reset = 0;
128 ca->nv_no_cong_cnt = 0;
129 ca->nv_rtt_cnt = 0;
130 ca->nv_last_rtt = 0;
131 ca->nv_rtt_max_rate = 0;
132 ca->nv_rtt_start_seq = tp->snd_una;
133 ca->nv_eval_call_cnt = 0;
134 ca->nv_last_snd_una = tp->snd_una;
139 struct tcpnv *ca = inet_csk_ca(sk);
142 tcpnv_reset(ca, sk);
151 ca->nv_base_rtt = base_rtt;
152 ca->nv_lower_bound_rtt = (base_rtt * 205) >> 8; /* 80% */
154 ca->nv_base_rtt = 0;
155 ca->nv_lower_bound_rtt = 0;
158 ca->nv_allow_cwnd_growth = 1;
159 ca->nv_min_rtt_reset_jiffies = jiffies + 2 * HZ;
160 ca->nv_min_rtt = NV_INIT_RTT;
161 ca->nv_min_rtt_new = NV_INIT_RTT;
162 ca->nv_min_cwnd = NV_MIN_CWND;
163 ca->nv_catchup = 0;
164 ca->cwnd_growth_factor = 0;
170 inline u32 nv_get_bounded_rtt(struct tcpnv *ca, u32 val)
172 if (ca->nv_lower_bound_rtt > 0 && val < ca->nv_lower_bound_rtt)
173 return ca->nv_lower_bound_rtt;
174 else if (ca->nv_base_rtt > 0 && val > ca->nv_base_rtt)
175 return ca->nv_base_rtt;
183 struct tcpnv *ca = inet_csk_ca(sk);
190 if (!ca->nv_allow_cwnd_growth)
199 if (ca->cwnd_growth_factor < 0) {
200 cnt = tcp_snd_cwnd(tp) << -ca->cwnd_growth_factor;
203 cnt = max(4U, tcp_snd_cwnd(tp) >> ca->cwnd_growth_factor);
217 struct tcpnv *ca = inet_csk_ca(sk);
219 if (new_state == TCP_CA_Open && ca->nv_reset) {
220 tcpnv_reset(ca, sk);
223 ca->nv_reset = 1;
224 ca->nv_allow_cwnd_growth = 0;
227 if (ca->cwnd_growth_factor > 0)
228 ca->cwnd_growth_factor = 0;
231 ca->cwnd_growth_factor > -8)
232 ca->cwnd_growth_factor--;
243 struct tcpnv *ca = inet_csk_ca(sk);
260 if (ca->nv_catchup && tcp_snd_cwnd(tp) >= nv_min_cwnd) {
261 ca->nv_catchup = 0;
262 ca->nv_allow_cwnd_growth = 0;
265 bytes_acked = tp->snd_una - ca->nv_last_snd_una;
266 ca->nv_last_snd_una = tp->snd_una;
273 if (ca->nv_last_rtt > 0) {
275 ((u64)ca->nv_last_rtt)
279 ca->nv_min_rtt = avg_rtt << 1;
281 ca->nv_last_rtt = avg_rtt;
295 if (ca->nv_rtt_max_rate < rate)
296 ca->nv_rtt_max_rate = rate;
299 if (ca->nv_eval_call_cnt < 255)
300 ca->nv_eval_call_cnt++;
303 avg_rtt = nv_get_bounded_rtt(ca, avg_rtt);
306 if (avg_rtt < ca->nv_min_rtt)
307 ca->nv_min_rtt = avg_rtt;
310 if (avg_rtt < ca->nv_min_rtt_new)
311 ca->nv_min_rtt_new = avg_rtt;
322 if (time_after_eq(now, ca->nv_min_rtt_reset_jiffies)) {
325 ca->nv_min_rtt = ca->nv_min_rtt_new;
326 ca->nv_min_rtt_new = NV_INIT_RTT;
328 ca->nv_min_rtt_reset_jiffies =
330 /* Every so often we decrease ca->nv_min_cwnd in case previous
333 ca->nv_min_cwnd = max(ca->nv_min_cwnd / 2, NV_MIN_CWND);
337 if (before(ca->nv_rtt_start_seq, tp->snd_una)) {
338 ca->nv_rtt_start_seq = tp->snd_nxt;
339 if (ca->nv_rtt_cnt < 0xff)
341 ca->nv_rtt_cnt++;
346 * ca->nv_min_cwnd.
348 if (ca->nv_eval_call_cnt == 1 &&
349 bytes_acked >= (ca->nv_min_cwnd - 1) * tp->mss_cache &&
350 ca->nv_min_cwnd < (NV_TSO_CWND_BOUND + 1)) {
351 ca->nv_min_cwnd = min(ca->nv_min_cwnd
354 ca->nv_rtt_start_seq = tp->snd_nxt +
355 ca->nv_min_cwnd * tp->mss_cache;
356 ca->nv_eval_call_cnt = 0;
357 ca->nv_allow_cwnd_growth = 1;
366 div64_u64(((u64)ca->nv_rtt_max_rate) * ca->nv_min_rtt,
382 if (ca->nv_rtt_cnt < nv_rtt_min_cnt) {
385 if (ca->nv_eval_call_cnt <
389 } else if (ca->nv_eval_call_cnt <
391 if (ca->nv_allow_cwnd_growth &&
392 ca->nv_rtt_cnt > nv_stop_rtt_cnt)
393 ca->nv_allow_cwnd_growth = 0;
398 ca->nv_allow_cwnd_growth = 0;
411 if (ca->cwnd_growth_factor > 0)
412 ca->cwnd_growth_factor = 0;
413 ca->nv_no_cong_cnt = 0;
416 if (ca->nv_eval_call_cnt < nv_inc_eval_min_calls)
419 ca->nv_allow_cwnd_growth = 1;
420 ca->nv_no_cong_cnt++;
421 if (ca->cwnd_growth_factor < 0 &&
423 ca->nv_no_cong_cnt > nv_cwnd_growth_rate_neg) {
424 ca->cwnd_growth_factor++;
425 ca->nv_no_cong_cnt = 0;
426 } else if (ca->cwnd_growth_factor >= 0 &&
428 ca->nv_no_cong_cnt >
430 ca->cwnd_growth_factor++;
431 ca->nv_no_cong_cnt = 0;
439 ca->nv_eval_call_cnt = 0;
440 ca->nv_rtt_cnt = 0;
441 ca->nv_rtt_max_rate = 0;
456 const struct tcpnv *ca = inet_csk_ca(sk);
460 info->vegas.tcpv_rttcnt = ca->nv_rtt_cnt;
461 info->vegas.tcpv_rtt = ca->nv_last_rtt;
462 info->vegas.tcpv_minrtt = ca->nv_min_rtt;