env: add spdk_mempool_create() socket_id parameter

Change-Id: I8ab0bb2c6e1fdf1681fbd049a096c1768e54dc27
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2017-01-25 13:35:40 -07:00
parent 4c55092882
commit b809cdd3ab
7 changed files with 21 additions and 11 deletions

View File

@ -492,8 +492,10 @@ associate_workers_with_chan(void)
t->ioat_chan_id = i; t->ioat_chan_id = i;
snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%d", 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); 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->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); 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) { if (!t->data_pool || !t->task_pool) {
fprintf(stderr, "Could not allocate buffer pool.\n"); fprintf(stderr, "Could not allocate buffer pool.\n");
spdk_mempool_free(t->data_pool); spdk_mempool_free(t->data_pool);

View File

@ -335,9 +335,10 @@ work_fn(void *arg)
snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%d", rte_lcore_id()); 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()); 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, 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) { if (!t->data_pool || !t->task_pool) {
fprintf(stderr, "Could not allocate buffer pool.\n"); fprintf(stderr, "Could not allocate buffer pool.\n");
return 1; return 1;

View File

@ -107,9 +107,11 @@ struct spdk_mempool;
* Create a thread-safe memory pool. Cache size is the number of * 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 * elements in a thread-local cache. Can be 0 for no caching, or -1
* for unspecified. * 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, 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. * Free a memory pool.

View File

@ -130,11 +130,15 @@ spdk_memzone_dump(FILE *f)
struct spdk_mempool * struct spdk_mempool *
spdk_mempool_create(const char *name, size_t count, 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; struct rte_mempool *mp;
size_t tmp; 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 */ /* No more than half of all elements can be in cache */
tmp = (count / 2) / rte_lcore_count(); tmp = (count / 2) / rte_lcore_count();
if (cache_size > tmp) { 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, mp = rte_mempool_create(name, count, ele_size, cache_size,
0, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL,
SOCKET_ID_ANY, 0); socket_id, 0);
return (struct spdk_mempool *)mp; return (struct spdk_mempool *)mp;
} }

View File

@ -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); snprintf(mempool_name, sizeof(mempool_name), "spdk_event_mempool_%d", i);
g_spdk_event_mempool[i] = spdk_mempool_create(mempool_name, g_spdk_event_mempool[i] = spdk_mempool_create(mempool_name,
(262144 / socket_count), (262144 / socket_count),
sizeof(struct spdk_event), -1); sizeof(struct spdk_event), -1, i);
if (g_spdk_event_mempool[i] == NULL) { if (g_spdk_event_mempool[i] == NULL) {
SPDK_ERRLOG("spdk_event_mempool creation failed on socket %d\n", i); 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( g_spdk_event_mempool[i] = spdk_mempool_create(
mempool_name, mempool_name,
(262144 / socket_count), (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. */ /* TODO: in DPDK 16.04, free mempool API is avaialbe. */
if (g_spdk_event_mempool[i] == NULL) { if (g_spdk_event_mempool[i] == NULL) {

View File

@ -281,7 +281,7 @@ nvme_driver_init(void)
TAILQ_INIT(&g_spdk_nvme_driver->attached_ctrlrs); TAILQ_INIT(&g_spdk_nvme_driver->attached_ctrlrs);
g_spdk_nvme_driver->request_mempool = spdk_mempool_create("nvme_request", 8192, 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) { if (g_spdk_nvme_driver->request_mempool == NULL) {
SPDK_ERRLOG("unable to allocate pool of requests\n"); SPDK_ERRLOG("unable to allocate pool of requests\n");

View File

@ -98,7 +98,7 @@ spdk_memzone_free(const char *name)
struct spdk_mempool * struct spdk_mempool *
spdk_mempool_create(const char *name, size_t count, 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; static int mp = 0;