Apply BBR pacing through one owner and keep burst estimates diagnostic
This commit is contained in:
1 parent
7e413db1e1
commit
e21cd26511
3 files changed
+8
-12
No files matched your search
@@ -1643,8 +1643,7 @@ void etcp_ack_recv(struct ETCP_CONN* etcp, uint32_t seq, uint16_t ts, uint16_t d
|
||||
cwnd_limited);
|
||||
link->cwnd_limited = 0;
|
||||
etcp_link_update_inflight_lim(link, new_cwnd);
|
||||
link->bbr_pacing_rate = new_pacing;
|
||||
link->bandwidth = (uint32_t)((uint64_t)new_pacing * 8 / 1000);
|
||||
etcp_loadbalancer_set_pacing_rate(link, new_pacing);
|
||||
link->bbr_loss_since_ack = 0;
|
||||
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[L%u] BBR out: cwnd %u→%u pace %u→%u bw=%uK mode=%d cyc=%d infl=%u/%u",
|
||||
@@ -1954,12 +1953,9 @@ void etcp_conn_input(struct ETCP_DGRAM* pkt) {
|
||||
if (valid == MEAS_RESP_VALID && gap_min > 0 && link->burst_pkt_size > 0) {
|
||||
uint64_t bw_kbps = (uint64_t)link->burst_pkt_size * 8000ULL / gap_min;
|
||||
if (bw_kbps > 10000000) bw_kbps = 10000000;
|
||||
link->bandwidth = (uint32_t)bw_kbps;
|
||||
float rtt_sec = (float)link->bbr->min_rtt_us / 1000000.f;
|
||||
if (rtt_sec < 0.005f) rtt_sec = 0.005f;
|
||||
link->burst_target_bdp = (uint32_t)((float)bw_kbps * 1000.f / 8.f * rtt_sec);
|
||||
// BBR: инициализируем верхнюю границу из burst
|
||||
if (link->bbr->inflight_hi == ~0U) link->bbr->inflight_hi = link->burst_target_bdp;
|
||||
// Wire-замер серии — диагностика; DATA pacing/окно принадлежат модели BBR.
|
||||
uint64_t bdp = link->bbr->min_rtt_us == UINT32_MAX ? 0 : bw_kbps * link->bbr->min_rtt_us / 8000;
|
||||
link->burst_target_bdp = bdp > UINT32_MAX ? UINT32_MAX : (uint32_t)bdp;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] burst resp: BW=%u Kbps, BDP=%u gap_min=%u us pkt_cnt=%u",
|
||||
link->etcp->log_name, (uint32_t)bw_kbps, link->burst_target_bdp, gap_min, pkt_cnt);
|
||||
}
|
||||
|
||||
@@ -1092,7 +1092,7 @@ struct ETCP_LINK* etcp_link_new(struct ETCP_CONN* etcp, struct ETCP_SOCKET* conn
|
||||
link->ka_announce_attempts = 0;
|
||||
link->ka_announce_max_attempts = 0;
|
||||
link->ka_fail_count = 0;
|
||||
link->bandwidth = 10000; // начальная оценка 10 Mbps для шейпера
|
||||
link->bandwidth = 0; // До первого ACK pacing не задан; исходный burst ограничен начальным DATA-окном.
|
||||
link->burst_id = 0;
|
||||
link->burst_active = 0;
|
||||
link->burst_last_time_tb = 0;
|
||||
|
||||
@@ -270,7 +270,7 @@ struct ETCP_LINK {
|
||||
|
||||
uint16_t tt_last; // transmit time (время доставки отправленных пакетов)
|
||||
uint16_t rt_last; // recv time (время доставки принятых пакетов)
|
||||
uint32_t bandwidth; // Link bandwidth in Kbits/sec
|
||||
uint32_t bandwidth; // Отображение pacing в Kbit/s (вверх); shaper использует точный bbr_pacing_rate
|
||||
|
||||
// NAT address tracking (from INIT_RESPONSE)
|
||||
struct sockaddr_storage local_as_seen_by_peer; // только наш endpoint, наблюдаемый удалённым пиром
|
||||
@@ -306,7 +306,7 @@ struct ETCP_LINK {
|
||||
uint8_t burst_count; // общее число пакетов в burst
|
||||
uint64_t burst_last_time_tb; // время последнего burst (0.1ms), для MIN_BURST_INTERVAL
|
||||
void* burst_resp_timer; // таймер ожидания ответа на burst
|
||||
uint32_t burst_target_bdp; // BDP из последнего успешного burst (байты)
|
||||
uint32_t burst_target_bdp; // Диагностический wire-BDP серии; 0 при неизвестном RTT, не управляет BBR
|
||||
uint16_t burst_pkt_size; // сохранённый размер пакета для вычисления BW
|
||||
|
||||
// Receiver-сторона
|
||||
@@ -328,7 +328,7 @@ struct ETCP_LINK {
|
||||
uint64_t delivered_bytes; // кумулятивно delivered bytes на линке (для round detection)
|
||||
uint64_t last_ack_time_tb; // время последней доставки/начала первого flight, 0.1мс
|
||||
uint64_t first_tx_time_tb; // начало интервала отправок, продвигается подтверждёнными попытками
|
||||
uint32_t bbr_pacing_rate; // bytes/sec output BBR → shaper
|
||||
uint32_t bbr_pacing_rate; // Точный pacing B/s; менять через set_pacing_rate для пересчёта долга/таймера
|
||||
uint32_t bbr_loss_since_ack; // счётчик потерь на линке с последнего ACK (для rs->lost)
|
||||
|
||||
etcp_udp_send_fn_t send_hook; // NULL = socket_sendto напрямую
|
||||
|
||||
Reference in new issue
Block a user