Check pacer reset callback against its actual contract
This commit is contained in:
1 parent
deac10e3f6
commit
c7a530092d
3 files changed
+7
-2
No files matched your search
@@ -184,6 +184,9 @@ pending/частичный буфер normalizer; ограничение окн
|
||||
Прибавка равна ceil(payload_len * 10000000000 / bbr_pacing_rate), вычисляется целочисленно в uint64.
|
||||
- Накопленный кредит после простоя ограничивается 1 мс. При смене ставки пересчитывается оставшийся долг;
|
||||
таймер снимается и при необходимости назначается заново. При нулевой ставке pacing не ограничивает отправку.
|
||||
- Положительный долг должен быть строго меньше 1 мс. Таймер ждёт первого допустимого TB:
|
||||
shaper_load_time_tb - SHAPER_BURST_DELAY_TB + 1; дробь меньше TB не меняет эту строгую границу.
|
||||
uasync округляет срок вверх до миллисекунды; callback повторно проверяет готовность перед уведомлением.
|
||||
- ACK/control и измерительная burst-серия не списывают DATA-pacing. Окно DATA проверяется и в burst.
|
||||
Конструктор исходящего UDP-линка запускает INIT сразу; TCP использует отдельный STCP connect/handshake.
|
||||
процесс установки соединения (рукопожатие):
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* link_ready вызывает link_ready_for_send_fn при готовности физического линка/shaper;
|
||||
* окно пробуждает etcp_conn_wake_sender без изменения UP/DOWN. Все вызовы — uasync-поток соединения.
|
||||
* Pacer допускает положительный долг строго меньше 1мс; неиспользованный кредит также ограничен 1мс.
|
||||
* Таймер ждёт первого допустимого TB: debt_until_tb - SHAPER_BURST_DELAY_TB + 1, а не полного погашения долга.
|
||||
* Таймер ждёт первого допустимого TB: shaper_load_time_tb - SHAPER_BURST_DELAY_TB + 1, а не погашения всего долга.
|
||||
* Дробь меньше 1TB не меняет эту строгую границу; callback повторно проверяет готовность перед уведомлением. */
|
||||
#ifndef ETCP_LOADBALANCER_H
|
||||
#define ETCP_LOADBALANCER_H
|
||||
|
||||
@@ -567,7 +567,9 @@ static void pacing_ready_lifecycle(void) {
|
||||
uint64_t end = get_time_us() + 1000000;
|
||||
while (!pacer_ready_count && get_time_us() < end) test_clock_poll(ua, 10);
|
||||
CHECK(pacer_ready_count == 1);
|
||||
if (action == 1) CHECK(conn->reinit_pending && conn->session_required && conn->links);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "Pacer callback result: action=%u state=%u initialized=%u reinit=%u session=%u links=%d",
|
||||
action, conn->state, conn->initialized, conn->reinit_pending, conn->session_required, conn->links != NULL);
|
||||
if (action == 1) CHECK(conn->reinit_pending && !conn->initialized && conn->reinit_count == 1 && conn->links);
|
||||
else CHECK(conn->state == 2 && !conn->links);
|
||||
test_clock_run_for(ua, 40); CHECK(pacer_ready_count == 1);
|
||||
etcp_conn_ref_free(conn); teardown();
|
||||
|
||||
Reference in new issue
Block a user