Verify DATA pacing independently of piggyback ACK size
This commit is contained in:
1 parent
72f48d1f14
commit
b97169de19
1 file changed
+20
-2
@@ -338,7 +338,7 @@ static void pacing_rate_changes(void) {
|
||||
wait_sends(2); ack_all(); teardown();
|
||||
|
||||
setup(); b->link_status = 0; a->data_rtt_us = 1000000;
|
||||
etcp_loadbalancer_set_pacing_rate(a, 1000000);
|
||||
etcp_loadbalancer_set_pacing_rate(a, 500000); // 1000 DATA-байтов оставляют долг даже после кредита 1мс.
|
||||
enqueue(1000); wait_sends(1); enqueue(500);
|
||||
etcp_loadbalancer_set_pacing_rate(a, 100);
|
||||
CHECK(a->shaper_timer && a->shaper_load_time_tb > get_time_tb() + 1000);
|
||||
@@ -369,6 +369,24 @@ static void pacing_continuity(void) {
|
||||
ack_all(); teardown();
|
||||
}
|
||||
|
||||
/* Ставка BBR измеряется в DATA B/s: большой piggyback ACK не должен уменьшать допустимую скорость DATA. */
|
||||
static void pacing_data_units(void) {
|
||||
setup(); b->link_status = 0;
|
||||
etcp_loadbalancer_set_pacing_rate(a, 100000);
|
||||
uint64_t started = get_time_tb();
|
||||
for (unsigned i = 0; i < 50; i++) {
|
||||
while (!loadbalancer_link_can_send(a)) test_clock_poll(ua, 10);
|
||||
struct ETCP_DGRAM* pkt = memory_pool_alloc(inst.pkt_pool); CHECK(pkt);
|
||||
memset(pkt, 0, sizeof(*pkt)); pkt->link = a; pkt->payload_len = 100; pkt->data_len = 1000;
|
||||
conn->tx_running = 1; CHECK(etcp_loadbalancer_send(pkt) >= 0); conn->tx_running = 0;
|
||||
}
|
||||
uint64_t elapsed = get_time_tb() - started;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "Pacing DATA units: DATA=5000 encoded=50000 rate=100000 elapsed_tb=%llu",
|
||||
(unsigned long long)elapsed);
|
||||
CHECK(elapsed >= 450 && elapsed <= 650);
|
||||
teardown();
|
||||
}
|
||||
|
||||
/* Отправитель не превращает pending transport в UP до первого INIT/подтверждения сессии. */
|
||||
static void initial_readiness(void) {
|
||||
setup(); conn->state = 0; conn->initialized = conn->links_up = conn->tx_state = 0;
|
||||
@@ -621,7 +639,7 @@ int main(void) {
|
||||
grow_and_session, allocation_and_send_failure, removed_link_and_bbr, pacing_reset_close, initial_readiness,
|
||||
config_limits, timer_failure, immediate_send, ack_without_data_pacing, bbr_delivery_clock, bbr_probe_window, tcp_initial_window,
|
||||
retransmission_timeout, pacing_rate_changes, pacing_timer_failure, retry_rotation, independent_attempt_acks,
|
||||
receive_admission_and_path_acks, peer_window_queries, pacing_continuity};
|
||||
receive_admission_and_path_acks, peer_window_queries, pacing_continuity, pacing_data_units};
|
||||
for (unsigned i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
|
||||
cases[i](); CHECK(u_get_allocated_count() == baseline);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "PASS ETCP window scenario %u", i);
|
||||
|
||||
Reference in new issue
Block a user