Commit 207e6a60 authored by Ben Walker's avatar Ben Walker Committed by Benjamin Walker
Browse files

nvmf: Set minimum and maximum on allowed queue depths



Change-Id: I72988b0691154165757201f5f5bc89d199249660
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 90cd7fc5
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -64,6 +64,10 @@ struct spdk_nvmf_probe_ctx {
#define SPDK_NVMF_CONFIG_QUEUES_PER_SESSION_MIN 2
#define SPDK_NVMF_CONFIG_QUEUES_PER_SESSION_MAX 1024

#define SPDK_NVMF_CONFIG_QUEUE_DEPTH_DEFAULT 128
#define SPDK_NVMF_CONFIG_QUEUE_DEPTH_MIN 16
#define SPDK_NVMF_CONFIG_QUEUE_DEPTH_MAX 1024

static int
spdk_nvmf_parse_nvmf_tgt(void)
{
@@ -80,10 +84,15 @@ spdk_nvmf_parse_nvmf_tgt(void)

	max_queue_depth = spdk_conf_section_get_intval(sp, "MaxQueueDepth");
	if (max_queue_depth < 0) {
		max_queue_depth = SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH;
		max_queue_depth = SPDK_NVMF_CONFIG_QUEUE_DEPTH_DEFAULT;
	}
	max_queue_depth = nvmf_max(max_queue_depth, SPDK_NVMF_CONFIG_QUEUE_DEPTH_MIN);
	max_queue_depth = nvmf_min(max_queue_depth, SPDK_NVMF_CONFIG_QUEUE_DEPTH_MAX);

	max_queues_per_sess = spdk_conf_section_get_intval(sp, "MaxQueuesPerSession");
	if (max_queues_per_sess < 0) {
		max_queues_per_sess = SPDK_NVMF_CONFIG_QUEUES_PER_SESSION_DEFAULT;
	}
	max_queues_per_sess = nvmf_max(max_queues_per_sess, SPDK_NVMF_CONFIG_QUEUES_PER_SESSION_MIN);
	max_queues_per_sess = nvmf_min(max_queues_per_sess, SPDK_NVMF_CONFIG_QUEUES_PER_SESSION_MAX);

+2 −11
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ spdk_nvmf_initialize_pools(void)
{
	SPDK_NOTICELOG("\n*** NVMf Pool Creation ***\n");

	g_num_requests = MAX_SUBSYSTEMS * g_nvmf_tgt.max_queues_per_session * g_nvmf_tgt.MaxQueueDepth;
	g_num_requests = MAX_SUBSYSTEMS * g_nvmf_tgt.max_queues_per_session * g_nvmf_tgt.max_queue_depth;

	/* create NVMe backend request pool */
	request_mempool = rte_mempool_create("NVMe_Pool",
@@ -120,17 +120,8 @@ nvmf_tgt_init(int max_queue_depth, int max_queues_per_sess)
{
	int rc;

	if (max_queue_depth >= 1 &&
	    max_queue_depth <= SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH) {
		g_nvmf_tgt.MaxQueueDepth = max_queue_depth;
		SPDK_TRACELOG(SPDK_TRACE_DEBUG, "MaxQueueDepth: %d\n",
			      g_nvmf_tgt.MaxQueueDepth);
	} else {
		SPDK_ERRLOG("Invalid MaxQueueDepth: %d\n", max_queue_depth);
		return -EINVAL;
	}

	g_nvmf_tgt.max_queues_per_session = max_queues_per_sess;
	g_nvmf_tgt.max_queue_depth = max_queue_depth;

	rc = pthread_mutex_init(&g_nvmf_tgt.mutex, NULL);
	if (rc != 0) {
+1 −2
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@
#define SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE  DEFAULT_BB_SIZE

#define SPDK_NVMF_DEFAULT_NUM_SESSIONS_PER_LCORE 1
#define SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH 128
#define SPDK_NVMF_DEFAULT_SIN_PORT ((uint16_t)4420)

#define OBJECT_NVMF_IO				0x30
@@ -99,7 +98,7 @@ struct __attribute__((packed)) nvme_read_cdw13 {
struct spdk_nvmf_globals {
	pthread_mutex_t mutex;

	int MaxQueueDepth;
	int max_queue_depth;
	int max_queues_per_session;

	uint16_t	   sin_port;
+2 −2
Original line number Diff line number Diff line
@@ -628,8 +628,8 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
	if (host_event_data->private_data == NULL ||
	    host_event_data->private_data_len < sizeof(struct spdk_nvmf_rdma_request_private_data)) {
		/* No private data, so use defaults. */
		qp_depth = SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH;
		rw_depth = SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH;
		qp_depth = g_nvmf_tgt.max_queue_depth;
		rw_depth = g_nvmf_tgt.max_queue_depth;
	} else {
		const struct spdk_nvmf_rdma_request_private_data *private_data = host_event_data->private_data;
		qp_depth = nvmf_min(private_data->hrqsize, private_data->hsqsize);
+2 −2
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ nvmf_init_discovery_session_properties(struct nvmf_session *session)
{
	struct spdk_nvmf_extended_identify_ctrlr_data *nvmfdata;

	session->vcdata.maxcmd = SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH;
	session->vcdata.maxcmd = g_nvmf_tgt.max_queue_depth;
	/* extended data for get log page supportted */
	session->vcdata.lpa.edlp = 1;
	session->vcdata.cntlid = 0; /* There is one controller per subsystem, so its id is 0 */
@@ -100,7 +100,7 @@ nvmf_init_nvme_session_properties(struct nvmf_session *session)
	session->vcdata.aerl = 0;
	session->vcdata.cntlid = 0;
	session->vcdata.kas = 10;
	session->vcdata.maxcmd = SPDK_NVMF_DEFAULT_MAX_QUEUE_DEPTH;
	session->vcdata.maxcmd = g_nvmf_tgt.max_queue_depth;
	session->vcdata.mdts = SPDK_NVMF_MAX_RECV_DATA_TRANSFER_SIZE / 4096;
	session->vcdata.sgls.keyed_sgl = 1;
	session->vcdata.sgls.sgl_offset = 1;