static int spdk_nvmf_initialize_pools(void) { SPDK_NOTICELOG("\n*** NVMf Pool Creation ***\n"); g_num_requests = MAX_SUBSYSTEMS * g_nvmf_tgt.MaxConnectionsPerSession * g_nvmf_tgt.MaxQueueDepth; /* create NVMe backend request pool */ request_mempool = rte_mempool_create("NVMe_Pool", g_num_requests, spdk_nvme_request_size(), 128, 0, NULL, NULL, NULL, NULL, SOCKET_ID_ANY, 0); if (!request_mempool) { SPDK_ERRLOG("create NVMe request pool failed\n"); return -1; } SPDK_TRACELOG(SPDK_TRACE_DEBUG, "NVMe request_mempool %p, size %" PRIu64 " bytes\n", request_mempool, (uint64_t)g_num_requests * spdk_nvme_request_size()); return 0; }
int spdk_nvmf_transport_fini(void) { size_t i; int count = 0; for (i = 0; i != NUM_TRANSPORTS; i++) { if (g_transports[i]->transport_fini() < 0) { SPDK_NOTICELOG("%s transport fini failed\n", g_transports[i]->name); } else { count++; } } return count; }
int spdk_nvmf_transport_init(void) { size_t i; int count = 0; for (i = 0; i != NUM_TRANSPORTS; i++) { if (g_transports[i]->transport_init(g_nvmf_tgt.max_queue_depth, g_nvmf_tgt.max_io_size, g_nvmf_tgt.in_capsule_data_size) < 0) { SPDK_NOTICELOG("%s transport init failed\n", g_transports[i]->name); } else { count++; } } return count; }
/** \brief Create an NVMf fabric connection from the given parameters and schedule it on a reactor thread. \code # identify reactor where the new connections work item will be scheduled reactor = nvmf_allocate_reactor() schedule fabric connection work item on reactor \endcode */ int spdk_nvmf_startup_conn(struct spdk_nvmf_conn *conn) { int lcore; struct spdk_nvmf_conn *admin_conn; uint64_t nvmf_session_core = spdk_app_get_core_mask(); /* * if starting IO connection then determine core * allocated to admin queue to request core mask. * Can not assume nvmf session yet created at time * of fabric connection setup. Rely on fabric * function to locate matching controller session. */ if (conn->type == CONN_TYPE_IOQ && conn->cntlid != 0) { admin_conn = spdk_find_nvmf_conn_by_cntlid(conn->cntlid); if (admin_conn != NULL) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Located admin conn session core %d\n", admin_conn->poller.lcore); nvmf_session_core = 1ULL << admin_conn->poller.lcore; } } lcore = nvmf_allocate_reactor(nvmf_session_core); if (lcore < 0) { SPDK_ERRLOG("Unable to find core to launch connection.\n"); goto err0; } conn->state = CONN_STATE_RUNNING; SPDK_NOTICELOG("Launching nvmf connection[qid=%d] on core: %d\n", conn->qid, lcore); conn->poller.fn = spdk_nvmf_conn_do_work; conn->poller.arg = conn; rte_atomic32_inc(&g_num_connections[lcore]); spdk_poller_register(&conn->poller, lcore, NULL); return 0; err0: free_conn(conn); return -1; }