From b809cdd3ab8e1586693904149c159ba73f8166e7 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 25 Jan 2017 13:35:40 -0700 Subject: [PATCH] env: add spdk_mempool_create() socket_id parameter Change-Id: I8ab0bb2c6e1fdf1681fbd049a096c1768e54dc27 Signed-off-by: Daniel Verkamp --- examples/ioat/perf/perf.c | 6 ++++-- examples/ioat/verify/verify.c | 5 +++-- include/spdk/env.h | 4 +++- lib/env_dpdk/env.c | 8 ++++++-- lib/event/reactor.c | 5 +++-- lib/nvme/nvme.c | 2 +- test/lib/nvme/unit/test_env.c | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/examples/ioat/perf/perf.c b/examples/ioat/perf/perf.c index 5ce752ab8..3aeac7247 100644 --- a/examples/ioat/perf/perf.c +++ b/examples/ioat/perf/perf.c @@ -492,8 +492,10 @@ associate_workers_with_chan(void) t->ioat_chan_id = i; snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%d", i); snprintf(task_pool_name, sizeof(task_pool_name), "task_pool_%d", i); - t->data_pool = spdk_mempool_create(buf_pool_name, 512, g_user_config.xfer_size_bytes, -1); - t->task_pool = spdk_mempool_create(task_pool_name, 512, sizeof(struct ioat_task), -1); + t->data_pool = spdk_mempool_create(buf_pool_name, 512, g_user_config.xfer_size_bytes, -1, + SPDK_ENV_SOCKET_ID_ANY); + t->task_pool = spdk_mempool_create(task_pool_name, 512, sizeof(struct ioat_task), -1, + SPDK_ENV_SOCKET_ID_ANY); if (!t->data_pool || !t->task_pool) { fprintf(stderr, "Could not allocate buffer pool.\n"); spdk_mempool_free(t->data_pool); diff --git a/examples/ioat/verify/verify.c b/examples/ioat/verify/verify.c index 9498b86a6..29ad67ac2 100644 --- a/examples/ioat/verify/verify.c +++ b/examples/ioat/verify/verify.c @@ -335,9 +335,10 @@ work_fn(void *arg) snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%d", rte_lcore_id()); snprintf(task_pool_name, sizeof(task_pool_name), "task_pool_%d", rte_lcore_id()); - t->data_pool = spdk_mempool_create(buf_pool_name, g_user_config.queue_depth, SRC_BUFFER_SIZE, -1); + t->data_pool = spdk_mempool_create(buf_pool_name, g_user_config.queue_depth, SRC_BUFFER_SIZE, -1, + SPDK_ENV_SOCKET_ID_ANY); t->task_pool = spdk_mempool_create(task_pool_name, g_user_config.queue_depth, - sizeof(struct ioat_task), -1); + sizeof(struct ioat_task), -1, SPDK_ENV_SOCKET_ID_ANY); if (!t->data_pool || !t->task_pool) { fprintf(stderr, "Could not allocate buffer pool.\n"); return 1; diff --git a/include/spdk/env.h b/include/spdk/env.h index 8aae751aa..697554e94 100644 --- a/include/spdk/env.h +++ b/include/spdk/env.h @@ -107,9 +107,11 @@ struct spdk_mempool; * Create a thread-safe memory pool. Cache size is the number of * elements in a thread-local cache. Can be 0 for no caching, or -1 * for unspecified. + * + * \param socket_id Socket ID to allocate memory on, or SPDK_ENV_SOCKET_ID_ANY for any socket. */ struct spdk_mempool *spdk_mempool_create(const char *name, size_t count, - size_t ele_size, size_t cache_size); + size_t ele_size, size_t cache_size, int socket_id); /** * Free a memory pool. diff --git a/lib/env_dpdk/env.c b/lib/env_dpdk/env.c index 16ef775fc..6c63b92db 100644 --- a/lib/env_dpdk/env.c +++ b/lib/env_dpdk/env.c @@ -130,11 +130,15 @@ spdk_memzone_dump(FILE *f) struct spdk_mempool * spdk_mempool_create(const char *name, size_t count, - size_t ele_size, size_t cache_size) + size_t ele_size, size_t cache_size, int socket_id) { struct rte_mempool *mp; size_t tmp; + if (socket_id == SPDK_ENV_SOCKET_ID_ANY) { + socket_id = SOCKET_ID_ANY; + } + /* No more than half of all elements can be in cache */ tmp = (count / 2) / rte_lcore_count(); if (cache_size > tmp) { @@ -147,7 +151,7 @@ spdk_mempool_create(const char *name, size_t count, mp = rte_mempool_create(name, count, ele_size, cache_size, 0, NULL, NULL, NULL, NULL, - SOCKET_ID_ANY, 0); + socket_id, 0); return (struct spdk_mempool *)mp; } diff --git a/lib/event/reactor.c b/lib/event/reactor.c index 2b061c01e..99a88be76 100644 --- a/lib/event/reactor.c +++ b/lib/event/reactor.c @@ -613,7 +613,7 @@ spdk_reactors_init(const char *mask, unsigned int max_delay_us) snprintf(mempool_name, sizeof(mempool_name), "spdk_event_mempool_%d", i); g_spdk_event_mempool[i] = spdk_mempool_create(mempool_name, (262144 / socket_count), - sizeof(struct spdk_event), -1); + sizeof(struct spdk_event), -1, i); if (g_spdk_event_mempool[i] == NULL) { SPDK_ERRLOG("spdk_event_mempool creation failed on socket %d\n", i); @@ -627,7 +627,8 @@ spdk_reactors_init(const char *mask, unsigned int max_delay_us) g_spdk_event_mempool[i] = spdk_mempool_create( mempool_name, (262144 / socket_count), - sizeof(struct spdk_event), -1); + sizeof(struct spdk_event), -1, + SPDK_ENV_SOCKET_ID_ANY); /* TODO: in DPDK 16.04, free mempool API is avaialbe. */ if (g_spdk_event_mempool[i] == NULL) { diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index 168c829ae..fa5404fc7 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -281,7 +281,7 @@ nvme_driver_init(void) TAILQ_INIT(&g_spdk_nvme_driver->attached_ctrlrs); g_spdk_nvme_driver->request_mempool = spdk_mempool_create("nvme_request", 8192, - sizeof(struct nvme_request), 128); + sizeof(struct nvme_request), 128, SPDK_ENV_SOCKET_ID_ANY); if (g_spdk_nvme_driver->request_mempool == NULL) { SPDK_ERRLOG("unable to allocate pool of requests\n"); diff --git a/test/lib/nvme/unit/test_env.c b/test/lib/nvme/unit/test_env.c index fc03ec9e5..d405c21d4 100644 --- a/test/lib/nvme/unit/test_env.c +++ b/test/lib/nvme/unit/test_env.c @@ -98,7 +98,7 @@ spdk_memzone_free(const char *name) struct spdk_mempool * spdk_mempool_create(const char *name, size_t count, - size_t ele_size, size_t cache_size) + size_t ele_size, size_t cache_size, int socket_id) { static int mp = 0;