nvme: Add the interface to get the optimal polling group

This patch is used to add spdk_nvme_poll_group_get_optimal
public API.

Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Change-Id: Iee34c89e0e1ff1f81167b18e198c144ca28f71de
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3311
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Ziye Yang 2020-12-30 22:52:07 +08:00 committed by Tomasz Zawadzki
parent 7cc83b6258
commit e749b5d3ec
8 changed files with 54 additions and 2 deletions

View File

@ -2,6 +2,12 @@
## v21.04: (Upcoming Release)
### nvme
Added `spdk_nvme_qpair_get_optimal_poll_group` function and `qpair_get_optimal_poll_group`
function pointer in spdk_nvmf_transport_ops structure in order to add the qpair to the most
suitable polling group.
## v21.01:
### bdev

View File

@ -2186,6 +2186,15 @@ typedef void (*spdk_nvme_disconnected_qpair_cb)(struct spdk_nvme_qpair *qpair,
*/
struct spdk_nvme_poll_group *spdk_nvme_poll_group_create(void *ctx);
/**
* Get a optimal poll group.
*
* \param qpair The qpair to get the optimal poll group.
*
* \return Pointer to the optimal poll group, or NULL if not found.
*/
struct spdk_nvme_poll_group *spdk_nvme_qpair_get_optimal_poll_group(struct spdk_nvme_qpair *qpair);
/**
* Add an spdk_nvme_qpair to a poll group. qpairs may only be added to
* a poll group if they are in the disconnected state; i.e. either they were
@ -3408,6 +3417,8 @@ struct spdk_nvme_transport_ops {
void (*admin_qpair_abort_aers)(struct spdk_nvme_qpair *qpair);
struct spdk_nvme_transport_poll_group *(*poll_group_create)(void);
struct spdk_nvme_transport_poll_group *(*qpair_get_optimal_poll_group)(
struct spdk_nvme_qpair *qpair);
int (*poll_group_add)(struct spdk_nvme_transport_poll_group *tgroup, struct spdk_nvme_qpair *qpair);

View File

@ -34,8 +34,8 @@
SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
SO_VER := 4
SO_MINOR := 2
SO_VER := 5
SO_MINOR := 0
C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_fabric.c nvme_ns_cmd.c nvme_ns.c nvme_pcie_common.c nvme_pcie.c nvme_qpair.c nvme.c nvme_quirks.c nvme_transport.c nvme_uevent.c \
nvme_ctrlr_ocssd_cmd.c nvme_ns_ocssd_cmd.c nvme_tcp.c nvme_opal.c nvme_io_msg.c nvme_poll_group.c nvme_zns.c

View File

@ -1315,6 +1315,9 @@ int nvme_transport_qpair_iterate_requests(struct spdk_nvme_qpair *qpair,
struct spdk_nvme_transport_poll_group *nvme_transport_poll_group_create(
const struct spdk_nvme_transport *transport);
struct spdk_nvme_transport_poll_group *nvme_transport_qpair_get_optimal_poll_group(
const struct spdk_nvme_transport *transport,
struct spdk_nvme_qpair *qpair);
int nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
struct spdk_nvme_qpair *qpair);
int nvme_transport_poll_group_remove(struct spdk_nvme_transport_poll_group *tgroup,

View File

@ -50,6 +50,20 @@ spdk_nvme_poll_group_create(void *ctx)
return group;
}
struct spdk_nvme_poll_group *
spdk_nvme_qpair_get_optimal_poll_group(struct spdk_nvme_qpair *qpair)
{
struct spdk_nvme_transport_poll_group *tgroup;
tgroup = nvme_transport_qpair_get_optimal_poll_group(qpair->transport, qpair);
if (tgroup == NULL) {
return NULL;
}
return tgroup->group;
}
int
spdk_nvme_poll_group_add(struct spdk_nvme_poll_group *group, struct spdk_nvme_qpair *qpair)
{

View File

@ -448,6 +448,17 @@ nvme_transport_poll_group_create(const struct spdk_nvme_transport *transport)
return group;
}
struct spdk_nvme_transport_poll_group *
nvme_transport_qpair_get_optimal_poll_group(const struct spdk_nvme_transport *transport,
struct spdk_nvme_qpair *qpair)
{
if (transport->ops.qpair_get_optimal_poll_group) {
return transport->ops.qpair_get_optimal_poll_group(qpair);
} else {
return NULL;
}
}
int
nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
struct spdk_nvme_qpair *qpair)

View File

@ -141,6 +141,7 @@
spdk_nvme_ns_cmd_comparev_with_md;
spdk_nvme_ns_cmd_compare_with_md;
spdk_nvme_qpair_get_optimal_poll_group;
spdk_nvme_qpair_process_completions;
spdk_nvme_qpair_get_failure_reason;
spdk_nvme_qpair_add_cmd_error_injection;

View File

@ -63,6 +63,12 @@ int g_destroy_return_value = 0;
TAILQ_HEAD(nvme_transport_list, spdk_nvme_transport) g_spdk_nvme_transports =
TAILQ_HEAD_INITIALIZER(g_spdk_nvme_transports);
DEFINE_STUB(nvme_transport_qpair_get_optimal_poll_group,
struct spdk_nvme_transport_poll_group *,
(const struct spdk_nvme_transport *transport,
struct spdk_nvme_qpair *qpair),
NULL);
static void
unit_test_disconnected_qpair_cb(struct spdk_nvme_qpair *qpair, void *poll_group_ctx)
{