NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
tsc.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_DPDK_TSC_H
2 #define NDNDPDK_DPDK_TSC_H
3 
6 #include "../core/common.h"
7 
9 typedef uint64_t TscTime;
10 
12 typedef int64_t TscDuration;
13 
14 #ifndef __BPF__
15 
17 extern uint64_t TscHz;
18 
20 extern double TscGHz;
21 
23 extern double TscSeconds;
24 
26 extern double TscNanos;
27 
28 extern double TscTimeRefUnixNano_;
29 extern double TscTimeRefTsc_;
30 
31 static __rte_always_inline TscTime
32 TscTime_FromUnixNano(uint64_t n) {
33  double unixNanoSinceRef = n - TscTimeRefUnixNano_;
34  double tscSinceRef = unixNanoSinceRef * TscGHz;
35  return TscTimeRefTsc_ + tscSinceRef;
36 }
37 
38 static __rte_always_inline uint64_t
39 TscTime_ToUnixNano(TscTime t) {
40  double tscSinceRef = t - TscTimeRefTsc_;
41  double unixNanoSinceRef = tscSinceRef * TscNanos;
42  return TscTimeRefUnixNano_ + unixNanoSinceRef;
43 }
44 
46 static __rte_always_inline TscDuration
47 TscDuration_FromMillis(int64_t millis) {
48  return millis * TscHz / 1000;
49 }
50 
52 static __rte_always_inline int64_t
53 TscDuration_ToMillis(TscDuration d) {
54  return d * 1000 / TscHz;
55 }
56 
57 #endif // __BPF__
58 
59 #endif // NDNDPDK_DPDK_TSC_H
double TscNanos
Nanoseconds in one TSC time unit, 1/TscGHz .
Definition: tsc.c:6
uint64_t TscHz
TSC time units in one second.
Definition: tsc.c:3
int64_t TscDuration
Duration in TscTime unit.
Definition: tsc.h:12
double TscTimeRefTsc_
Definition: tsc.c:8
double TscGHz
TSC time units in one nanosecond, TscHz/1e9 .
Definition: tsc.c:4
uint64_t TscTime
TSC clock time point.
Definition: tsc.h:9
double TscTimeRefUnixNano_
Definition: tsc.c:7
double TscSeconds
Seconds in one TSC time unit, 1/TscHz .
Definition: tsc.c:5