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

Function rack_make_timely_judgement

freebsd/netinet/tcp_stacks/rack.c:3382–3444  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3380}
3381
3382static int32_t
3383rack_make_timely_judgement(struct tcp_rack *rack, uint32_t rtt, int32_t rtt_diff, uint32_t prev_rtt)
3384{
3385 int32_t timely_says;
3386 uint64_t log_mult, log_rtt_a_diff;
3387
3388 log_rtt_a_diff = rtt;
3389 log_rtt_a_diff <<= 32;
3390 log_rtt_a_diff |= (uint32_t)rtt_diff;
3391 if (rtt >= (get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) *
3392 rack_gp_rtt_maxmul)) {
3393 /* Reduce the b/w multipler */
3394 timely_says = 2;
3395 log_mult = get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) * rack_gp_rtt_maxmul;
3396 log_mult <<= 32;
3397 log_mult |= prev_rtt;
3398 rack_log_timely(rack, timely_says, log_mult,
3399 get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt),
3400 log_rtt_a_diff, __LINE__, 4);
3401 } else if (rtt <= (get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) +
3402 ((get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) * rack_gp_rtt_minmul) /
3403 max(rack_gp_rtt_mindiv , 1)))) {
3404 /* Increase the b/w multipler */
3405 log_mult = get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) +
3406 ((get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt) * rack_gp_rtt_minmul) /
3407 max(rack_gp_rtt_mindiv , 1));
3408 log_mult <<= 32;
3409 log_mult |= prev_rtt;
3410 timely_says = 0;
3411 rack_log_timely(rack, timely_says, log_mult ,
3412 get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt),
3413 log_rtt_a_diff, __LINE__, 5);
3414 } else {
3415 /*
3416 * Use a gradient to find it the timely gradient
3417 * is:
3418 * grad = rc_rtt_diff / min_rtt;
3419 *
3420 * anything below or equal to 0 will be
3421 * a increase indication. Anything above
3422 * zero is a decrease. Note we take care
3423 * of the actual gradient calculation
3424 * in the reduction (its not needed for
3425 * increase).
3426 */
3427 log_mult = prev_rtt;
3428 if (rtt_diff <= 0) {
3429 /*
3430 * Rttdiff is less than zero, increase the
3431 * b/w multipler (its 0 or negative)
3432 */
3433 timely_says = 0;
3434 rack_log_timely(rack, timely_says, log_mult,
3435 get_filter_value_small(&rack->r_ctl.rc_gp_min_rtt), log_rtt_a_diff, __LINE__, 6);
3436 } else {
3437 /* Reduce the b/w multipler */
3438 timely_says = 1;
3439 rack_log_timely(rack, timely_says, log_mult,

Callers 1

Calls 3

get_filter_value_smallFunction · 0.85
rack_log_timelyFunction · 0.85
maxFunction · 0.85

Tested by

no test coverage detected