eal: allow user to override default mempool driver

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>
This commit is contained in:
Santosh Shukla 2017-10-06 13:15:29 +05:30 committed by Thomas Monjalon
parent 72d013644b
commit a103a97e71
12 changed files with 51 additions and 3 deletions

View 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.

View 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.

View 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.

View 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);

View 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;

View 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"

View 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];
};

View 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"

View 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.
*

View 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 "

View 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;

View 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);