mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Turn CircEWMA tick len into consensus parameter.
This will assist tuning of CircEWMA in Shadow and Live.
This commit is contained in:
parent
5e17f8acab
commit
98be8634fa
@ -45,7 +45,10 @@
|
||||
/*** EWMA parameter #defines ***/
|
||||
|
||||
/** How long does a tick last (seconds)? */
|
||||
#define EWMA_TICK_LEN 10
|
||||
#define EWMA_TICK_LEN_DEFAULT 10
|
||||
#define EWMA_TICK_LEN_MIN 1
|
||||
#define EWMA_TICK_LEN_MAX 600
|
||||
static int ewma_tick_len = EWMA_TICK_LEN_DEFAULT;
|
||||
|
||||
/** The default per-tick scale factor, if it hasn't been overridden by a
|
||||
* consensus or a configuration setting. zero means "disabled". */
|
||||
@ -148,7 +151,7 @@ cell_ewma_get_tick(void)
|
||||
monotime_coarse_get(&now);
|
||||
int32_t msec_diff = monotime_coarse_diff_msec32(&start_of_current_tick,
|
||||
&now);
|
||||
return current_tick_num + msec_diff / (1000*EWMA_TICK_LEN);
|
||||
return current_tick_num + msec_diff / (1000*ewma_tick_len);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -527,15 +530,15 @@ cell_ewma_get_current_tick_and_fraction(double *remainder_out)
|
||||
monotime_coarse_get(&now);
|
||||
int32_t msec_diff = monotime_coarse_diff_msec32(&start_of_current_tick,
|
||||
&now);
|
||||
if (msec_diff > (1000*EWMA_TICK_LEN)) {
|
||||
unsigned ticks_difference = msec_diff / (1000*EWMA_TICK_LEN);
|
||||
if (msec_diff > (1000*ewma_tick_len)) {
|
||||
unsigned ticks_difference = msec_diff / (1000*ewma_tick_len);
|
||||
monotime_coarse_add_msec(&start_of_current_tick,
|
||||
&start_of_current_tick,
|
||||
ticks_difference * 1000 * EWMA_TICK_LEN);
|
||||
ticks_difference * 1000 * ewma_tick_len);
|
||||
current_tick_num += ticks_difference;
|
||||
msec_diff %= 1000*EWMA_TICK_LEN;
|
||||
msec_diff %= 1000*ewma_tick_len;
|
||||
}
|
||||
*remainder_out = ((double)msec_diff) / (1.0e3 * EWMA_TICK_LEN);
|
||||
*remainder_out = ((double)msec_diff) / (1.0e3 * ewma_tick_len);
|
||||
return current_tick_num;
|
||||
}
|
||||
|
||||
@ -605,15 +608,20 @@ cmux_ewma_set_options(const or_options_t *options,
|
||||
/* Both options and consensus can be NULL. This assures us to either get a
|
||||
* valid configured value or the default one. */
|
||||
halflife = get_circuit_priority_halflife(options, consensus, &source);
|
||||
ewma_tick_len = networkstatus_get_param(consensus,
|
||||
"CircuitPriorityTickSecs",
|
||||
EWMA_TICK_LEN_DEFAULT,
|
||||
EWMA_TICK_LEN_MIN,
|
||||
EWMA_TICK_LEN_MAX);
|
||||
|
||||
/* convert halflife into halflife-per-tick. */
|
||||
halflife /= EWMA_TICK_LEN;
|
||||
halflife /= ewma_tick_len;
|
||||
/* compute per-tick scale factor. */
|
||||
ewma_scale_factor = exp(LOG_ONEHALF / halflife);
|
||||
log_info(LD_OR,
|
||||
"Enabled cell_ewma algorithm because of value in %s; "
|
||||
"scale factor is %f per %d seconds",
|
||||
source, ewma_scale_factor, EWMA_TICK_LEN);
|
||||
source, ewma_scale_factor, ewma_tick_len);
|
||||
}
|
||||
|
||||
/** Return the multiplier necessary to convert the value of a cell sent in
|
||||
|
Loading…
Reference in New Issue
Block a user