Browse Source

Exclude stale growth and pending cuts from global overload budgets

master
evgeny 4 days ago
parent
commit
695741d9d3
  1. 2
      src/stream/stream_load.c
  2. 5
      src/stream/stream_network.c

2
src/stream/stream_load.c

@ -37,7 +37,7 @@ int stream_load_remove(struct stream_load *load, uint64_t packets, uint64_t byte
void stream_load_changed(struct stream_load *load) {
if (!load) { DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "load change null context"); return; }
load->revision++; load->candidate = 0;
load->revision++; load->candidate = 0; load->snapshot.growth_rate = 0;
}
/* Сохраняем только законченные интервалы, без округления фактического времени по числу тиков. */

5
src/stream/stream_network.c

@ -1145,6 +1145,11 @@ static void pressure_tick(struct stream_network *net, uint64_t now) {
net->global_pressure = net->global_candidate && now - net->global_since_ms >= STREAM_LOAD_CONFIRM_MS;
if (net->global_pressure) {
uint64_t required = global.growth_rate ? global.growth_rate + global.growth_rate / 100 + 1 : global.queued.bytes / 2 + 1;
for (struct stream_peer *p = net->peers; p && required; p = p->next) if (p->pressure.active) {
uint64_t pending = p->pressure.required_rate > p->pressure.released_rate
? p->pressure.required_rate - p->pressure.released_rate : 0;
required = pending >= required ? 0 : required - pending;
}
for (unsigned pass = 0; pass < net->peer_count && required; pass++) {
struct stream_peer *best = NULL; uint64_t best_rate = 0;
for (struct stream_peer *p = net->peers; p; p = p->next) {

Loading…
Cancel
Save