MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rack_decrease_bw_mul

Function rack_decrease_bw_mul

freebsd/netinet/tcp_stacks/rack.c:2709–2827  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2707}
2708
2709static void
2710rack_decrease_bw_mul(struct tcp_rack *rack, int timely_says, uint32_t rtt, int32_t rtt_diff)
2711{
2712 uint64_t logvar, logvar2, logvar3;
2713 uint32_t logged, new_per, ss_red, ca_red, rec_red, alt, val;
2714
2715 if (rack->rc_gp_incr) {
2716 /* Turn off increment counting */
2717 rack->rc_gp_incr = 0;
2718 rack->rc_gp_timely_inc_cnt = 0;
2719 }
2720 ss_red = ca_red = rec_red = 0;
2721 logged = 0;
2722 /* Calculate the reduction value */
2723 if (rtt_diff < 0) {
2724 rtt_diff *= -1;
2725 }
2726 /* Must be at least 1% reduction */
2727 if (rack->rc_gp_saw_rec && (rack->rc_gp_no_rec_chg == 0)) {
2728 /* We have been in recovery ding it too */
2729 if (timely_says == 2) {
2730 new_per = rack_decrease_highrtt(rack, rack->r_ctl.rack_per_of_gp_rec, rtt);
2731 alt = rack_get_decrease(rack, rack->r_ctl.rack_per_of_gp_rec, rtt_diff);
2732 if (alt < new_per)
2733 val = alt;
2734 else
2735 val = new_per;
2736 } else
2737 val = new_per = alt = rack_get_decrease(rack, rack->r_ctl.rack_per_of_gp_rec, rtt_diff);
2738 if (rack->r_ctl.rack_per_of_gp_rec > val) {
2739 rec_red = (rack->r_ctl.rack_per_of_gp_rec - val);
2740 rack->r_ctl.rack_per_of_gp_rec = (uint16_t)val;
2741 } else {
2742 rack->r_ctl.rack_per_of_gp_rec = rack_per_lower_bound;
2743 rec_red = 0;
2744 }
2745 if (rack_per_lower_bound > rack->r_ctl.rack_per_of_gp_rec)
2746 rack->r_ctl.rack_per_of_gp_rec = rack_per_lower_bound;
2747 logged |= 1;
2748 }
2749 if (rack->rc_gp_saw_ss) {
2750 /* Sent in SS */
2751 if (timely_says == 2) {
2752 new_per = rack_decrease_highrtt(rack, rack->r_ctl.rack_per_of_gp_ss, rtt);
2753 alt = rack_get_decrease(rack, rack->r_ctl.rack_per_of_gp_rec, rtt_diff);
2754 if (alt < new_per)
2755 val = alt;
2756 else
2757 val = new_per;
2758 } else
2759 val = new_per = alt = rack_get_decrease(rack, rack->r_ctl.rack_per_of_gp_ss, rtt_diff);
2760 if (rack->r_ctl.rack_per_of_gp_ss > new_per) {
2761 ss_red = rack->r_ctl.rack_per_of_gp_ss - val;
2762 rack->r_ctl.rack_per_of_gp_ss = (uint16_t)val;
2763 } else {
2764 ss_red = new_per;
2765 rack->r_ctl.rack_per_of_gp_ss = rack_per_lower_bound;
2766 logvar = new_per;

Callers 1

rack_update_multiplierFunction · 0.85

Calls 4

rack_decrease_highrttFunction · 0.85
rack_get_decreaseFunction · 0.85
get_filter_value_smallFunction · 0.85
rack_log_timelyFunction · 0.85

Tested by

no test coverage detected