Commit 79215d80 authored by Ziye Yang's avatar Ziye Yang Committed by Tomasz Zawadzki
Browse files

sock/uring: use batched manner to get the cqes.



Purpose: This can improve the performance.

Change-Id: I3f5526ab8716cb0771b5e193afa9a0dbffec5cc0
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1929


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 4f6fe261
Loading
Loading
Loading
Loading
+9 −14
Original line number Diff line number Diff line
@@ -884,23 +884,18 @@ static int
spdk_sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, int max_read_events,
			   struct spdk_sock **socks)
{
	int i, count, ret;
	struct io_uring_cqe *cqe;
	int count, i, completed_cqe_num;
	struct io_uring_cqe *cqes[SPDK_SOCK_GROUP_QUEUE_DEPTH];
	struct spdk_uring_sock *sock, *tmp;
	struct spdk_uring_task *task;
	int status;

	for (i = 0; i < max; i++) {
		ret = io_uring_peek_cqe(&group->uring, &cqe);
		if (ret != 0) {
			break;
		}

		if (cqe == NULL) {
			break;
		}
	max = spdk_min(max, SPDK_SOCK_GROUP_QUEUE_DEPTH);
	completed_cqe_num = io_uring_peek_batch_cqe(&group->uring, cqes, max);
	for (i = 0; i < completed_cqe_num; i++) {
		assert(cqes[i] != NULL);

		task = (struct spdk_uring_task *)cqe->user_data;
		task = (struct spdk_uring_task *)cqes[i]->user_data;
		assert(task != NULL);
		sock = task->sock;
		assert(sock != NULL);
@@ -908,8 +903,8 @@ spdk_sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, in
		assert(sock->group == group);
		sock->group->io_inflight--;
		sock->group->io_avail++;
		status = cqe->res;
		io_uring_cqe_seen(&group->uring, cqe);
		status = cqes[i]->res;
		io_uring_cqe_seen(&group->uring, cqes[i]);

		task->status = SPDK_URING_SOCK_TASK_NOT_IN_USE;

+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ DEFINE_STUB(__io_uring_get_cqe, int, (struct io_uring *ring, struct io_uring_cqe
DEFINE_STUB(io_uring_submit, int, (struct io_uring *ring), 0);
DEFINE_STUB(io_uring_get_sqe, struct io_uring_sqe *, (struct io_uring *ring), 0);
DEFINE_STUB(io_uring_queue_init, int, (unsigned entries, struct io_uring *ring, unsigned flags), 0);
DEFINE_STUB(io_uring_peek_batch_cqe, unsigned, (struct io_uring *ring, struct io_uring_cqe **cqes,
		unsigned count), 0);
DEFINE_STUB_V(io_uring_queue_exit, (struct io_uring *ring));

static void