]> git.droids-corp.org - dpdk.git/commitdiff
eal: add --in-memory option
authorAnatoly Burakov <anatoly.burakov@intel.com>
Fri, 13 Jul 2018 12:48:03 +0000 (13:48 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 13 Jul 2018 13:35:26 +0000 (15:35 +0200)
This command-line option will cause DPDK to operate entirely in
memory and not create any shared files at runtime, including any
shared configuration or hugetlbfs files. This is useful for debug
purposes, as well as for certain use cases like containers or
automatic memory cleanup.

Currently, this option acts as a strict superset of --no-shconf and
--huge-unlink commands.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/common/eal_common_options.c
lib/librte_eal/common/eal_internal_cfg.h
lib/librte_eal/common/eal_options.h

index df5d536486262e11e4d159d85ed19725e7d10459..80f11d0221a70f26e6b7c32ac857f0524551ee33 100644 (file)
@@ -66,6 +66,7 @@ eal_long_options[] = {
        {OPT_NO_HUGE,           0, NULL, OPT_NO_HUGE_NUM          },
        {OPT_NO_PCI,            0, NULL, OPT_NO_PCI_NUM           },
        {OPT_NO_SHCONF,         0, NULL, OPT_NO_SHCONF_NUM        },
+       {OPT_IN_MEMORY,         0, NULL, OPT_IN_MEMORY_NUM        },
        {OPT_PCI_BLACKLIST,     1, NULL, OPT_PCI_BLACKLIST_NUM    },
        {OPT_PCI_WHITELIST,     1, NULL, OPT_PCI_WHITELIST_NUM    },
        {OPT_PROC_TYPE,         1, NULL, OPT_PROC_TYPE_NUM        },
@@ -1170,6 +1171,13 @@ eal_parse_common_option(int opt, const char *optarg,
                conf->no_shconf = 1;
                break;
 
+       case OPT_IN_MEMORY_NUM:
+               conf->in_memory = 1;
+               /* in-memory is a superset of noshconf and huge-unlink */
+               conf->no_shconf = 1;
+               conf->hugepage_unlink = 1;
+               break;
+
        case OPT_PROC_TYPE_NUM:
                conf->process_type = eal_parse_proc_type(optarg);
                break;
@@ -1321,8 +1329,8 @@ eal_check_common_options(struct internal_config *internal_cfg)
                        "be specified together with --"OPT_NO_HUGE"\n");
                return -1;
        }
-
-       if (internal_cfg->no_hugetlbfs && internal_cfg->hugepage_unlink) {
+       if (internal_cfg->no_hugetlbfs && internal_cfg->hugepage_unlink &&
+                       !internal_cfg->in_memory) {
                RTE_LOG(ERR, EAL, "Option --"OPT_HUGE_UNLINK" cannot "
                        "be specified together with --"OPT_NO_HUGE"\n");
                return -1;
@@ -1330,12 +1338,12 @@ eal_check_common_options(struct internal_config *internal_cfg)
        if (internal_config.force_socket_limits && internal_config.legacy_mem) {
                RTE_LOG(ERR, EAL, "Option --"OPT_SOCKET_LIMIT
                        " is only supported in non-legacy memory mode\n");
-               return -1;
        }
        if (internal_cfg->single_file_segments &&
                        internal_cfg->hugepage_unlink) {
                RTE_LOG(ERR, EAL, "Option --"OPT_SINGLE_FILE_SEGMENTS" is "
-                       "not compatible with --"OPT_HUGE_UNLINK"\n");
+                       "not compatible with neither --"OPT_IN_MEMORY" nor "
+                       "--"OPT_HUGE_UNLINK"\n");
                return -1;
        }
 
@@ -1386,6 +1394,8 @@ eal_common_usage(void)
               "                      Set specific log level\n"
               "  -v                  Display version information on startup\n"
               "  -h, --help          This help\n"
+              "  --"OPT_IN_MEMORY"   Operate entirely in memory. This will\n"
+              "                      disable secondary process support\n"
               "\nEAL options for DEBUG use only:\n"
               "  --"OPT_HUGE_UNLINK"       Unlink hugepage files after init\n"
               "  --"OPT_NO_HUGE"           Use malloc instead of hugetlbfs\n"
index d66cd03134be3777c891fae8a992d7c0ec9b906d..00ee6e06e2d8ea1a531df3ac0aead6997ddd23e0 100644 (file)
@@ -41,6 +41,10 @@ struct internal_config {
        volatile unsigned vmware_tsc_map; /**< true to use VMware TSC mapping
                                                                                * instead of native TSC */
        volatile unsigned no_shconf;      /**< true if there is no shared config */
+       volatile unsigned in_memory;
+       /**< true if DPDK should operate entirely in-memory and not create any
+        * shared files or runtime data.
+        */
        volatile unsigned create_uio_dev; /**< true to create /dev/uioX devices */
        volatile enum rte_proc_type_t process_type; /**< multi-process proc type */
        /** true to try allocating memory on specific sockets */
index 6d92f64a8ff66873fb419d0caaead866eb9d4069..96e166787585538ca9657a35fa4731c7c8f57c4a 100644 (file)
@@ -45,6 +45,8 @@ enum {
        OPT_NO_PCI_NUM,
 #define OPT_NO_SHCONF         "no-shconf"
        OPT_NO_SHCONF_NUM,
+#define OPT_IN_MEMORY         "in-memory"
+       OPT_IN_MEMORY_NUM,
 #define OPT_SOCKET_MEM        "socket-mem"
        OPT_SOCKET_MEM_NUM,
 #define OPT_SOCKET_LIMIT        "socket-limit"