Commit 3e75e90a authored by Darek Stojaczyk's avatar Darek Stojaczyk Committed by Jim Harris
Browse files

env: add --huge-dir option



Allow specifying a custom hugetlbfs directory.
This can be useful e.g. when trying to use hugepages
with fixed size, different size limit, or different
access permissions.

Change-Id: I418cbab99ed183383300b3c3d9945095a03478db
Signed-off-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/432105


Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 5240cbbb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ Param | Long Param | Type | Default | Descript
-B       | --pci-blacklist        | B:D:F    |                        | @ref cmd_arg_pci_blacklist_whitelist.
-W       | --pci-whitelist        | B:D:F    |                        | @ref cmd_arg_pci_blacklist_whitelist.
-R       | --huge-unlink          | flag     |                        | @ref cmd_arg_huge_unlink
|        | --huge-dir             | string   | the first discovered   | allocate hugepages from a specific mount
-L       | --traceflag            | string   |                        | @ref cmd_arg_debug_log_flags


+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ struct spdk_env_opts {
	bool			hugepage_single_segments;
	bool			unlink_hugepage;
	size_t			num_pci_addr;
	const char		*hugedir;
	struct spdk_pci_addr	*pci_blacklist;
	struct spdk_pci_addr	*pci_whitelist;

+1 −0
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ struct spdk_app_opts {
	bool			no_pci;
	bool			hugepage_single_segments;
	bool			unlink_hugepage;
	const char		*hugedir;
	enum spdk_log_level	print_level;
	size_t			num_pci_addr;
	struct spdk_pci_addr	*pci_blacklist;
+8 −0
Original line number Diff line number Diff line
@@ -267,6 +267,14 @@ spdk_build_eal_cmdline(const struct spdk_env_opts *opts)
		}
	}

	/* use a specific hugetlbfs mount */
	if (opts->hugedir) {
		args = spdk_push_arg(args, &argcount, _sprintf_alloc("--huge-dir=%s", opts->hugedir));
		if (args == NULL) {
			return -1;
		}
	}

#if RTE_VERSION >= RTE_VERSION_NUM(18, 05, 0, 0) && RTE_VERSION < RTE_VERSION_NUM(18, 5, 1, 0)
	/* Dynamic memory management is buggy in DPDK 18.05.0. Don't use it. */
	args = spdk_push_arg(args, &argcount, _sprintf_alloc("--legacy-mem"));
+7 −0
Original line number Diff line number Diff line
@@ -113,6 +113,8 @@ static const struct option g_cmdline_options[] = {
	{"silence-noticelog",		no_argument,		NULL, SILENCE_NOTICELOG_OPT_IDX},
#define WAIT_FOR_RPC_OPT_IDX	258
	{"wait-for-rpc",		no_argument,		NULL, WAIT_FOR_RPC_OPT_IDX},
#define HUGE_DIR_OPT_IDX	259
	{"huge-dir",			no_argument,		NULL, HUGE_DIR_OPT_IDX},
};

/* Global section */
@@ -486,6 +488,7 @@ spdk_app_setup_env(struct spdk_app_opts *opts)
	env_opts.mem_size = opts->mem_size;
	env_opts.hugepage_single_segments = opts->hugepage_single_segments;
	env_opts.unlink_hugepage = opts->unlink_hugepage;
	env_opts.hugedir = opts->hugedir;
	env_opts.no_pci = opts->no_pci;
	env_opts.num_pci_addr = opts->num_pci_addr;
	env_opts.pci_blacklist = opts->pci_blacklist;
@@ -731,6 +734,7 @@ usage(void (*app_usage)(void))
	printf(" -R, --huge-unlink         unlink huge files after initialization\n");
	printf(" -W, --pci-whitelist <bdf>\n");
	printf("                           pci addr to whitelist (-B and -W cannot be used at the same time)\n");
	printf("      --huge-dir <path>    use a specific hugetlbfs mount to reserve memory from\n");
	spdk_tracelog_usage(stdout, "-L");
	if (app_usage) {
		app_usage();
@@ -922,6 +926,9 @@ spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *opts,
				goto out;
			}
			break;
		case HUGE_DIR_OPT_IDX:
			opts->hugedir = optarg;
			break;
		case '?':
			/*
			 * In the event getopt() above detects an option