Acked-By: Nithin Dabilpuram <ndabilpu...@marvell.com>
On Thu, Oct 19, 2023 at 11:00 PM <sk...@marvell.com> wrote: > > From: Rakesh Kudurumalla <rkuduruma...@marvell.com> > > Adds mempool module which will be creating mempools. > > Following commands are exposed: > - mempool <mempool_name> size <mbuf_size> buffers <number_of_buffers> \ > cache <cache_size> numa <numa_id> > - help mempool > > User will add this command in .cli file according to its need. > > Signed-off-by: Sunil Kumar Kori <sk...@marvell.com> > Signed-off-by: Rakesh Kudurumalla <rkuduruma...@marvell.com> > Acked-by: Jerin Jacob <jer...@marvell.com> > --- > app/graph/cli.c | 2 + > app/graph/mempool.c | 140 +++++++++++++++++++++++++++++++++++++ > app/graph/mempool.h | 24 +++++++ > app/graph/mempool_priv.h | 34 +++++++++ > app/graph/meson.build | 1 + > app/graph/module_api.h | 2 + > doc/guides/tools/graph.rst | 7 ++ > 7 files changed, 210 insertions(+) > create mode 100644 app/graph/mempool.c > create mode 100644 app/graph/mempool.h > create mode 100644 app/graph/mempool_priv.h > > diff --git a/app/graph/cli.c b/app/graph/cli.c > index df4f8fcbb8..cf544d5f8f 100644 > --- a/app/graph/cli.c > +++ b/app/graph/cli.c > @@ -20,6 +20,8 @@ > #define MAX_LINE_SIZE 2048 > > cmdline_parse_ctx_t modules_ctx[] = { > + (cmdline_parse_inst_t *)&mempool_config_cmd_ctx, > + (cmdline_parse_inst_t *)&mempool_help_cmd_ctx, > NULL, > }; > > diff --git a/app/graph/mempool.c b/app/graph/mempool.c > new file mode 100644 > index 0000000000..9fd3f8460b > --- /dev/null > +++ b/app/graph/mempool.c > @@ -0,0 +1,140 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2023 Marvell. > + */ > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > + > +#include <cmdline_parse.h> > +#include <cmdline_parse_num.h> > +#include <cmdline_parse_string.h> > +#include <cmdline_socket.h> > +#include <rte_common.h> > +#include <rte_mbuf.h> > + > +#include "mempool_priv.h" > +#include "module_api.h" > + > +static const char > +cmd_mempool_help[] = "mempool <mempool_name> size <mbuf_size> buffers > <number_of_buffers> " > + "cache <cache_size> numa <numa_id>"; > + > +struct mempools mpconfig; > + > +int > +mempool_process(struct mempool_config *config) > +{ > + struct rte_mempool *mp; > + uint8_t nb_pools; > + > + nb_pools = mpconfig.nb_pools; > + rte_strscpy(mpconfig.config[nb_pools].name, config->name, > RTE_MEMPOOL_NAMESIZE); > + mpconfig.config[nb_pools].pool_size = config->pool_size; > + mpconfig.config[nb_pools].buffer_size = config->buffer_size; > + mpconfig.config[nb_pools].cache_size = config->cache_size; > + mpconfig.config[nb_pools].numa_node = config->numa_node; > + > + mp = rte_pktmbuf_pool_create(config->name, config->pool_size, > config->cache_size, > + 128, config->buffer_size, config->numa_node); > + if (!mp) > + return -EINVAL; > + > + mpconfig.mp[nb_pools] = mp; > + nb_pools++; > + mpconfig.nb_pools = nb_pools; > + > + return 0; > +} > + > +static void > +cli_mempool_help(__rte_unused void *parsed_result, __rte_unused struct > cmdline *cl, > + __rte_unused void *data) > +{ > + size_t len; > + > + len = strlen(conn->msg_out); > + conn->msg_out += len; > + snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n", > + "----------------------------- mempool command help > -----------------------------", > + cmd_mempool_help); > + > + len = strlen(conn->msg_out); > + conn->msg_out_len_max -= len; > +} > + > +static void > +cli_mempool(void *parsed_result, __rte_unused struct cmdline *cl, > __rte_unused void *data) > +{ > + struct mempool_config_cmd_tokens *res = parsed_result; > + struct mempool_config config; > + int rc = -EINVAL; > + > + > + rte_strscpy(config.name, res->name, RTE_MEMPOOL_NAMESIZE); > + config.name[strlen(res->name)] = '\0'; > + config.pool_size = res->nb_bufs; > + config.buffer_size = res->buf_sz; > + config.cache_size = res->cache_size; > + config.numa_node = res->node; > + > + rc = mempool_process(&config); > + if (rc < 0) > + printf(MSG_CMD_FAIL, "mempool"); > +} > + > +cmdline_parse_token_string_t mempool_config_add_mempool = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, mempool, > "mempool"); > +cmdline_parse_token_string_t mempool_config_add_name = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, name, > NULL); > +cmdline_parse_token_string_t mempool_config_add_size = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, size, > "size"); > +cmdline_parse_token_num_t mempool_config_add_buf_sz = > + TOKEN_NUM_INITIALIZER(struct mempool_config_cmd_tokens, buf_sz, > RTE_UINT16); > +cmdline_parse_token_string_t mempool_config_add_buffers = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, buffers, > "buffers"); > +cmdline_parse_token_num_t mempool_config_add_nb_bufs = > + TOKEN_NUM_INITIALIZER(struct mempool_config_cmd_tokens, nb_bufs, > RTE_UINT16); > +cmdline_parse_token_string_t mempool_config_add_cache = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, cache, > "cache"); > +cmdline_parse_token_num_t mempool_config_add_cache_size = > + TOKEN_NUM_INITIALIZER(struct mempool_config_cmd_tokens, cache_size, > RTE_UINT16); > +cmdline_parse_token_string_t mempool_config_add_numa = > + TOKEN_STRING_INITIALIZER(struct mempool_config_cmd_tokens, numa, > "numa"); > +cmdline_parse_token_num_t mempool_config_add_node = > + TOKEN_NUM_INITIALIZER(struct mempool_config_cmd_tokens, node, > RTE_UINT16); > + > +cmdline_parse_inst_t mempool_config_cmd_ctx = { > + .f = cli_mempool, > + .data = NULL, > + .help_str = cmd_mempool_help, > + .tokens = { > + (void *)&mempool_config_add_mempool, > + (void *)&mempool_config_add_name, > + (void *)&mempool_config_add_size, > + (void *)&mempool_config_add_buf_sz, > + (void *)&mempool_config_add_buffers, > + (void *)&mempool_config_add_nb_bufs, > + (void *)&mempool_config_add_cache, > + (void *)&mempool_config_add_cache_size, > + (void *)&mempool_config_add_numa, > + (void *)&mempool_config_add_node, > + NULL, > + }, > +}; > + > +cmdline_parse_token_string_t mempool_help_cmd = > + TOKEN_STRING_INITIALIZER(struct mempool_help_cmd_tokens, help, > "help"); > +cmdline_parse_token_string_t mempool_help_mempool = > + TOKEN_STRING_INITIALIZER(struct mempool_help_cmd_tokens, mempool, > "mempool"); > + > +cmdline_parse_inst_t mempool_help_cmd_ctx = { > + .f = cli_mempool_help, > + .data = NULL, > + .help_str = "", > + .tokens = { > + (void *)&mempool_help_cmd, > + (void *)&mempool_help_mempool, > + NULL, > + }, > +}; > diff --git a/app/graph/mempool.h b/app/graph/mempool.h > new file mode 100644 > index 0000000000..0808c4259e > --- /dev/null > +++ b/app/graph/mempool.h > @@ -0,0 +1,24 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2023 Marvell. > + */ > + > +#ifndef APP_GRAPH_MEMPOOL_H > +#define APP_GRAPH_MEMPOOL_H > + > +#include <cmdline_parse.h> > +#include <rte_mempool.h> > + > +struct mempool_config { > + char name[RTE_MEMPOOL_NAMESIZE]; > + int pool_size; > + int cache_size; > + int buffer_size; > + int numa_node; > +}; > + > +extern cmdline_parse_inst_t mempool_config_cmd_ctx; > +extern cmdline_parse_inst_t mempool_help_cmd_ctx; > + > +int mempool_process(struct mempool_config *config); > + > +#endif > diff --git a/app/graph/mempool_priv.h b/app/graph/mempool_priv.h > new file mode 100644 > index 0000000000..3ce64702a9 > --- /dev/null > +++ b/app/graph/mempool_priv.h > @@ -0,0 +1,34 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2023 Marvell. > + */ > + > +#ifndef APP_GRAPH_MEMPOOL_PRIV_H > +#define APP_GRAPH_MEMPOOL_PRIV_H > + > +#include "mempool.h" > + > +struct mempool_config_cmd_tokens { > + cmdline_fixed_string_t mempool; > + cmdline_fixed_string_t size; > + cmdline_fixed_string_t buffers; > + cmdline_fixed_string_t cache; > + cmdline_fixed_string_t numa; > + cmdline_fixed_string_t name; > + uint16_t buf_sz; > + uint16_t nb_bufs; > + uint16_t cache_size; > + uint16_t node; > +}; > + > +struct mempool_help_cmd_tokens { > + cmdline_fixed_string_t help; > + cmdline_fixed_string_t mempool; > +}; > + > +struct mempools { > + struct mempool_config config[RTE_MAX_ETHPORTS]; > + struct rte_mempool *mp[RTE_MAX_ETHPORTS]; > + uint8_t nb_pools; > +}; > + > +#endif > diff --git a/app/graph/meson.build b/app/graph/meson.build > index fd71036a95..5dc23c875b 100644 > --- a/app/graph/meson.build > +++ b/app/graph/meson.build > @@ -13,5 +13,6 @@ sources = files( > 'cli.c', > 'conn.c', > 'main.c', > + 'mempool.c', > 'utils.c', > ) > diff --git a/app/graph/module_api.h b/app/graph/module_api.h > index ad4fb50989..b45419811b 100644 > --- a/app/graph/module_api.h > +++ b/app/graph/module_api.h > @@ -10,11 +10,13 @@ > > #include "cli.h" > #include "conn.h" > +#include "mempool.h" > #include "utils.h" > /* > * Externs > */ > extern volatile bool force_quit; > +extern struct conn *conn; > > bool app_graph_exit(void); > #endif > diff --git a/doc/guides/tools/graph.rst b/doc/guides/tools/graph.rst > index 943f915049..6009b0c291 100644 > --- a/doc/guides/tools/graph.rst > +++ b/doc/guides/tools/graph.rst > @@ -71,6 +71,13 @@ file to express the requested use case configuration. > > +--------------------------------------+-----------------------------------+---------+----------+ > | Command | Description > | Dynamic | Optional | > > +======================================+===================================+=========+==========+ > + | | mempool <mempool_name> size | | Command to create mempool > which | No | No | > + | | <mbuf_size> buffers | | will be further associated to > | | | > + | | <number_of_buffers> | | RxQ to dequeue the packets. > | | | > + | | cache <cache_size> numa <numa_id> | > | | | > + > +--------------------------------------+-----------------------------------+---------+----------+ > + | help mempool | | Command to dump mempool help > | Yes | Yes | > + | | | message. > | | | > | | > | | | > > +--------------------------------------+-----------------------------------+---------+----------+ > > -- > 2.25.1 >