[PATCH v3 4/4] rsockets: acknowledge completion queue events in batch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Author: Sreedhar Kodali <srkodali@xxxxxxxxxxxxxxxxxx>
Change note from v2 to v3: eliminated setting through option as suggested by Sean
Date:   Mon Sep 8 15:38:54 2014 +0530

    Perform completion event acknowledgments in batches instead
    of individually to minimze locking overheads.  Size of the
    completion queue decides the size of a batch.

    Signed-off-by: Sreedhar Kodali <srkodali@xxxxxxxxxxxxxxxxxx>
    ---

diff --git a/src/rsocket.c b/src/rsocket.c
index ffea0ca..d201e0a 100644
--- a/src/rsocket.c
+++ b/src/rsocket.c
@@ -384,6 +384,7 @@ struct rsocket {
 	dlist_entry	  iomap_list;
 	dlist_entry	  iomap_queue;
 	int		  iomap_pending;
+	int	      unack_cqe;
 };

 #define DS_UDP_TAG 0x55555555
@@ -638,6 +639,7 @@ static struct rsocket *rs_alloc(struct rsocket *inherited_rs, int type)
 			rs->target_iomap_size = def_iomap_size;
 		}
 	}
+	rs->unack_cqe = 0;
 	fastlock_init(&rs->slock);
 	fastlock_init(&rs->rlock);
 	fastlock_init(&rs->cq_lock);
@@ -1044,8 +1046,11 @@ static void rs_free(struct rsocket *rs)

 	if (rs->cm_id) {
 		rs_free_iomappings(rs);
-		if (rs->cm_id->qp)
+		if (rs->cm_id->qp) {
+			if (rs->unack_cqe > 0)
+				ibv_ack_cq_events(rs->cm_id->recv_cq, rs->unack_cqe);
 			rdma_destroy_qp(rs->cm_id);
+		}
 		rdma_destroy_id(rs->cm_id);
 	}

@@ -2026,7 +2031,11 @@ static int rs_get_cq_event(struct rsocket *rs)
 resume_get_cq_event:
 	ret = ibv_get_cq_event(rs->cm_id->recv_cq_channel, &cq, &context);
 	if (!ret) {
-		ibv_ack_cq_events(rs->cm_id->recv_cq, 1);
+		rs->unack_cqe += 1;
+		if (rs->unack_cqe == rs->sq_size + rs->rq_size) {
+			ibv_ack_cq_events(rs->cm_id->recv_cq, rs->unack_cqe);
+			rs->unack_cqe = 0;
+		}
 		rs->cq_armed = 0;
 	} else if (restart_onintr == 1 && errno == EINTR) {
 		errno = 0;

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux