eal: allow user to override default mempool driver
authorSantosh Shukla <santosh.shukla@caviumnetworks.com>
Fri, 6 Oct 2017 07:45:29 +0000 (13:15 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 6 Oct 2017 18:48:22 +0000 (20:48 +0200)
DPDK has support for both sw and hw mempool and
currently user is limited to use ring_mp_mc pool.
In case user want to use other pool handle,
need to update config RTE_MEMPOOL_OPS_DEFAULT, then
build and run with desired pool handle.

Introducing eal option to override default pool handle.

Now user can override the RTE_MEMPOOL_OPS_DEFAULT by passing
pool handle to eal `--mbuf-pool-ops-name=""`.

Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
12 files changed:
doc/guides/freebsd_gsg/build_sample_apps.rst
doc/guides/linux_gsg/build_sample_apps.rst
doc/guides/testpmd_app_ug/run_app.rst
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/bsdapp/eal/rte_eal_version.map
lib/librte_eal/common/eal_common_options.c
lib/librte_eal/common/eal_internal_cfg.h
lib/librte_eal/common/eal_options.h
lib/librte_eal/common/include/rte_eal.h
lib/librte_eal/linuxapp/eal/eal.c
lib/librte_eal/linuxapp/eal/rte_eal_version.map
lib/librte_mbuf/rte_mbuf.c

index 9faa0e6..d84f15b 100644 (file)
@@ -163,6 +163,9 @@ Other options, specific to Linux and are not supported under FreeBSD are as foll
 *   ``--huge-dir``:
     The directory where hugetlbfs is mounted.
 
+*   ``mbuf-pool-ops-name``:
+    Pool ops name for mbuf to use.
+
 *   ``--file-prefix``:
     The prefix text used for hugepage filenames.
 
index 0cc5fd1..ec0a9ec 100644 (file)
@@ -157,6 +157,9 @@ The EAL options are as follows:
 * ``--huge-dir``:
   The directory where hugetlbfs is mounted.
 
+* ``mbuf-pool-ops-name``:
+  Pool ops name for mbuf to use.
+
 * ``--file-prefix``:
   The prefix text used for hugepage filenames.
 
index e8303f3..10fec60 100644 (file)
@@ -110,6 +110,10 @@ See the DPDK Getting Started Guides for more information on these options.
 
     Specify the directory where the hugetlbfs is mounted.
 
+*   ``mbuf-pool-ops-name``:
+
+    Pool ops name for mbuf to use.
+
 *   ``--proc-type``
 
     Set the type of the current process.
index f003f4c..30d3bd5 100644 (file)
@@ -112,6 +112,13 @@ struct internal_config internal_config;
 /* used by rte_rdtsc() */
 int rte_cycles_vmware_tsc_map;
 
+/* Return mbuf pool ops name */
+const char *
+rte_eal_mbuf_default_mempool_ops(void)
+{
+       return internal_config.mbuf_pool_ops_name;
+}
+
 /* Return a pointer to the configuration structure */
 struct rte_config *
 rte_eal_get_configuration(void)
@@ -391,6 +398,9 @@ eal_parse_args(int argc, char **argv)
                        continue;
 
                switch (opt) {
+               case OPT_MBUF_POOL_OPS_NAME_NUM:
+                       internal_config.mbuf_pool_ops_name = optarg;
+                       break;
                case 'h':
                        eal_usage(prgname);
                        exit(EXIT_SUCCESS);
index d54583c..8572e13 100644 (file)
@@ -244,6 +244,7 @@ DPDK_17.11 {
 
        rte_bus_get_iommu_class;
        rte_eal_iova_mode;
+       rte_eal_mbuf_default_mempool_ops;
        rte_pci_get_iommu_class;
        rte_pci_match;
 
index 1da185e..f406592 100644 (file)
@@ -85,6 +85,7 @@ eal_long_options[] = {
        {OPT_LCORES,            1, NULL, OPT_LCORES_NUM           },
        {OPT_LOG_LEVEL,         1, NULL, OPT_LOG_LEVEL_NUM        },
        {OPT_MASTER_LCORE,      1, NULL, OPT_MASTER_LCORE_NUM     },
+       {OPT_MBUF_POOL_OPS_NAME, 1, NULL, OPT_MBUF_POOL_OPS_NAME_NUM},
        {OPT_NO_HPET,           0, NULL, OPT_NO_HPET_NUM          },
        {OPT_NO_HUGE,           0, NULL, OPT_NO_HUGE_NUM          },
        {OPT_NO_PCI,            0, NULL, OPT_NO_PCI_NUM           },
@@ -220,6 +221,7 @@ eal_reset_internal_config(struct internal_config *internal_cfg)
 #endif
        internal_cfg->vmware_tsc_map = 0;
        internal_cfg->create_uio_dev = 0;
+       internal_cfg->mbuf_pool_ops_name = RTE_MBUF_DEFAULT_MEMPOOL_OPS;
 }
 
 static int
@@ -1279,6 +1281,7 @@ eal_common_usage(void)
               "                      '@' can be omitted if cpus and lcores have the same value\n"
               "  -s SERVICE COREMASK Hexadecimal bitmask of cores to be used as service cores\n"
               "  --"OPT_MASTER_LCORE" ID   Core ID that is used as master\n"
+              "  --"OPT_MBUF_POOL_OPS_NAME" Pool ops name for mbuf to use\n"
               "  -n CHANNELS         Number of memory channels\n"
               "  -m MB               Memory to allocate (see also --"OPT_SOCKET_MEM")\n"
               "  -r RANKS            Force number of memory ranks (don't detect)\n"
index 7b7e8c8..658783d 100644 (file)
@@ -82,7 +82,7 @@ struct internal_config {
        volatile enum rte_intr_mode vfio_intr_mode;
        const char *hugefile_prefix;      /**< the base filename of hugetlbfs files */
        const char *hugepage_dir;         /**< specific hugetlbfs directory to use */
-
+       const char *mbuf_pool_ops_name;   /**< mbuf pool ops name */
        unsigned num_hugepage_sizes;      /**< how many sizes on this system */
        struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];
 };
index 439a261..79410bd 100644 (file)
@@ -61,6 +61,8 @@ enum {
        OPT_LOG_LEVEL_NUM,
 #define OPT_MASTER_LCORE      "master-lcore"
        OPT_MASTER_LCORE_NUM,
+#define OPT_MBUF_POOL_OPS_NAME "mbuf-pool-ops-name"
+       OPT_MBUF_POOL_OPS_NAME_NUM,
 #define OPT_PROC_TYPE         "proc-type"
        OPT_PROC_TYPE_NUM,
 #define OPT_NO_HPET           "no-hpet"
index 436094d..4ea2ff4 100644 (file)
@@ -299,6 +299,15 @@ static inline int rte_gettid(void)
  */
 enum rte_iova_mode rte_eal_iova_mode(void);
 
+/**
+ * Get default pool ops name for mbuf
+ *
+ * @return
+ *   returns default pool ops name.
+ */
+const char *
+rte_eal_mbuf_default_mempool_ops(void);
+
 /**
  * Run function before main() with low priority.
  *
index f4901ff..28bc46b 100644 (file)
@@ -121,6 +121,13 @@ struct internal_config internal_config;
 /* used by rte_rdtsc() */
 int rte_cycles_vmware_tsc_map;
 
+/* Return mbuf pool ops name */
+const char *
+rte_eal_mbuf_default_mempool_ops(void)
+{
+       return internal_config.mbuf_pool_ops_name;
+}
+
 /* Return a pointer to the configuration structure */
 struct rte_config *
 rte_eal_get_configuration(void)
@@ -616,6 +623,10 @@ eal_parse_args(int argc, char **argv)
                        internal_config.create_uio_dev = 1;
                        break;
 
+               case OPT_MBUF_POOL_OPS_NAME_NUM:
+                       internal_config.mbuf_pool_ops_name = optarg;
+                       break;
+
                default:
                        if (opt < OPT_LONG_MIN_NUM && isprint(opt)) {
                                RTE_LOG(ERR, EAL, "Option %c is not supported "
index b537e8b..5709e16 100644 (file)
@@ -249,6 +249,7 @@ DPDK_17.11 {
 
        rte_bus_get_iommu_class;
        rte_eal_iova_mode;
+       rte_eal_mbuf_default_mempool_ops;
        rte_pci_get_iommu_class;
        rte_pci_match;
 
index bcf4e2f..0e18709 100644 (file)
@@ -157,6 +157,7 @@ rte_pktmbuf_pool_create(const char *name, unsigned n,
 {
        struct rte_mempool *mp;
        struct rte_pktmbuf_pool_private mbp_priv;
+       const char *mp_ops_name;
        unsigned elt_size;
        int ret;
 
@@ -176,8 +177,8 @@ rte_pktmbuf_pool_create(const char *name, unsigned n,
        if (mp == NULL)
                return NULL;
 
-       ret = rte_mempool_set_ops_byname(mp,
-               RTE_MBUF_DEFAULT_MEMPOOL_OPS, NULL);
+       mp_ops_name = rte_eal_mbuf_default_mempool_ops();
+       ret = rte_mempool_set_ops_byname(mp, mp_ops_name, NULL);
        if (ret != 0) {
                RTE_LOG(ERR, MBUF, "error setting mempool handler\n");
                rte_mempool_free(mp);