[PATCH] nvme-rdma: set ack timeout of RoCE to 262ms

Chao Leng lengchao at huawei.com
Fri Aug 19 00:58:25 PDT 2022


Now the ack timeout of RoCE is 2 second(2^(18+1)*4us=2 second). In the
case of low concurrency, if some packets lost due to network abnormal
such as network rerouting, Optical fiber signal interference, etc,
it will wait 2 second to try retransmitting the lost packets.
As a result, the I/O latency is greater than 2 seconds.
The I/O latency is so long for real-time transaction service. Indeed we
do not have to wait so long time to make sure that packets are lost.
Setting the ack timeout to 262ms(2^(15+1)*4us=262ms) is sufficient.

Signed-off-by: Chao Leng <lengchao at huawei.com>
---
 drivers/nvme/host/rdma.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 7d01fb770284..2dbb1b21acc8 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -602,6 +602,8 @@ static int nvme_rdma_alloc_queue(struct nvme_rdma_ctrl *ctrl,
 		ret = PTR_ERR(queue->cm_id);
 		goto out_destroy_mutex;
 	}
+	/* set ack timeout to 262ms(2^(15+1)*4us=262ms) */
+	rdma_set_ack_timeout(queue->cm_id, 15);
 
 	if (ctrl->ctrl.opts->mask & NVMF_OPT_HOST_TRADDR)
 		src_addr = (struct sockaddr *)&ctrl->src_addr;
-- 
2.16.4




More information about the Linux-nvme mailing list