Commit 6951b979 authored by Cunyin Chang's avatar Cunyin Chang Committed by Ben Walker
Browse files

blobfs: make the cluster size of blobfs configurable.



Change-Id: I26738d71316b8509cf8e98fee549a0745bb09bfa
Signed-off-by: default avatarCunyin Chang <cunyin.chang@intel.com>
Reviewed-on: https://review.gerrithub.io/393715


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent b9252b12
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -53,6 +53,10 @@ struct spdk_filesystem;

typedef struct spdk_file *spdk_fs_iter;

struct spdk_blobfs_opts {
	uint32_t	cluster_sz;
};

struct spdk_file_stat {
	spdk_blob_id	blobid;
	uint64_t	size;
@@ -69,7 +73,10 @@ typedef void (*spdk_file_stat_op_complete)(void *ctx, struct spdk_file_stat *sta
typedef void (*fs_request_fn)(void *);
typedef void (*fs_send_request_fn)(fs_request_fn, void *);

void spdk_fs_init(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn,
/* Initialize an spdk_blobfs_opts structure to the default blobfs option values. */
void spdk_fs_opts_init(struct spdk_blobfs_opts *opts);
void spdk_fs_init(struct spdk_bs_dev *dev, struct spdk_blobfs_opts *opt,
		  fs_send_request_fn send_request_fn,
		  spdk_fs_op_with_handle_complete cb_fn, void *cb_arg);
void spdk_fs_load(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn,
		  spdk_fs_op_with_handle_complete cb_fn, void *cb_arg);
+12 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@
	SPDK_DEBUGLOG(SPDK_LOG_BLOBFS_RW, "file=%s " str, file->name, ##args)

#define BLOBFS_CACHE_SIZE (4ULL * 1024 * 1024 * 1024)
#define SPDK_BLOBFS_OPTS_CLUSTER_SZ (1024 * 1024)

static uint64_t g_fs_cache_size = BLOBFS_CACHE_SIZE;
static struct spdk_mempool *g_cache_pool;
@@ -200,6 +201,12 @@ struct spdk_fs_cb_args {

static void cache_free_buffers(struct spdk_file *file);

void
spdk_fs_opts_init(struct spdk_blobfs_opts *opts)
{
	opts->cluster_sz = SPDK_BLOBFS_OPTS_CLUSTER_SZ;
}

static void
__initialize_cache(void)
{
@@ -453,7 +460,8 @@ fs_alloc(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn)
}

void
spdk_fs_init(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn,
spdk_fs_init(struct spdk_bs_dev *dev, struct spdk_blobfs_opts *opt,
	     fs_send_request_fn send_request_fn,
	     spdk_fs_op_with_handle_complete cb_fn, void *cb_arg)
{
	struct spdk_filesystem *fs;
@@ -488,7 +496,9 @@ spdk_fs_init(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn,

	spdk_bs_opts_init(&opts);
	strncpy(opts.bstype.bstype, "BLOBFS", SPDK_BLOBSTORE_TYPE_LENGTH);

	if (opt) {
		opts.cluster_sz = opt->cluster_sz;
	}
	spdk_bs_init(dev, &opts, init_cb, req);
}

+7 −7
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ fs_init(void)
	dev = init_dev();
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	CU_ASSERT(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -133,7 +133,7 @@ fs_open(void)
	memset(name, 'a', sizeof(name) - 1);
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	CU_ASSERT(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -192,7 +192,7 @@ fs_create(void)
	memset(name, 'a', sizeof(name) - 1);
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -231,7 +231,7 @@ fs_truncate(void)
	dev = init_dev();
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -284,7 +284,7 @@ fs_rename(void)
	dev = init_dev();
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -437,7 +437,7 @@ channel_ops(void)
	dev = init_dev();
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
@@ -465,7 +465,7 @@ channel_ops_sync(void)
	dev = init_dev();
	spdk_allocate_thread(_fs_send_msg, NULL, NULL, NULL, "thread0");

	spdk_fs_init(dev, NULL, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, NULL, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
	fs = g_fs;
+1 −1
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ _fs_init(void *arg)
	g_fs = NULL;
	g_fserrno = -1;
	dev = init_dev();
	spdk_fs_init(dev, send_request, fs_op_with_handle_complete, NULL);
	spdk_fs_init(dev, NULL, send_request, fs_op_with_handle_complete, NULL);
	SPDK_CU_ASSERT_FATAL(g_fs != NULL);
	CU_ASSERT(g_fserrno == 0);
}
+36 −2
Original line number Diff line number Diff line
@@ -38,9 +38,11 @@
#include "spdk/event.h"
#include "spdk/blob_bdev.h"
#include "spdk/log.h"
#include "spdk/string.h"

struct spdk_bs_dev *g_bs_dev;
const char *g_bdev_name;
static uint64_t g_cluster_size;

static void
stop_cb(void *ctx, int fserrno)
@@ -70,6 +72,7 @@ static void
spdk_mkfs_run(void *arg1, void *arg2)
{
	struct spdk_bdev *bdev;
	struct spdk_blobfs_opts blobfs_opt;

	bdev = spdk_bdev_get_by_name(g_bdev_name);

@@ -81,8 +84,38 @@ spdk_mkfs_run(void *arg1, void *arg2)

	printf("Initializing filesystem on bdev %s...", g_bdev_name);
	fflush(stdout);

	spdk_fs_opts_init(&blobfs_opt);
	if (g_cluster_size) {
		blobfs_opt.cluster_sz = g_cluster_size;
	}
	g_bs_dev = spdk_bdev_create_bs_dev(bdev, NULL, NULL);
	spdk_fs_init(g_bs_dev, NULL, init_cb, NULL);
	if (blobfs_opt.cluster_sz) {
		spdk_fs_init(g_bs_dev, &blobfs_opt, NULL, init_cb, NULL);
	} else {
		spdk_fs_init(g_bs_dev, NULL, NULL, init_cb, NULL);
	}
}

static void
mkfs_usage(void)
{
	printf(" -C cluster size\n");
}

static void
mkfs_parse_arg(int ch, char *arg)
{
	bool has_prefix;

	switch (ch) {
	case 'C':
		spdk_parse_capacity(arg, &g_cluster_size, &has_prefix);
		break;
	default:
		break;
	}

}

int main(int argc, char **argv)
@@ -102,8 +135,9 @@ int main(int argc, char **argv)
	opts.shutdown_cb = NULL;

	spdk_fs_set_cache_size(512);

	g_bdev_name = argv[2];
	spdk_app_parse_args(argc, argv, &opts, "C:", mkfs_parse_arg, mkfs_usage);

	spdk_app_start(&opts, spdk_mkfs_run, NULL, NULL);
	spdk_app_fini();