Measure actual channel queueing delay independently of propagation RTT

This commit is contained in:
evgeny committed 2026-10-23 00:08:15 +02:00
1 parent addff8547e
commit ade0e93f7f
2 files changed
+7

No files matched your search

+6
View File
@@ -39,6 +39,7 @@ struct dummynet_pkt {
struct sockaddr_storage src_addr;
socklen_t src_len;
uint64_t recv_time_tb;
uint32_t delay_ms;
int direction;
};
@@ -150,6 +151,10 @@ static void dummynet_process_queue(struct dummynet* dn, int dir_idx) {
dir->stats.dropped++;
} else {
dir->stats.sent++; dir->stats.sent_bytes += n;
uint64_t elapsed_us = (get_time_tb() - pkt->recv_time_tb) * 100;
uint64_t propagation_us = (uint64_t)pkt->delay_ms * 1000;
uint64_t queued_us = elapsed_us > propagation_us ? elapsed_us - propagation_us : 0;
if (queued_us > dir->stats.max_queue_delay_us) dir->stats.max_queue_delay_us = queued_us;
}
dir->stats.queue_size--;
queue_entry_free(entry);
@@ -243,6 +248,7 @@ static void dummynet_read_callback(socket_t sock, void* user_arg) {
delay_ms = DUMMYNET_MAX_DELAY_MS;
}
int delay_tb = MS_TO_TB(delay_ms);
pkt->delay_ms = delay_ms;
DEBUG_DEBUG(DEBUG_CATEGORY_DUMMYNET, "Dir %d: packet recv (%zd bytes), delay %u ms",
dir_idx, n, delay_ms);
+1
View File
@@ -67,6 +67,7 @@ struct dummynet_stats {
uint64_t recv_bytes; // Принято UDP-байт, без IP/UDP заголовков
uint64_t sent_bytes; // Передано UDP-байт, включая протокольные накладные расходы ETCP
uint64_t blocked; // Пакетов отброшено режимом DROP (включены в lost)
uint64_t max_queue_delay_us; // максимум времени до отправки минус заданная propagation delay; включает сериализацию/HOLD
uint32_t queue_size; // Все ожидающие пакеты, включая delay и HOLD
uint32_t queue_max; // Максимальный размер очереди (пиковый)
};