diff --git a/CHANGELOG.md b/CHANGELOG.md index 01459474b..55c93c073 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,13 @@ The NVMe driver now recognizes the NVMe 1.3 Namespace Optimal I/O Boundary field NVMe 1.3 devices may report an optimal I/O boundary, which the driver will take into account when splitting I/O requests. +### Environment Abstraction Layer + +A new default value, SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, was added to provide +additional clarity when constructing spdk_mempools. Previously, -1 could be +passed and the library would choose a reasonable default, but this new value +makes it explicit that the default is being used. + ## v17.07: Build system improvements, userspace vhost-blk target, and GPT bdev ### Build System diff --git a/examples/ioat/perf/perf.c b/examples/ioat/perf/perf.c index 3d4902527..3225f1626 100644 --- a/examples/ioat/perf/perf.c +++ b/examples/ioat/perf/perf.c @@ -468,9 +468,11 @@ 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->data_pool = spdk_mempool_create(buf_pool_name, 512, g_user_config.xfer_size_bytes, + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, SPDK_ENV_SOCKET_ID_ANY); - t->task_pool = spdk_mempool_create(task_pool_name, 512, sizeof(struct ioat_task), -1, + t->task_pool = spdk_mempool_create(task_pool_name, 512, sizeof(struct ioat_task), + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, SPDK_ENV_SOCKET_ID_ANY); if (!t->data_pool || !t->task_pool) { fprintf(stderr, "Could not allocate buffer pool.\n"); diff --git a/examples/ioat/verify/verify.c b/examples/ioat/verify/verify.c index 792551495..d0dd56a74 100644 --- a/examples/ioat/verify/verify.c +++ b/examples/ioat/verify/verify.c @@ -332,10 +332,13 @@ 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, + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, SPDK_ENV_SOCKET_ID_ANY); t->task_pool = spdk_mempool_create(task_pool_name, g_user_config.queue_depth, - sizeof(struct ioat_task), -1, SPDK_ENV_SOCKET_ID_ANY); + sizeof(struct ioat_task), + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, + 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 c3bab3948..4a7c8da63 100644 --- a/include/spdk/env.h +++ b/include/spdk/env.h @@ -137,11 +137,14 @@ void spdk_memzone_dump(FILE *f); struct spdk_mempool; +#define SPDK_MEMPOOL_DEFAULT_CACHE_SIZE SIZE_MAX + /** - * 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. + * Create a thread-safe memory pool. * + * \param cache_size How many elements may be cached in per-core caches. Use + * SPDK_MEMPOOL_DEFAULT_CACHE_SIZE for a reasonable default, or 0 for no + * per-core cache. * \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, diff --git a/lib/blobfs/blobfs.c b/lib/blobfs/blobfs.c index c22b08617..b12d58a3d 100644 --- a/lib/blobfs/blobfs.c +++ b/lib/blobfs/blobfs.c @@ -197,7 +197,9 @@ __initialize_cache(void) g_cache_pool = spdk_mempool_create("spdk_fs_cache", g_fs_cache_size / CACHE_BUFFER_SIZE, - CACHE_BUFFER_SIZE, -1, SPDK_ENV_SOCKET_ID_ANY); + CACHE_BUFFER_SIZE, + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, + SPDK_ENV_SOCKET_ID_ANY); TAILQ_INIT(&g_caches); pthread_spin_init(&g_caches_lock, 0); } diff --git a/lib/event/reactor.c b/lib/event/reactor.c index 57c9904d5..07d80ce62 100644 --- a/lib/event/reactor.c +++ b/lib/event/reactor.c @@ -559,7 +559,8 @@ spdk_reactors_init(unsigned int max_delay_us) snprintf(mempool_name, sizeof(mempool_name), "evtpool%d_%d", i, getpid()); g_spdk_event_mempool[i] = spdk_mempool_create(mempool_name, (262144 / socket_count), - sizeof(struct spdk_event), -1, i); + sizeof(struct spdk_event), + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, i); if (g_spdk_event_mempool[i] == NULL) { SPDK_ERRLOG("spdk_event_mempool creation failed on socket %d\n", i); @@ -573,7 +574,8 @@ spdk_reactors_init(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), + SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, SPDK_ENV_SOCKET_ID_ANY); if (g_spdk_event_mempool[i] == NULL) {