Commit 937d828f authored by Seth Howell's avatar Seth Howell Committed by Tomasz Zawadzki
Browse files

module/sock_uring: add a map file and remove spdk prefix.



Signed-off-by: default avatarSeth Howell <seth.howell@intel.com>
Change-Id: I8c68fc09952d920d6dcf1d8112ba08490e578f84
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2357


Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 0bc117a4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -41,4 +41,6 @@ SO_SUFFIX := $(SO_VER).$(SO_MINOR)
LIBNAME = sock_uring
C_SRCS = uring.c

SPDK_MAP_FILE = $(SPDK_ROOT_DIR)/mk/spdk_blank.map

include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk
+77 −77
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ get_addr_str(struct sockaddr *sa, char *host, size_t hlen)
#define __uring_group_impl(group) (struct spdk_uring_sock_group_impl *)group

static int
spdk_uring_sock_getaddr(struct spdk_sock *_sock, char *saddr, int slen, uint16_t *sport,
uring_sock_getaddr(struct spdk_sock *_sock, char *saddr, int slen, uint16_t *sport,
		   char *caddr, int clen, uint16_t *cport)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
@@ -206,13 +206,13 @@ spdk_uring_sock_getaddr(struct spdk_sock *_sock, char *saddr, int slen, uint16_t
	return 0;
}

enum spdk_uring_sock_create_type {
enum uring_sock_create_type {
	SPDK_SOCK_CREATE_LISTEN,
	SPDK_SOCK_CREATE_CONNECT,
};

static int
spdk_uring_sock_alloc_pipe(struct spdk_uring_sock *sock, int sz)
uring_sock_alloc_pipe(struct spdk_uring_sock *sock, int sz)
{
	uint8_t *new_buf;
	struct spdk_pipe *new_pipe;
@@ -276,7 +276,7 @@ spdk_uring_sock_alloc_pipe(struct spdk_uring_sock *sock, int sz)
}

static int
spdk_uring_sock_set_recvbuf(struct spdk_sock *_sock, int sz)
uring_sock_set_recvbuf(struct spdk_sock *_sock, int sz)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int rc;
@@ -286,7 +286,7 @@ spdk_uring_sock_set_recvbuf(struct spdk_sock *_sock, int sz)
#ifndef __aarch64__
	/* On ARM systems, this buffering does not help. Skip it. */
	/* The size of the pipe is purely derived from benchmarks. It seems to work well. */
	rc = spdk_uring_sock_alloc_pipe(sock, sz);
	rc = uring_sock_alloc_pipe(sock, sz);
	if (rc) {
		SPDK_ERRLOG("unable to allocate sufficient recvbuf with sz=%d on sock=%p\n", sz, _sock);
		return rc;
@@ -306,7 +306,7 @@ spdk_uring_sock_set_recvbuf(struct spdk_sock *_sock, int sz)
}

static int
spdk_uring_sock_set_sendbuf(struct spdk_sock *_sock, int sz)
uring_sock_set_sendbuf(struct spdk_sock *_sock, int sz)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int rc;
@@ -326,7 +326,7 @@ spdk_uring_sock_set_sendbuf(struct spdk_sock *_sock, int sz)
}

static struct spdk_uring_sock *
_spdk_uring_sock_alloc(int fd)
uring_sock_alloc(int fd)
{
	struct spdk_uring_sock *sock;

@@ -341,8 +341,8 @@ _spdk_uring_sock_alloc(int fd)
}

static struct spdk_sock *
spdk_uring_sock_create(const char *ip, int port,
		       enum spdk_uring_sock_create_type type,
uring_sock_create(const char *ip, int port,
		  enum uring_sock_create_type type,
		  struct spdk_sock_opts *opts)
{
	struct spdk_uring_sock *sock;
@@ -489,7 +489,7 @@ retry:
		return NULL;
	}

	sock = _spdk_uring_sock_alloc(fd);
	sock = uring_sock_alloc(fd);
	if (sock == NULL) {
		SPDK_ERRLOG("sock allocation failed\n");
		close(fd);
@@ -500,19 +500,19 @@ retry:
}

static struct spdk_sock *
spdk_uring_sock_listen(const char *ip, int port, struct spdk_sock_opts *opts)
uring_sock_listen(const char *ip, int port, struct spdk_sock_opts *opts)
{
	return spdk_uring_sock_create(ip, port, SPDK_SOCK_CREATE_LISTEN, opts);
	return uring_sock_create(ip, port, SPDK_SOCK_CREATE_LISTEN, opts);
}

static struct spdk_sock *
spdk_uring_sock_connect(const char *ip, int port, struct spdk_sock_opts *opts)
uring_sock_connect(const char *ip, int port, struct spdk_sock_opts *opts)
{
	return spdk_uring_sock_create(ip, port, SPDK_SOCK_CREATE_CONNECT, opts);
	return uring_sock_create(ip, port, SPDK_SOCK_CREATE_CONNECT, opts);
}

static struct spdk_sock *
spdk_uring_sock_accept(struct spdk_sock *_sock)
uring_sock_accept(struct spdk_sock *_sock)
{
	struct spdk_uring_sock		*sock = __uring_sock(_sock);
	struct sockaddr_storage		sa;
@@ -552,7 +552,7 @@ spdk_uring_sock_accept(struct spdk_sock *_sock)
	}
#endif

	new_sock = _spdk_uring_sock_alloc(fd);
	new_sock = uring_sock_alloc(fd);
	if (new_sock == NULL) {
		close(fd);
		return NULL;
@@ -562,7 +562,7 @@ spdk_uring_sock_accept(struct spdk_sock *_sock)
}

static int
spdk_uring_sock_close(struct spdk_sock *_sock)
uring_sock_close(struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int rc;
@@ -586,7 +586,7 @@ spdk_uring_sock_close(struct spdk_sock *_sock)
}

static ssize_t
spdk_uring_sock_recv_from_pipe(struct spdk_uring_sock *sock, struct iovec *diov, int diovcnt)
uring_sock_recv_from_pipe(struct spdk_uring_sock *sock, struct iovec *diov, int diovcnt)
{
	struct iovec siov[2];
	int sbytes;
@@ -623,7 +623,7 @@ spdk_uring_sock_recv_from_pipe(struct spdk_uring_sock *sock, struct iovec *diov,
}

static inline ssize_t
_spdk_uring_sock_read(struct spdk_uring_sock *sock)
uring_sock_read(struct spdk_uring_sock *sock)
{
	struct iovec iov[2];
	int bytes;
@@ -647,7 +647,7 @@ _spdk_uring_sock_read(struct spdk_uring_sock *sock)
}

static ssize_t
spdk_uring_sock_readv(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
uring_sock_readv(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int rc, i;
@@ -670,28 +670,28 @@ spdk_uring_sock_readv(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
		}

		/* Otherwise, do a big read into our pipe */
		rc = _spdk_uring_sock_read(sock);
		rc = uring_sock_read(sock);
		if (rc <= 0) {
			return rc;
		}
	}

	return spdk_uring_sock_recv_from_pipe(sock, iov, iovcnt);
	return uring_sock_recv_from_pipe(sock, iov, iovcnt);
}

static ssize_t
spdk_uring_sock_recv(struct spdk_sock *sock, void *buf, size_t len)
uring_sock_recv(struct spdk_sock *sock, void *buf, size_t len)
{
	struct iovec iov[1];

	iov[0].iov_base = buf;
	iov[0].iov_len = len;

	return spdk_uring_sock_readv(sock, iov, 1);
	return uring_sock_readv(sock, iov, 1);
}

static ssize_t
spdk_uring_sock_writev(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
uring_sock_writev(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);

@@ -704,7 +704,7 @@ spdk_uring_sock_writev(struct spdk_sock *_sock, struct iovec *iov, int iovcnt)
}

static int
spdk_sock_prep_reqs(struct spdk_sock *_sock, struct iovec *iovs, int index,
sock_prep_reqs(struct spdk_sock *_sock, struct iovec *iovs, int index,
	       struct spdk_sock_request **last_req)
{
	int iovcnt, i;
@@ -758,7 +758,7 @@ end:
}

static int
spdk_sock_complete_reqs(struct spdk_sock *_sock, ssize_t rc)
sock_complete_reqs(struct spdk_sock *_sock, ssize_t rc)
{
	struct spdk_sock_request *req;
	int i, retval;
@@ -821,7 +821,7 @@ _sock_flush(struct spdk_sock *_sock)
		return;
	}

	iovcnt = spdk_sock_prep_reqs(&sock->base, task->iovs, task->iov_cnt, &task->last_req);
	iovcnt = sock_prep_reqs(&sock->base, task->iovs, task->iov_cnt, &task->last_req);
	if (!iovcnt) {
		return;
	}
@@ -881,7 +881,7 @@ _sock_prep_cancel_task(struct spdk_sock *_sock, void *user_data)
}

static int
spdk_sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, int max_read_events,
sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, int max_read_events,
		      struct spdk_sock **socks)
{
	int count, i, completed_cqe_num;
@@ -930,7 +930,7 @@ spdk_sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, in
			assert(TAILQ_EMPTY(&sock->base.pending_reqs));
			task->last_req = NULL;
			task->iov_cnt = 0;
			spdk_sock_complete_reqs(&sock->base, status);
			sock_complete_reqs(&sock->base, status);

			/* For socket is removed from the group but having outstanding I/O */
			if (spdk_unlikely(task->sock->outstanding_io > 0 &&
@@ -938,7 +938,7 @@ spdk_sock_uring_group_reap(struct spdk_uring_sock_group_impl *group, int max, in
				if (--sock->outstanding_io == 0) {
					/* Just for sock close case */
					if (sock->base.flags.closed) {
						spdk_uring_sock_close(&sock->base);
						uring_sock_close(&sock->base);
					}
				}
			}
@@ -995,7 +995,7 @@ _sock_flush_client(struct spdk_sock *_sock)
	}

	/* Gather an iov */
	iovcnt = spdk_sock_prep_reqs(_sock, iovs, 0, NULL);
	iovcnt = sock_prep_reqs(_sock, iovs, 0, NULL);
	if (iovcnt == 0) {
		return 0;
	}
@@ -1011,13 +1011,13 @@ _sock_flush_client(struct spdk_sock *_sock)
		return rc;
	}

	spdk_sock_complete_reqs(_sock, rc);
	sock_complete_reqs(_sock, rc);

	return 0;
}

static void
spdk_uring_sock_writev_async(struct spdk_sock *_sock, struct spdk_sock_request *req)
uring_sock_writev_async(struct spdk_sock *_sock, struct spdk_sock_request *req)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int rc;
@@ -1035,7 +1035,7 @@ spdk_uring_sock_writev_async(struct spdk_sock *_sock, struct spdk_sock_request *
}

static int
spdk_uring_sock_set_recvlowat(struct spdk_sock *_sock, int nbytes)
uring_sock_set_recvlowat(struct spdk_sock *_sock, int nbytes)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	int val;
@@ -1052,7 +1052,7 @@ spdk_uring_sock_set_recvlowat(struct spdk_sock *_sock, int nbytes)
}

static bool
spdk_uring_sock_is_ipv6(struct spdk_sock *_sock)
uring_sock_is_ipv6(struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	struct sockaddr_storage sa;
@@ -1073,7 +1073,7 @@ spdk_uring_sock_is_ipv6(struct spdk_sock *_sock)
}

static bool
spdk_uring_sock_is_ipv4(struct spdk_sock *_sock)
uring_sock_is_ipv4(struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	struct sockaddr_storage sa;
@@ -1094,7 +1094,7 @@ spdk_uring_sock_is_ipv4(struct spdk_sock *_sock)
}

static bool
spdk_uring_sock_is_connected(struct spdk_sock *_sock)
uring_sock_is_connected(struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
	uint8_t byte;
@@ -1117,7 +1117,7 @@ spdk_uring_sock_is_connected(struct spdk_sock *_sock)
}

static int
spdk_uring_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
uring_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
	int rc = -1;

@@ -1135,7 +1135,7 @@ spdk_uring_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
}

static struct spdk_sock_group_impl *
spdk_uring_sock_group_impl_create(void)
uring_sock_group_impl_create(void)
{
	struct spdk_uring_sock_group_impl *group_impl;

@@ -1159,7 +1159,7 @@ spdk_uring_sock_group_impl_create(void)
}

static int
spdk_uring_sock_group_impl_add_sock(struct spdk_sock_group_impl *_group,
uring_sock_group_impl_add_sock(struct spdk_sock_group_impl *_group,
			       struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
@@ -1187,7 +1187,7 @@ spdk_uring_sock_group_impl_add_sock(struct spdk_sock_group_impl *_group,
}

static int
spdk_uring_sock_group_impl_poll(struct spdk_sock_group_impl *_group, int max_events,
uring_sock_group_impl_poll(struct spdk_sock_group_impl *_group, int max_events,
			   struct spdk_sock **socks)
{
	struct spdk_uring_sock_group_impl *group = __uring_group_impl(_group);
@@ -1218,14 +1218,14 @@ spdk_uring_sock_group_impl_poll(struct spdk_sock_group_impl *_group, int max_eve
	count = 0;
	to_complete = group->io_inflight;
	if (to_complete > 0) {
		count = spdk_sock_uring_group_reap(group, to_complete, max_events, socks);
		count = sock_uring_group_reap(group, to_complete, max_events, socks);
	}

	return count;
}

static int
spdk_uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
				  struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);
@@ -1245,7 +1245,7 @@ spdk_uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
	/* Since spdk_sock_group_remove_sock is not asynchronous interface, so
	 * currently can use a while loop here. */
	while (sock->pollin_task.status != SPDK_URING_SOCK_TASK_NOT_IN_USE) {
		spdk_uring_sock_group_impl_poll(_group, 32, NULL);
		uring_sock_group_impl_poll(_group, 32, NULL);
	}

	if (sock->recv_pipe != NULL) {
@@ -1260,13 +1260,13 @@ spdk_uring_sock_group_impl_remove_sock(struct spdk_sock_group_impl *_group,
}

static int
spdk_uring_sock_group_impl_close(struct spdk_sock_group_impl *_group)
uring_sock_group_impl_close(struct spdk_sock_group_impl *_group)
{
	struct spdk_uring_sock_group_impl *group = __uring_group_impl(_group);

	/* try to reap all the active I/O */
	while (group->io_inflight) {
		spdk_uring_sock_group_impl_poll(_group, 32, NULL);
		uring_sock_group_impl_poll(_group, 32, NULL);
	}
	assert(group->io_inflight == 0);
	assert(group->io_avail == SPDK_SOCK_GROUP_QUEUE_DEPTH);
@@ -1279,7 +1279,7 @@ spdk_uring_sock_group_impl_close(struct spdk_sock_group_impl *_group)
}

static int
spdk_uring_sock_flush(struct spdk_sock *_sock)
uring_sock_flush(struct spdk_sock *_sock)
{
	struct spdk_uring_sock *sock = __uring_sock(_sock);

@@ -1292,28 +1292,28 @@ spdk_uring_sock_flush(struct spdk_sock *_sock)

static struct spdk_net_impl g_uring_net_impl = {
	.name		= "uring",
	.getaddr	= spdk_uring_sock_getaddr,
	.connect	= spdk_uring_sock_connect,
	.listen		= spdk_uring_sock_listen,
	.accept		= spdk_uring_sock_accept,
	.close		= spdk_uring_sock_close,
	.recv		= spdk_uring_sock_recv,
	.readv		= spdk_uring_sock_readv,
	.writev		= spdk_uring_sock_writev,
	.writev_async	= spdk_uring_sock_writev_async,
	.flush          = spdk_uring_sock_flush,
	.set_recvlowat	= spdk_uring_sock_set_recvlowat,
	.set_recvbuf	= spdk_uring_sock_set_recvbuf,
	.set_sendbuf	= spdk_uring_sock_set_sendbuf,
	.is_ipv6	= spdk_uring_sock_is_ipv6,
	.is_ipv4	= spdk_uring_sock_is_ipv4,
	.is_connected   = spdk_uring_sock_is_connected,
	.get_placement_id	= spdk_uring_sock_get_placement_id,
	.group_impl_create	= spdk_uring_sock_group_impl_create,
	.group_impl_add_sock	= spdk_uring_sock_group_impl_add_sock,
	.group_impl_remove_sock = spdk_uring_sock_group_impl_remove_sock,
	.group_impl_poll	= spdk_uring_sock_group_impl_poll,
	.group_impl_close	= spdk_uring_sock_group_impl_close,
	.getaddr	= uring_sock_getaddr,
	.connect	= uring_sock_connect,
	.listen		= uring_sock_listen,
	.accept		= uring_sock_accept,
	.close		= uring_sock_close,
	.recv		= uring_sock_recv,
	.readv		= uring_sock_readv,
	.writev		= uring_sock_writev,
	.writev_async	= uring_sock_writev_async,
	.flush          = uring_sock_flush,
	.set_recvlowat	= uring_sock_set_recvlowat,
	.set_recvbuf	= uring_sock_set_recvbuf,
	.set_sendbuf	= uring_sock_set_sendbuf,
	.is_ipv6	= uring_sock_is_ipv6,
	.is_ipv4	= uring_sock_is_ipv4,
	.is_connected   = uring_sock_is_connected,
	.get_placement_id	= uring_sock_get_placement_id,
	.group_impl_create	= uring_sock_group_impl_create,
	.group_impl_add_sock	= uring_sock_group_impl_add_sock,
	.group_impl_remove_sock = uring_sock_group_impl_remove_sock,
	.group_impl_poll	= uring_sock_group_impl_poll,
	.group_impl_close	= uring_sock_group_impl_close,
};

SPDK_NET_IMPL_REGISTER(uring, &g_uring_net_impl, DEFAULT_SOCK_PRIORITY + 1);
+8 −8
Original line number Diff line number Diff line
@@ -205,9 +205,9 @@ flush_server(void)
	 * that is fully completed. */
	spdk_sock_request_queue(sock, req1);
	cb_arg1 = false;
	rc = spdk_sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	rc = sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	CU_ASSERT(rc == 2);
	spdk_sock_complete_reqs(sock, 128);
	sock_complete_reqs(sock, 128);
	CU_ASSERT(cb_arg1 == true);
	CU_ASSERT(TAILQ_EMPTY(&sock->queued_reqs));

@@ -216,9 +216,9 @@ flush_server(void)
	spdk_sock_request_queue(sock, req2);
	cb_arg1 = false;
	cb_arg2 = false;
	rc = spdk_sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	rc = sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	CU_ASSERT(rc == 4);
	spdk_sock_complete_reqs(sock, 192);
	sock_complete_reqs(sock, 192);
	CU_ASSERT(cb_arg1 == true);
	CU_ASSERT(cb_arg2 == true);
	CU_ASSERT(TAILQ_EMPTY(&sock->queued_reqs));
@@ -227,20 +227,20 @@ flush_server(void)
	/* One request that is partially sent. */
	spdk_sock_request_queue(sock, req1);
	cb_arg1 = false;
	rc = spdk_sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	rc = sock_prep_reqs(sock, usock.write_task.iovs, 0, NULL);
	CU_ASSERT(rc == 2);
	spdk_sock_complete_reqs(sock, 92);
	sock_complete_reqs(sock, 92);
	CU_ASSERT(rc == 2);
	CU_ASSERT(cb_arg1 == false);
	CU_ASSERT(TAILQ_FIRST(&sock->queued_reqs) == req1);

	/* Get the second time partial sent result. */
	spdk_sock_complete_reqs(sock, 10);
	sock_complete_reqs(sock, 10);
	CU_ASSERT(cb_arg1 == false);
	CU_ASSERT(TAILQ_FIRST(&sock->queued_reqs) == req1);

	/* Data is finally sent. */
	spdk_sock_complete_reqs(sock, 26);
	sock_complete_reqs(sock, 26);
	CU_ASSERT(cb_arg1 == true);
	CU_ASSERT(TAILQ_EMPTY(&sock->queued_reqs));