WIP Implement RDMA v2 based on IBV_WR_RDMA_WRITE with remote buffer management
One BIG FIXME remaining - handling large operations :))
This commit is contained in:
+32
-5
@@ -5,6 +5,11 @@
|
||||
#include <infiniband/verbs.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "allocator.h"
|
||||
#include "freelist.h"
|
||||
#include "osd_ops.h"
|
||||
|
||||
struct osd_op_t;
|
||||
|
||||
struct msgr_rdma_address_t
|
||||
{
|
||||
@@ -39,6 +44,17 @@ struct msgr_rdma_context_t
|
||||
~msgr_rdma_context_t();
|
||||
};
|
||||
|
||||
struct msgr_rdma_out_pos_t
|
||||
{
|
||||
uint64_t data_pos, data_size;
|
||||
};
|
||||
|
||||
struct msgr_rdma_cmd_t
|
||||
{
|
||||
uint8_t header[OSD_PACKET_SIZE];
|
||||
msgr_rdma_out_pos_t pos;
|
||||
};
|
||||
|
||||
struct msgr_rdma_connection_t
|
||||
{
|
||||
msgr_rdma_context_t *ctx = NULL;
|
||||
@@ -46,13 +62,24 @@ struct msgr_rdma_connection_t
|
||||
msgr_rdma_address_t addr;
|
||||
int max_send = 0, max_recv = 0, max_sge = 0;
|
||||
int cur_send = 0, cur_recv = 0;
|
||||
uint64_t max_msg = 0;
|
||||
uint64_t op_slots = 0, op_memory = 0;
|
||||
|
||||
int send_pos = 0, send_buf_pos = 0;
|
||||
int recv_pos = 0, recv_buf_pos = 0;
|
||||
std::vector<void*> recv_buffers;
|
||||
ibv_mr *in_data_mr = NULL, *in_op_mr = NULL;
|
||||
msgr_rdma_cmd_t *in_ops = NULL;
|
||||
int in_op_cap = 0;
|
||||
void *in_data_buf = NULL;
|
||||
std::vector<uint32_t> in_slots_freed;
|
||||
|
||||
uint32_t out_data_rkey = 0, out_op_rkey = 0;
|
||||
uint64_t out_op_slots = 0, out_op_memory = 0;
|
||||
allocator *out_op_alloc = NULL;
|
||||
freelist_allocator_t out_data_alloc;
|
||||
msgr_rdma_out_pos_t *out_slot_data = NULL;
|
||||
osd_op_t **out_slot_ops = NULL;
|
||||
|
||||
~msgr_rdma_connection_t();
|
||||
static msgr_rdma_connection_t *create(msgr_rdma_context_t *ctx, uint32_t max_send, uint32_t max_recv, uint32_t max_sge, uint32_t max_msg);
|
||||
static msgr_rdma_connection_t *create(msgr_rdma_context_t *ctx, uint32_t max_send,
|
||||
uint32_t max_recv, uint32_t max_sge, uint64_t op_slots, uint64_t op_memory);
|
||||
int connect(msgr_rdma_address_t *dest);
|
||||
void set_out_capacity(uint32_t out_data_rkey, uint32_t out_op_rkey, uint64_t out_op_slots, uint64_t out_op_memory);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user