NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
uring.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_CORE_URING_H
2 #define NDNDPDK_CORE_URING_H
3 
6 #include "common.h"
7 
8 #include <liburing.h>
9 
11 typedef struct Uring {
12  struct io_uring uring;
13 
14  uint64_t nAllocErrs;
15  uint64_t nSubmitted;
16  uint64_t nSubmitNonBlock;
17  uint64_t nSubmitWait;
18 
19  uint32_t nQueued;
20  uint32_t nPending;
22 
24 __attribute__((nonnull)) bool
25 Uring_Init(Uring* ur, uint32_t capacity);
26 
28 __attribute__((nonnull)) bool
29 Uring_Free(Uring* ur);
30 
32 __attribute__((nonnull)) static __rte_always_inline struct io_uring_sqe*
33 Uring_GetSqe(Uring* ur) {
34  struct io_uring_sqe* sqe = io_uring_get_sqe(&ur->uring);
35  if (unlikely(sqe == NULL)) {
36  ++ur->nAllocErrs;
37  } else {
38  ++ur->nQueued;
39  }
40  return sqe;
41 }
42 
43 __attribute__((nonnull)) void
44 Uring_Submit_(Uring* ur, uint32_t waitLBound, uint32_t cqeBurst);
45 
51 __attribute__((nonnull)) static __rte_always_inline void
52 Uring_Submit(Uring* ur, uint32_t waitLBound, uint32_t cqeBurst) {
53  if (ur->nQueued > 0) {
54  Uring_Submit_(ur, waitLBound, cqeBurst);
55  }
56 }
57 
59 __attribute__((nonnull)) static inline uint32_t
60 Uring_PeekCqes(Uring* ur, struct io_uring_cqe* cqes[], size_t count) {
61  if (ur->nPending == 0) {
62  return 0;
63  }
64 
65  uint32_t n = io_uring_peek_batch_cqe(&ur->uring, cqes, count);
66  ur->nPending -= n;
67  return n;
68 }
69 
71 __attribute__((nonnull)) static __rte_always_inline void
72 Uring_SeenCqes(Uring* ur, uint32_t n) {
73  io_uring_cq_advance(&ur->uring, n);
74 }
75 
76 #endif // NDNDPDK_CORE_URING_H
io_uring and related counters.
Definition: uring.h:11
uint32_t nPending
currently submitted but uncompleted
Definition: uring.h:20
uint64_t nAllocErrs
SQE allocation errors.
Definition: uring.h:14
uint64_t nSubmitted
submitted SQEs
Definition: uring.h:15
uint32_t nQueued
currently queued but unsubmitted
Definition: uring.h:19
uint64_t nSubmitNonBlock
non-blocking submission batches
Definition: uring.h:16
struct io_uring uring
Definition: uring.h:12
uint64_t nSubmitWait
waiting submission batches
Definition: uring.h:17
bool Uring_Free(Uring *ur)
Delete io_uring.
Definition: uring.c:21
struct Uring Uring
io_uring and related counters.
void Uring_Submit_(Uring *ur, uint32_t waitLBound, uint32_t cqeBurst)
Definition: uring.c:31
bool Uring_Init(Uring *ur, uint32_t capacity)
Initialize io_uring.
Definition: uring.c:7