net/smc: send cdc msg inline if qp has sufficient inline space
As cdc msg's length is 44B, cdc msgs can be sent inline in most rdma devices, which can help reducing sending latency. In my test environment, which are 2 VMs running on the same physical host and whose NICs(ConnectX-4Lx) are working on SR-IOV mode, qperf shows 0.4us-0.7us improvement in latency. Test command: server: smc_run taskset -c 1 qperf client: smc_run taskset -c 1 qperf <server ip> -oo \ msg_size:1:2K:*2 -t 30 -vu tcp_lat The results shown below: msgsize before after 1B 11.9 us 11.2 us (-0.7 us) 2B 11.7 us 11.2 us (-0.5 us) 4B 11.7 us 11.3 us (-0.4 us) 8B 11.6 us 11.2 us (-0.4 us) 16B 11.7 us 11.3 us (-0.4 us) 32B 11.7 us 11.3 us (-0.4 us) 64B 11.7 us 11.2 us (-0.5 us) 128B 11.6 us 11.2 us (-0.4 us) 256B 11.8 us 11.2 us (-0.6 us) 512B 11.8 us 11.4 us (-0.4 us) 1KB 11.9 us 11.4 us (-0.5 us) 2KB 12.1 us 11.5 us (-0.6 us) Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com> Reviewed-by: Tony Lu <tonylu@linux.alibaba.com> Tested-by: kernel test robot <lkp@intel.com> Acked-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
65a9dedc11
commit
b632eb0697
@ -671,6 +671,7 @@ int smc_ib_create_queue_pair(struct smc_link *lnk)
|
||||
.max_recv_wr = SMC_WR_BUF_CNT * 3,
|
||||
.max_send_sge = SMC_IB_MAX_SEND_SGE,
|
||||
.max_recv_sge = sges_per_buf,
|
||||
.max_inline_data = 0,
|
||||
},
|
||||
.sq_sig_type = IB_SIGNAL_REQ_WR,
|
||||
.qp_type = IB_QPT_RC,
|
||||
|
@ -554,10 +554,11 @@ void smc_wr_remember_qp_attr(struct smc_link *lnk)
|
||||
static void smc_wr_init_sge(struct smc_link *lnk)
|
||||
{
|
||||
int sges_per_buf = (lnk->lgr->smc_version == SMC_V2) ? 2 : 1;
|
||||
bool send_inline = (lnk->qp_attr.cap.max_inline_data > SMC_WR_TX_SIZE);
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < lnk->wr_tx_cnt; i++) {
|
||||
lnk->wr_tx_sges[i].addr =
|
||||
lnk->wr_tx_sges[i].addr = send_inline ? (uintptr_t)(&lnk->wr_tx_bufs[i]) :
|
||||
lnk->wr_tx_dma_addr + i * SMC_WR_BUF_SIZE;
|
||||
lnk->wr_tx_sges[i].length = SMC_WR_TX_SIZE;
|
||||
lnk->wr_tx_sges[i].lkey = lnk->roce_pd->local_dma_lkey;
|
||||
@ -575,6 +576,8 @@ static void smc_wr_init_sge(struct smc_link *lnk)
|
||||
lnk->wr_tx_ibs[i].opcode = IB_WR_SEND;
|
||||
lnk->wr_tx_ibs[i].send_flags =
|
||||
IB_SEND_SIGNALED | IB_SEND_SOLICITED;
|
||||
if (send_inline)
|
||||
lnk->wr_tx_ibs[i].send_flags |= IB_SEND_INLINE;
|
||||
lnk->wr_tx_rdmas[i].wr_tx_rdma[0].wr.opcode = IB_WR_RDMA_WRITE;
|
||||
lnk->wr_tx_rdmas[i].wr_tx_rdma[1].wr.opcode = IB_WR_RDMA_WRITE;
|
||||
lnk->wr_tx_rdmas[i].wr_tx_rdma[0].wr.sg_list =
|
||||
|
Loading…
Reference in New Issue
Block a user