NDN-DPDK
High-Speed Named Data Networking Forwarder
Loading...
Searching...
No Matches
uring.h
Go to the documentation of this file.
1#ifndef NDNDPDK_CORE_URING_H
2#define NDNDPDK_CORE_URING_H
3
5
6#include "common.h"
7
8#include <liburing.h>
9
11typedef 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
25Uring_Init(Uring* ur, uint32_t capacity);
26
28__attribute__((nonnull)) bool
29Uring_Free(Uring* ur);
30
32__attribute__((nonnull)) static __rte_always_inline struct io_uring_sqe*
33Uring_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
44Uring_Submit_(Uring* ur, uint32_t waitLBound, uint32_t cqeBurst);
45
51__attribute__((nonnull)) static __rte_always_inline void
52Uring_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
60Uring_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
72Uring_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
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