1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-17 02:23:49 +01:00

benchmark_udp: improve rtt record buffering

The ping sequence number is linear, so modulo calculation can be use to
get the index of the oldest/ next entry in the record buffer.
This commit is contained in:
Elena Frank 2025-09-11 11:13:37 +02:00
parent d15f4760c2
commit 1ce183495a

View File

@ -27,6 +27,10 @@
#define ENABLE_DEBUG 0 #define ENABLE_DEBUG 0
#include "debug.h" #include "debug.h"
#ifndef RECORD_CACHE_SIZE
# define RECORD_CACHE_SIZE (4)
#endif
static sock_udp_t sock; static sock_udp_t sock;
static uint32_t delay_us = US_PER_SEC; static uint32_t delay_us = US_PER_SEC;
static uint16_t payload_size = 32; static uint16_t payload_size = 32;
@ -43,34 +47,26 @@ static sema_inv_t thread_sync;
struct { struct {
uint32_t seq_no; uint32_t seq_no;
uint32_t time_tx_us; uint32_t time_tx_us;
} record_tx[4]; } record_tx[RECORD_CACHE_SIZE];
static uint32_t _get_rtt(uint32_t seq_num, uint32_t prev) static uint32_t _get_rtt(uint32_t seq_num, uint32_t prev)
{ {
for (unsigned i = 0; i < ARRAY_SIZE(record_tx); ++i) { uint32_t idx = seq_num % RECORD_CACHE_SIZE;
if (record_tx[i].seq_no == seq_num) {
return xtimer_now_usec() - record_tx[i].time_tx_us; if (record_tx[idx].seq_no == seq_num) {
} return xtimer_now_usec() - record_tx[idx].time_tx_us;
} }
return prev; return prev;
} }
static void _put_rtt(uint32_t seq_num) { static void _put_rtt(uint32_t seq_num)
uint8_t oldest = 0; {
uint32_t oldest_diff = 0;
uint32_t now = xtimer_now_usec(); uint32_t now = xtimer_now_usec();
uint32_t idx = seq_num % RECORD_CACHE_SIZE;
for (unsigned i = 0; i < ARRAY_SIZE(record_tx); ++i) { record_tx[idx].seq_no = seq_num;
uint32_t diff = now - record_tx[i].time_tx_us; record_tx[idx].time_tx_us = now;
if (diff > oldest_diff) {
oldest_diff = diff;
oldest = i;
}
}
record_tx[oldest].seq_no = seq_num;
record_tx[oldest].time_tx_us = now;
} }
static void *_listen_thread(void *ctx) static void *_listen_thread(void *ctx)