rdma: more batching, compile rdma-core in release mode
rx: add batching for WC processing and release tx: improve batching for WC submission and processing rdma-core: compile in release mode to remove assert() Change-Id: I5fb8736db36b50f8b758cd688100477b67e72d80 Signed-off-by: Benoît Ganne <bganne@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
fa7512e18d
commit
dc195d6845
2
build/external/packages/rdma-core.mk
vendored
2
build/external/packages/rdma-core.mk
vendored
@ -30,7 +30,7 @@ define rdma-core_config_cmds
|
||||
cd $(rdma-core_build_dir) && \
|
||||
$(CMAKE) -G Ninja $(rdma-core_src_dir) \
|
||||
-DENABLE_STATIC=1 -DENABLE_RESOLVE_NEIGH=0 -DNO_PYVERBS=1 -DENABLE_VALGRIND=0 \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_C_FLAGS=-fPIC > $(rdma-core_config_log)
|
||||
endef
|
||||
|
||||
|
@ -268,11 +268,11 @@ rdma_rxq_init (vlib_main_t * vm, rdma_device_t * rd, u16 qid, u32 n_desc)
|
||||
return clib_error_return_unix (0, "Create CQ Failed");
|
||||
|
||||
memset (&qpia, 0, sizeof (qpia));
|
||||
qpia.qp_type = IBV_QPT_RAW_PACKET;
|
||||
qpia.send_cq = rxq->cq;
|
||||
qpia.recv_cq = rxq->cq;
|
||||
qpia.cap.max_recv_wr = n_desc;
|
||||
qpia.cap.max_recv_sge = 1;
|
||||
qpia.qp_type = IBV_QPT_RAW_PACKET;
|
||||
|
||||
if ((rxq->qp = ibv_create_qp (rd->pd, &qpia)) == 0)
|
||||
return clib_error_return_unix (0, "Queue Pair create failed");
|
||||
@ -309,11 +309,12 @@ rdma_txq_init (vlib_main_t * vm, rdma_device_t * rd, u16 qid, u32 n_desc)
|
||||
return clib_error_return_unix (0, "Create CQ Failed");
|
||||
|
||||
memset (&qpia, 0, sizeof (qpia));
|
||||
qpia.qp_type = IBV_QPT_RAW_PACKET;
|
||||
qpia.send_cq = txq->cq;
|
||||
qpia.recv_cq = txq->cq;
|
||||
qpia.cap.max_send_wr = n_desc;
|
||||
qpia.cap.max_send_sge = 1;
|
||||
qpia.qp_type = IBV_QPT_RAW_PACKET;
|
||||
qpia.sq_sig_all = 1;
|
||||
|
||||
if ((txq->qp = ibv_create_qp (rd->pd, &qpia)) == 0)
|
||||
return clib_error_return_unix (0, "Queue Pair create failed");
|
||||
@ -430,7 +431,7 @@ rdma_create_if (vlib_main_t * vm, rdma_create_if_args_t * args)
|
||||
|
||||
pool_get_zero (rm->devices, rd);
|
||||
rd->dev_instance = rd - rm->devices;
|
||||
rd->per_interface_next_index = ~0;
|
||||
rd->per_interface_next_index = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT;
|
||||
rd->name = vec_dup (args->name);
|
||||
|
||||
/* check if device exist and if it is bound to mlx5_core */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -65,16 +65,21 @@ VNET_DEVICE_CLASS_TX_FN (rdma_device_class) (vlib_main_t * vm,
|
||||
|
||||
memset (w, 0, n_left_from * sizeof (w[0]));
|
||||
|
||||
while (n_left_from >= 2)
|
||||
while (n_left_from >= 4)
|
||||
{
|
||||
if (PREDICT_TRUE (n_left_from >= 4))
|
||||
if (PREDICT_TRUE (n_left_from >= 8))
|
||||
{
|
||||
vlib_prefetch_buffer_header (b[2 + 0], LOAD);
|
||||
vlib_prefetch_buffer_header (b[2 + 1], LOAD);
|
||||
CLIB_PREFETCH (&s[2 + 0], sizeof (s[0]), STORE);
|
||||
CLIB_PREFETCH (&s[2 + 1], sizeof (s[0]), STORE);
|
||||
CLIB_PREFETCH (&w[2 + 0], sizeof (w[0]), STORE);
|
||||
CLIB_PREFETCH (&w[2 + 1], sizeof (w[0]), STORE);
|
||||
vlib_prefetch_buffer_header (b[4 + 0], LOAD);
|
||||
vlib_prefetch_buffer_header (b[4 + 1], LOAD);
|
||||
vlib_prefetch_buffer_header (b[4 + 2], LOAD);
|
||||
vlib_prefetch_buffer_header (b[4 + 3], LOAD);
|
||||
|
||||
CLIB_PREFETCH (&s[4 + 0], 4 * sizeof (s[0]), STORE);
|
||||
|
||||
CLIB_PREFETCH (&w[4 + 0], CLIB_CACHE_LINE_BYTES, STORE);
|
||||
CLIB_PREFETCH (&w[4 + 1], CLIB_CACHE_LINE_BYTES, STORE);
|
||||
CLIB_PREFETCH (&w[4 + 2], CLIB_CACHE_LINE_BYTES, STORE);
|
||||
CLIB_PREFETCH (&w[4 + 3], CLIB_CACHE_LINE_BYTES, STORE);
|
||||
}
|
||||
|
||||
s[0].addr = vlib_buffer_get_current_va (b[0]);
|
||||
@ -85,25 +90,43 @@ VNET_DEVICE_CLASS_TX_FN (rdma_device_class) (vlib_main_t * vm,
|
||||
s[1].length = b[1]->current_length;
|
||||
s[1].lkey = rd->mr->lkey;
|
||||
|
||||
s[2].addr = vlib_buffer_get_current_va (b[2]);
|
||||
s[2].length = b[2]->current_length;
|
||||
s[2].lkey = rd->mr->lkey;
|
||||
|
||||
s[3].addr = vlib_buffer_get_current_va (b[3]);
|
||||
s[3].length = b[3]->current_length;
|
||||
s[3].lkey = rd->mr->lkey;
|
||||
|
||||
w[0].wr_id = f[0];
|
||||
w[0].next = &w[1 + 0];
|
||||
w[0].next = &w[0] + 1;
|
||||
w[0].sg_list = &s[0];
|
||||
w[0].num_sge = 1;
|
||||
w[0].opcode = IBV_WR_SEND;
|
||||
w[0].send_flags = IBV_SEND_SIGNALED;
|
||||
|
||||
w[1].wr_id = f[1];
|
||||
w[1].next = &w[1 + 1];
|
||||
w[1].next = &w[1] + 1;
|
||||
w[1].sg_list = &s[1];
|
||||
w[1].num_sge = 1;
|
||||
w[1].opcode = IBV_WR_SEND;
|
||||
w[1].send_flags = IBV_SEND_SIGNALED;
|
||||
|
||||
s += 2;
|
||||
f += 2;
|
||||
w += 2;
|
||||
b += 2;
|
||||
n_left_from -= 2;
|
||||
w[2].wr_id = f[2];
|
||||
w[2].next = &w[2] + 1;
|
||||
w[2].sg_list = &s[2];
|
||||
w[2].num_sge = 1;
|
||||
w[2].opcode = IBV_WR_SEND;
|
||||
|
||||
w[3].wr_id = f[3];
|
||||
w[3].next = &w[3] + 1;
|
||||
w[3].sg_list = &s[3];
|
||||
w[3].num_sge = 1;
|
||||
w[3].opcode = IBV_WR_SEND;
|
||||
|
||||
s += 4;
|
||||
f += 4;
|
||||
w += 4;
|
||||
b += 4;
|
||||
n_left_from -= 4;
|
||||
}
|
||||
|
||||
while (n_left_from >= 1)
|
||||
@ -113,11 +136,10 @@ VNET_DEVICE_CLASS_TX_FN (rdma_device_class) (vlib_main_t * vm,
|
||||
s[0].lkey = rd->mr->lkey;
|
||||
|
||||
w[0].wr_id = f[0];
|
||||
w[0].next = &w[1 + 0];
|
||||
w[0].next = &w[0] + 1;
|
||||
w[0].sg_list = &s[0];
|
||||
w[0].num_sge = 1;
|
||||
w[0].opcode = IBV_WR_SEND;
|
||||
w[0].send_flags = IBV_SEND_SIGNALED;
|
||||
|
||||
s += 1;
|
||||
f += 1;
|
||||
|
Reference in New Issue
Block a user