Measure actual channel queueing delay independently of propagation RTT
This commit is contained in:
1 parent
addff8547e
commit
ade0e93f7f
2 files changed
+7
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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; // Максимальный размер очереди (пиковый)
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user