NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
rttest.h
Go to the documentation of this file.
1#ifndef NDNDPDK_CORE_RTTEST_H
2#define NDNDPDK_CORE_RTTEST_H
3
5
6#include "../dpdk/tsc.h"
7#include "rttest-enum.h"
8
13typedef struct RttValue {
14 float sRtt;
15 float rttVar;
17static_assert(sizeof(RttValue) == sizeof(uint64_t), "");
18
19__attribute__((nonnull)) static __rte_always_inline TscDuration
20RttValue_RTO(RttValue* rttv) {
21 return rttv->sRtt + RttEstK * rttv->rttVar;
22}
23
24#ifndef __BPF__
25
26#define RttEstAlpha (1.0 * RttEstAlphaDividend / RttEstAlphaDivisor)
27#define RttEstBeta (1.0 * RttEstBetaDividend / RttEstBetaDivisor)
28
37__attribute__((nonnull)) static inline void
38RttValue_Push(RttValue* rttv, TscDuration rtt) {
39 if (unlikely(*(uint64_t*)rttv == 0)) {
40 rttv->sRtt = rtt;
41 rttv->rttVar = rtt / 2.0;
42 } else {
43 rttv->rttVar = (1.0 - RttEstBeta) * rttv->rttVar + RttEstBeta * fabs(rttv->sRtt - rtt);
44 rttv->sRtt = (1.0 - RttEstAlpha) * rttv->sRtt + RttEstAlpha * rtt;
45 }
46}
47
50
55typedef struct RttEst {
58 TscDuration last; // last input RTT (for external sampling only)
59 TscTime next_; // when to take next RTT sample
61
62__attribute__((nonnull)) void
63RttEst_Init(RttEst* rtte);
64
65__attribute__((nonnull)) static inline void
66RttEst_SetRTO_(RttEst* rtte, TscDuration rto) {
68}
69
74__attribute__((nonnull)) static inline void
75RttEst_Push(RttEst* rtte, TscTime now, TscDuration rtt) {
76 rtte->last = rtt;
77 if (likely(rtte->next_ > now)) {
78 return;
79 }
80
81 RttValue_Push(&rtte->rttv, rtt);
82 RttEst_SetRTO_(rtte, RttValue_RTO(&rtte->rttv));
83 rtte->next_ = now + rtte->rttv.sRtt;
84}
85
87__attribute__((nonnull)) static inline void
88RttEst_Backoff(RttEst* rtte) {
89 RttEst_SetRTO_(rtte, rtte->rto * 2);
90}
91
92#endif // __BPF__
93
94#endif // NDNDPDK_CORE_RTTEST_H
#define CLAMP(x, lo, hi)
Definition common.h:106
@ RttEstK
Definition rttest-enum.h:7
TscDuration RttEstTscMinRto
Definition rttest.c:8
TscDuration RttEstTscMaxRto
Definition rttest.c:9
#define RttEstAlpha
Definition rttest.h:26
#define RttEstBeta
Definition rttest.h:27
void RttEst_Init(RttEst *rtte)
Definition rttest.c:19
RTT estimator.
Definition rttest.h:55
TscDuration last
Definition rttest.h:58
TscTime next_
Definition rttest.h:59
TscDuration rto
Definition rttest.h:57
RttValue rttv
Definition rttest.h:56
SRTT and RTTVAR values in RTT estimator.
Definition rttest.h:13
float sRtt
Definition rttest.h:14
float rttVar
Definition rttest.h:15
int64_t TscDuration
Duration in TscTime unit.
Definition tsc.h:12
uint64_t TscTime
TSC clock time point.
Definition tsc.h:9