NDN-DPDK
High-Speed Named Data Networking Forwarder
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
store.h
Go to the documentation of this file.
1 #ifndef NDNDPDK_DISK_STORE_H
2 #define NDNDPDK_DISK_STORE_H
3 
6 #include "../dpdk/bdev.h"
7 #include "../dpdk/hashtable.h"
8 #include "../dpdk/spdk-thread.h"
9 #include "../ndni/packet.h"
10 
11 typedef struct DiskStore DiskStore;
12 
14 typedef struct DiskStoreSlimRequest {
17  uint64_t slotID;
19 
21 typedef struct DiskStoreRequest {
23  union {
25  struct rte_mbuf* pkt;
26  };
29 
37 typedef void (*DiskStore_GetDataCb)(Packet* npkt, uintptr_t ctx);
38 
40 struct DiskStore {
42  uint64_t nBlocksPerSlot;
43  struct rte_hash* requestHt;
45  struct spdk_thread* th;
46  struct spdk_io_channel* ch;
48  uintptr_t getDataCtx;
49 
50  uint64_t nPutDataBegin;
51  uint64_t nPutDataFinish[2]; // 0=failure, 1=success
52  uint64_t nGetDataBegin;
53  uint64_t nGetDataReuse;
54  uint64_t nGetDataSuccess;
55  uint64_t nGetDataFailure;
56 };
57 
62 __attribute__((nonnull)) static inline bool
63 DiskStore_PutPrepare(DiskStore* store, Packet* npkt, BdevStoredPacket* sp) {
64  return Bdev_WritePrepare(&store->bdev, Packet_ToMbuf(npkt), sp);
65 }
66 
75 __attribute__((nonnull)) void
76 DiskStore_PutData(DiskStore* store, uint64_t slotID, Packet* npkt, BdevStoredPacket* sp);
77 
94 __attribute__((nonnull)) void
95 DiskStore_GetData(DiskStore* store, uint64_t slotID, Packet* npkt, struct rte_mbuf* dataBuf,
96  BdevStoredPacket* sp);
97 
98 #endif // NDNDPDK_DISK_STORE_H
bool Bdev_WritePrepare(Bdev *bd, struct rte_mbuf *pkt, BdevStoredPacket *sp)
Prepare writing according to bdev alignment requirements.
Definition: bdev.c:252
struct Packet Packet
Definition: common.h:11
void DiskStore_GetData(DiskStore *store, uint64_t slotID, Packet *npkt, struct rte_mbuf *dataBuf, BdevStoredPacket *sp)
Retrieve a Data packet.
Definition: store.c:273
void(* DiskStore_GetDataCb)(Packet *npkt, uintptr_t ctx)
DiskStore_GetData completion callback.
Definition: store.h:37
void DiskStore_PutData(DiskStore *store, uint64_t slotID, Packet *npkt, BdevStoredPacket *sp)
Store a Data packet.
Definition: store.c:257
struct DiskStoreRequest DiskStoreRequest
DiskStore request context.
struct DiskStoreSlimRequest DiskStoreSlimRequest
DiskStore compact request context.
Bdev I/O request.
Definition: bdev.h:55
Length and alignment descriptor of a stored packet.
Definition: bdev.h:21
Block device and related information.
Definition: bdev.h:64
DiskStore request context.
Definition: store.h:21
Packet * npkt
Definition: store.h:24
struct rte_mbuf * pkt
Definition: store.h:25
DiskStoreSlimRequest s
Definition: store.h:22
BdevRequest breq
Definition: store.h:27
DiskStore compact request context.
Definition: store.h:14
Packet * next
Definition: store.h:15
DiskStore * store
Definition: store.h:16
uint64_t slotID
Definition: store.h:17
Disk-backed Data packet store.
Definition: store.h:40
Bdev bdev
Definition: store.h:41
struct spdk_thread * th
Definition: store.h:45
uint64_t nBlocksPerSlot
Definition: store.h:42
uint64_t nGetDataFailure
Definition: store.h:55
uint64_t nPutDataFinish[2]
Definition: store.h:51
uint64_t nGetDataReuse
Definition: store.h:53
struct rte_hash * requestHt
Definition: store.h:43
DiskStore_GetDataCb getDataCb
Definition: store.h:47
DiskStoreRequest * requestArray
Definition: store.h:44
uint64_t nGetDataBegin
Definition: store.h:52
uintptr_t getDataCtx
Definition: store.h:48
struct spdk_io_channel * ch
Definition: store.h:46
uint64_t nPutDataBegin
Definition: store.h:50
uint64_t nGetDataSuccess
Definition: store.h:54