bdev: Increase the size of small and large buffers to store DIF
Increase the size of small and large buffers in the bdev layer to store DIF. Increase is the amount necessary to store 16 byte metadata to the block formatted with 512 + 16. 512 + 16 is the current maximum ratio of metadata per block. This change will be done in the iSCSI library in the next patch and other libraries may be done later. Hence add and use an new macro SPDK_BDEV_BUF_SIZE_WITH_MD(x) for convenience. Change-Id: I4b5498f56c9baf3e3ed93dd1c757998d7ce65141 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/444558 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
ca1b5c418d
commit
a18c0acd8c
@ -54,6 +54,12 @@ extern "C" {
|
|||||||
#define SPDK_BDEV_SMALL_BUF_MAX_SIZE 8192
|
#define SPDK_BDEV_SMALL_BUF_MAX_SIZE 8192
|
||||||
#define SPDK_BDEV_LARGE_BUF_MAX_SIZE (64 * 1024)
|
#define SPDK_BDEV_LARGE_BUF_MAX_SIZE (64 * 1024)
|
||||||
|
|
||||||
|
/* Increase the buffer size to store interleaved metadata. Increment is the
|
||||||
|
* amount necessary to store metadata per data block. 16 byte metadata per
|
||||||
|
* 512 byte data block is the current maximum ratio of metadata per block.
|
||||||
|
*/
|
||||||
|
#define SPDK_BDEV_BUF_SIZE_WITH_MD(x) (((x) / 512) * (512 + 16))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Block device remove callback.
|
* Block device remove callback.
|
||||||
*
|
*
|
||||||
|
@ -523,7 +523,8 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io)
|
|||||||
|
|
||||||
bdev_io->internal.buf = NULL;
|
bdev_io->internal.buf = NULL;
|
||||||
|
|
||||||
if (buf_len + alignment <= SPDK_BDEV_SMALL_BUF_MAX_SIZE + SPDK_BDEV_POOL_ALIGNMENT) {
|
if (buf_len + alignment <= SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_BDEV_SMALL_BUF_MAX_SIZE) +
|
||||||
|
SPDK_BDEV_POOL_ALIGNMENT) {
|
||||||
pool = g_bdev_mgr.buf_small_pool;
|
pool = g_bdev_mgr.buf_small_pool;
|
||||||
stailq = &ch->need_buf_small;
|
stailq = &ch->need_buf_small;
|
||||||
} else {
|
} else {
|
||||||
@ -595,7 +596,8 @@ spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, u
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len + alignment > SPDK_BDEV_LARGE_BUF_MAX_SIZE + SPDK_BDEV_POOL_ALIGNMENT) {
|
if (len + alignment > SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_BDEV_LARGE_BUF_MAX_SIZE) +
|
||||||
|
SPDK_BDEV_POOL_ALIGNMENT) {
|
||||||
SPDK_ERRLOG("Length + alignment %" PRIu64 " is larger than allowed\n",
|
SPDK_ERRLOG("Length + alignment %" PRIu64 " is larger than allowed\n",
|
||||||
len + alignment);
|
len + alignment);
|
||||||
cb(bdev_io->internal.ch->channel, bdev_io, false);
|
cb(bdev_io->internal.ch->channel, bdev_io, false);
|
||||||
@ -607,7 +609,8 @@ spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, u
|
|||||||
bdev_io->internal.buf_len = len;
|
bdev_io->internal.buf_len = len;
|
||||||
bdev_io->internal.get_buf_cb = cb;
|
bdev_io->internal.get_buf_cb = cb;
|
||||||
|
|
||||||
if (len + alignment <= SPDK_BDEV_SMALL_BUF_MAX_SIZE + SPDK_BDEV_POOL_ALIGNMENT) {
|
if (len + alignment <= SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_BDEV_SMALL_BUF_MAX_SIZE) +
|
||||||
|
SPDK_BDEV_POOL_ALIGNMENT) {
|
||||||
pool = g_bdev_mgr.buf_small_pool;
|
pool = g_bdev_mgr.buf_small_pool;
|
||||||
stailq = &mgmt_ch->need_buf_small;
|
stailq = &mgmt_ch->need_buf_small;
|
||||||
} else {
|
} else {
|
||||||
@ -942,7 +945,8 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
|
|||||||
|
|
||||||
g_bdev_mgr.buf_small_pool = spdk_mempool_create(mempool_name,
|
g_bdev_mgr.buf_small_pool = spdk_mempool_create(mempool_name,
|
||||||
BUF_SMALL_POOL_SIZE,
|
BUF_SMALL_POOL_SIZE,
|
||||||
SPDK_BDEV_SMALL_BUF_MAX_SIZE + SPDK_BDEV_POOL_ALIGNMENT,
|
SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_BDEV_SMALL_BUF_MAX_SIZE) +
|
||||||
|
SPDK_BDEV_POOL_ALIGNMENT,
|
||||||
cache_size,
|
cache_size,
|
||||||
SPDK_ENV_SOCKET_ID_ANY);
|
SPDK_ENV_SOCKET_ID_ANY);
|
||||||
if (!g_bdev_mgr.buf_small_pool) {
|
if (!g_bdev_mgr.buf_small_pool) {
|
||||||
@ -956,7 +960,8 @@ spdk_bdev_initialize(spdk_bdev_init_cb cb_fn, void *cb_arg)
|
|||||||
|
|
||||||
g_bdev_mgr.buf_large_pool = spdk_mempool_create(mempool_name,
|
g_bdev_mgr.buf_large_pool = spdk_mempool_create(mempool_name,
|
||||||
BUF_LARGE_POOL_SIZE,
|
BUF_LARGE_POOL_SIZE,
|
||||||
SPDK_BDEV_LARGE_BUF_MAX_SIZE + SPDK_BDEV_POOL_ALIGNMENT,
|
SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_BDEV_LARGE_BUF_MAX_SIZE) +
|
||||||
|
SPDK_BDEV_POOL_ALIGNMENT,
|
||||||
cache_size,
|
cache_size,
|
||||||
SPDK_ENV_SOCKET_ID_ANY);
|
SPDK_ENV_SOCKET_ID_ANY);
|
||||||
if (!g_bdev_mgr.buf_large_pool) {
|
if (!g_bdev_mgr.buf_large_pool) {
|
||||||
|
Loading…
Reference in New Issue
Block a user