Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/81079/?format=api
http://patches.dpdk.org/api/patches/81079/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1602843764-32331-3-git-send-email-viacheslavo@nvidia.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1602843764-32331-3-git-send-email-viacheslavo@nvidia.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1602843764-32331-3-git-send-email-viacheslavo@nvidia.com", "date": "2020-10-16T10:22:40", "name": "[v9,2/6] app/testpmd: add multiple pools per core creation", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "5a3f020701168f30c37fc6ec79e180f2859dc492", "submitter": { "id": 1926, "url": "http://patches.dpdk.org/api/people/1926/?format=api", "name": "Slava Ovsiienko", "email": "viacheslavo@nvidia.com" }, "delegate": { "id": 319, "url": "http://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1602843764-32331-3-git-send-email-viacheslavo@nvidia.com/mbox/", "series": [ { "id": 13054, "url": "http://patches.dpdk.org/api/series/13054/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13054", "date": "2020-10-16T10:22:38", "name": "ethdev: introduce Rx buffer split", "version": 9, "mbox": "http://patches.dpdk.org/series/13054/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/81079/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/81079/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A2988A04DB;\n\tFri, 16 Oct 2020 12:23:29 +0200 (CEST)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 811C21ECC1;\n\tFri, 16 Oct 2020 12:23:08 +0200 (CEST)", "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id A72C71ECC1\n for <dev@dpdk.org>; Fri, 16 Oct 2020 12:23:07 +0200 (CEST)", "from Internal Mail-Server by MTLPINE1 (envelope-from\n viacheslavo@nvidia.com) with SMTP; 16 Oct 2020 13:23:02 +0300", "from nvidia.com (pegasus12.mtr.labs.mlnx [10.210.17.40])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 09GAMwRU031891;\n Fri, 16 Oct 2020 13:23:02 +0300" ], "From": "Viacheslav Ovsiienko <viacheslavo@nvidia.com>", "To": "dev@dpdk.org", "Cc": "thomas@monjalon.net, stephen@networkplumber.org, ferruh.yigit@intel.com,\n olivier.matz@6wind.com, jerinjacobk@gmail.com,\n maxime.coquelin@redhat.com, david.marchand@redhat.com,\n arybchenko@solarflare.com", "Date": "Fri, 16 Oct 2020 10:22:40 +0000", "Message-Id": "<1602843764-32331-3-git-send-email-viacheslavo@nvidia.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1602843764-32331-1-git-send-email-viacheslavo@nvidia.com>", "References": "\n <MWHPR12MB136076E652230CEBD6EE6562DF5F0@MWHPR12MB1360.namprd12.prod.outlook.com>\n <1602843764-32331-1-git-send-email-viacheslavo@nvidia.com>", "Subject": "[dpdk-dev] [PATCH v9 2/6] app/testpmd: add multiple pools per core\n\tcreation", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "The command line parameter --mbuf-size is updated, it can handle\nthe multiple values like the following:\n\n--mbuf-size=2176,512,768,4096\n\nspecifying the creation the extra memory pools with the requested\nmbuf data buffer sizes. If some buffer split feature is engaged\nthe extra memory pools can be used to configure the Rx queues\nwith rte_the_dev_rx_queue_setup_ex().\n\nThe extra pools are created with requested sizes, and pool names\nare assigned with appended index: mbuf_pool_socket_%socket_%index.\nIndex zero is used to specify the first mandatory pool to maintain\ncompatibility with existing code.\n\nSigned-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>\n---\n app/test-pmd/bpf_cmd.c | 4 +--\n app/test-pmd/cmdline.c | 2 +-\n app/test-pmd/config.c | 6 ++--\n app/test-pmd/parameters.c | 24 +++++++++----\n app/test-pmd/testpmd.c | 63 +++++++++++++++++++----------------\n app/test-pmd/testpmd.h | 24 ++++++++++---\n doc/guides/testpmd_app_ug/run_app.rst | 7 ++--\n 7 files changed, 83 insertions(+), 47 deletions(-)", "diff": "diff --git a/app/test-pmd/bpf_cmd.c b/app/test-pmd/bpf_cmd.c\nindex 16e3c3b..0a1a178 100644\n--- a/app/test-pmd/bpf_cmd.c\n+++ b/app/test-pmd/bpf_cmd.c\n@@ -69,7 +69,7 @@ struct cmd_bpf_ld_result {\n \n \t*flags = RTE_BPF_ETH_F_NONE;\n \targ->type = RTE_BPF_ARG_PTR;\n-\targ->size = mbuf_data_size;\n+\targ->size = mbuf_data_size[0];\n \n \tfor (i = 0; str[i] != 0; i++) {\n \t\tv = toupper(str[i]);\n@@ -78,7 +78,7 @@ struct cmd_bpf_ld_result {\n \t\telse if (v == 'M') {\n \t\t\targ->type = RTE_BPF_ARG_PTR_MBUF;\n \t\t\targ->size = sizeof(struct rte_mbuf);\n-\t\t\targ->buf_size = mbuf_data_size;\n+\t\t\targ->buf_size = mbuf_data_size[0];\n \t\t} else if (v == '-')\n \t\t\tcontinue;\n \t\telse\ndiff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 078f063..19b1896 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -2925,7 +2925,7 @@ struct cmd_setup_rxtx_queue {\n \t\tif (!numa_support || socket_id == NUMA_NO_CONFIG)\n \t\t\tsocket_id = port->socket_id;\n \n-\t\tmp = mbuf_pool_find(socket_id);\n+\t\tmp = mbuf_pool_find(socket_id, 0);\n \t\tif (mp == NULL) {\n \t\t\tprintf(\"Failed to setup RX queue: \"\n \t\t\t\t\"No mempool allocation\"\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex 2c00b55..c554dd0 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -690,7 +690,7 @@ static int bus_match_all(const struct rte_bus *bus, const void *data)\n \tprintf(\"\\nConnect to socket: %u\", port->socket_id);\n \n \tif (port_numa[port_id] != NUMA_NO_CONFIG) {\n-\t\tmp = mbuf_pool_find(port_numa[port_id]);\n+\t\tmp = mbuf_pool_find(port_numa[port_id], 0);\n \t\tif (mp)\n \t\t\tprintf(\"\\nmemory allocation on the socket: %d\",\n \t\t\t\t\t\t\tport_numa[port_id]);\n@@ -3580,9 +3580,9 @@ struct igb_ring_desc_16_bytes {\n \t */\n \ttx_pkt_len = 0;\n \tfor (i = 0; i < nb_segs; i++) {\n-\t\tif (seg_lengths[i] > (unsigned) mbuf_data_size) {\n+\t\tif (seg_lengths[i] > mbuf_data_size[0]) {\n \t\t\tprintf(\"length[%u]=%u > mbuf_data_size=%u - give up\\n\",\n-\t\t\t i, seg_lengths[i], (unsigned) mbuf_data_size);\n+\t\t\t i, seg_lengths[i], mbuf_data_size[0]);\n \t\t\treturn;\n \t\t}\n \t\ttx_pkt_len = (uint16_t)(tx_pkt_len + seg_lengths[i]);\ndiff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex 15ce8c1..4db4987 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -106,7 +106,9 @@\n \t \"(flag: 1 for RX; 2 for TX; 3 for RX and TX).\\n\");\n \tprintf(\" --socket-num=N: set socket from which all memory is allocated \"\n \t \"in NUMA mode.\\n\");\n-\tprintf(\" --mbuf-size=N: set the data size of mbuf to N bytes.\\n\");\n+\tprintf(\" --mbuf-size=N,[N1[,..Nn]: set the data size of mbuf to \"\n+\t \"N bytes. If multiple numbers are specified the extra pools \"\n+\t \"will be created to receive with packet split features\\n\");\n \tprintf(\" --total-num-mbufs=N: set the number of mbufs to be allocated \"\n \t \"in mbuf pools.\\n\");\n \tprintf(\" --max-pkt-len=N: set the maximum size of packet to N bytes.\\n\");\n@@ -892,12 +894,22 @@\n \t\t\t\t}\n \t\t\t}\n \t\t\tif (!strcmp(lgopts[opt_idx].name, \"mbuf-size\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0 && n <= 0xFFFF)\n-\t\t\t\t\tmbuf_data_size = (uint16_t) n;\n-\t\t\t\telse\n+\t\t\t\tunsigned int mb_sz[MAX_SEGS_BUFFER_SPLIT];\n+\t\t\t\tunsigned int nb_segs, i;\n+\n+\t\t\t\tnb_segs = parse_item_list(optarg, \"mbuf-size\",\n+\t\t\t\t\tMAX_SEGS_BUFFER_SPLIT, mb_sz, 0);\n+\t\t\t\tif (nb_segs <= 0)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"mbuf-size should be > 0 and < 65536\\n\");\n+\t\t\t\t\t\t \"bad mbuf-size\\n\");\n+\t\t\t\tfor (i = 0; i < nb_segs; i++) {\n+\t\t\t\t\tif (mb_sz[i] <= 0 || mb_sz[i] > 0xFFFF)\n+\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\t\t \"mbuf-size should be \"\n+\t\t\t\t\t\t\t \"> 0 and < 65536\\n\");\n+\t\t\t\t\tmbuf_data_size[i] = (uint16_t) mb_sz[i];\n+\t\t\t\t}\n+\t\t\t\tmbuf_data_size_n = nb_segs;\n \t\t\t}\n \t\t\tif (!strcmp(lgopts[opt_idx].name, \"total-num-mbufs\")) {\n \t\t\t\tn = atoi(optarg);\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex ccba71c..7e6ef80 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -186,7 +186,7 @@ struct fwd_engine * fwd_engines[] = {\n \tNULL,\n };\n \n-struct rte_mempool *mempools[RTE_MAX_NUMA_NODES];\n+struct rte_mempool *mempools[RTE_MAX_NUMA_NODES * MAX_SEGS_BUFFER_SPLIT];\n uint16_t mempool_flags;\n \n struct fwd_config cur_fwd_config;\n@@ -195,7 +195,10 @@ struct fwd_engine * fwd_engines[] = {\n uint32_t burst_tx_delay_time = BURST_TX_WAIT_US;\n uint32_t burst_tx_retry_num = BURST_TX_RETRIES;\n \n-uint16_t mbuf_data_size = DEFAULT_MBUF_DATA_SIZE; /**< Mbuf data space size. */\n+uint32_t mbuf_data_size_n = 1; /* Number of specified mbuf sizes. */\n+uint16_t mbuf_data_size[MAX_SEGS_BUFFER_SPLIT] = {\n+\tDEFAULT_MBUF_DATA_SIZE\n+}; /**< Mbuf data space size. */\n uint32_t param_total_num_mbufs = 0; /**< number of mbufs in all pools - if\n * specified on command-line. */\n uint16_t stats_period; /**< Period to show statistics (disabled by default) */\n@@ -955,14 +958,14 @@ struct extmem_param {\n */\n static struct rte_mempool *\n mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,\n-\t\t unsigned int socket_id)\n+\t\t unsigned int socket_id, unsigned int size_idx)\n {\n \tchar pool_name[RTE_MEMPOOL_NAMESIZE];\n \tstruct rte_mempool *rte_mp = NULL;\n \tuint32_t mb_size;\n \n \tmb_size = sizeof(struct rte_mbuf) + mbuf_seg_size;\n-\tmbuf_poolname_build(socket_id, pool_name, sizeof(pool_name));\n+\tmbuf_poolname_build(socket_id, pool_name, sizeof(pool_name), size_idx);\n \n \tTESTPMD_LOG(INFO,\n \t\t\"create a new mbuf pool <%s>: n=%u, size=%u, socket=%u\\n\",\n@@ -1485,8 +1488,8 @@ struct extmem_param {\n \t\t\t\tport->dev_info.rx_desc_lim.nb_mtu_seg_max;\n \n \t\t\tif ((data_size + RTE_PKTMBUF_HEADROOM) >\n-\t\t\t\t\t\t\tmbuf_data_size) {\n-\t\t\t\tmbuf_data_size = data_size +\n+\t\t\t\t\t\t\tmbuf_data_size[0]) {\n+\t\t\t\tmbuf_data_size[0] = data_size +\n \t\t\t\t\t\t RTE_PKTMBUF_HEADROOM;\n \t\t\t\twarning = 1;\n \t\t\t}\n@@ -1494,9 +1497,9 @@ struct extmem_param {\n \t}\n \n \tif (warning)\n-\t\tTESTPMD_LOG(WARNING, \"Configured mbuf size %hu\\n\",\n-\t\t\t mbuf_data_size);\n-\n+\t\tTESTPMD_LOG(WARNING,\n+\t\t\t \"Configured mbuf size of the first segment %hu\\n\",\n+\t\t\t mbuf_data_size[0]);\n \t/*\n \t * Create pools of mbuf.\n \t * If NUMA support is disabled, create a single pool of mbuf in\n@@ -1516,21 +1519,23 @@ struct extmem_param {\n \t}\n \n \tif (numa_support) {\n-\t\tuint8_t i;\n+\t\tuint8_t i, j;\n \n \t\tfor (i = 0; i < num_sockets; i++)\n-\t\t\tmempools[i] = mbuf_pool_create(mbuf_data_size,\n-\t\t\t\t\t\t nb_mbuf_per_pool,\n-\t\t\t\t\t\t socket_ids[i]);\n+\t\t\tfor (j = 0; j < mbuf_data_size_n; j++)\n+\t\t\t\tmempools[i * MAX_SEGS_BUFFER_SPLIT + j] =\n+\t\t\t\t\tmbuf_pool_create(mbuf_data_size[j],\n+\t\t\t\t\t\t\t nb_mbuf_per_pool,\n+\t\t\t\t\t\t\t socket_ids[i], j);\n \t} else {\n-\t\tif (socket_num == UMA_NO_CONFIG)\n-\t\t\tmempools[0] = mbuf_pool_create(mbuf_data_size,\n-\t\t\t\t\t\t nb_mbuf_per_pool, 0);\n-\t\telse\n-\t\t\tmempools[socket_num] = mbuf_pool_create\n-\t\t\t\t\t\t\t(mbuf_data_size,\n-\t\t\t\t\t\t\t nb_mbuf_per_pool,\n-\t\t\t\t\t\t\t socket_num);\n+\t\tuint8_t i;\n+\n+\t\tfor (i = 0; i < mbuf_data_size_n; i++)\n+\t\t\tmempools[i] = mbuf_pool_create\n+\t\t\t\t\t(mbuf_data_size[i],\n+\t\t\t\t\t nb_mbuf_per_pool,\n+\t\t\t\t\t socket_num == UMA_NO_CONFIG ?\n+\t\t\t\t\t 0 : socket_num, i);\n \t}\n \n \tinit_port_config();\n@@ -1542,10 +1547,10 @@ struct extmem_param {\n \t */\n \tfor (lc_id = 0; lc_id < nb_lcores; lc_id++) {\n \t\tmbp = mbuf_pool_find(\n-\t\t\trte_lcore_to_socket_id(fwd_lcores_cpuids[lc_id]));\n+\t\t\trte_lcore_to_socket_id(fwd_lcores_cpuids[lc_id]), 0);\n \n \t\tif (mbp == NULL)\n-\t\t\tmbp = mbuf_pool_find(0);\n+\t\t\tmbp = mbuf_pool_find(0, 0);\n \t\tfwd_lcores[lc_id]->mbp = mbp;\n \t\t/* initialize GSO context */\n \t\tfwd_lcores[lc_id]->gso_ctx.direct_pool = mbp;\n@@ -2498,7 +2503,8 @@ struct extmem_param {\n \t\t\t\tif ((numa_support) &&\n \t\t\t\t\t(rxring_numa[pi] != NUMA_NO_CONFIG)) {\n \t\t\t\t\tstruct rte_mempool * mp =\n-\t\t\t\t\t\tmbuf_pool_find(rxring_numa[pi]);\n+\t\t\t\t\t\tmbuf_pool_find\n+\t\t\t\t\t\t\t(rxring_numa[pi], 0);\n \t\t\t\t\tif (mp == NULL) {\n \t\t\t\t\t\tprintf(\"Failed to setup RX queue:\"\n \t\t\t\t\t\t\t\"No mempool allocation\"\n@@ -2514,7 +2520,8 @@ struct extmem_param {\n \t\t\t\t\t mp);\n \t\t\t\t} else {\n \t\t\t\t\tstruct rte_mempool *mp =\n-\t\t\t\t\t\tmbuf_pool_find(port->socket_id);\n+\t\t\t\t\t\tmbuf_pool_find\n+\t\t\t\t\t\t\t(port->socket_id, 0);\n \t\t\t\t\tif (mp == NULL) {\n \t\t\t\t\t\tprintf(\"Failed to setup RX queue:\"\n \t\t\t\t\t\t\t\"No mempool allocation\"\n@@ -2909,13 +2916,13 @@ struct extmem_param {\n pmd_test_exit(void)\n {\n \tportid_t pt_id;\n+\tunsigned int i;\n \tint ret;\n-\tint i;\n \n \tif (test_done == 0)\n \t\tstop_packet_forwarding();\n \n-\tfor (i = 0 ; i < RTE_MAX_NUMA_NODES ; i++) {\n+\tfor (i = 0 ; i < RTE_DIM(mempools) ; i++) {\n \t\tif (mempools[i]) {\n \t\t\tif (mp_alloc_type == MP_ALLOC_ANON)\n \t\t\t\trte_mempool_mem_iter(mempools[i], dma_unmap_cb,\n@@ -2959,7 +2966,7 @@ struct extmem_param {\n \t\t\treturn;\n \t\t}\n \t}\n-\tfor (i = 0 ; i < RTE_MAX_NUMA_NODES ; i++) {\n+\tfor (i = 0 ; i < RTE_DIM(mempools) ; i++) {\n \t\tif (mempools[i])\n \t\t\trte_mempool_free(mempools[i]);\n \t}\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex a4dfd4f..0975305 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -42,6 +42,13 @@\n */\n #define RTE_MAX_SEGS_PER_PKT 255 /**< nb_segs is a 8-bit unsigned char. */\n \n+/*\n+ * The maximum number of segments per packet is used to configure\n+ * buffer split feature, also specifies the maximum amount of\n+ * optional Rx pools to allocate mbufs to split.\n+ */\n+#define MAX_SEGS_BUFFER_SPLIT 8 /**< nb_segs is a 8-bit unsigned char. */\n+\n #define MAX_PKT_BURST 512\n #define DEF_PKT_BURST 32\n \n@@ -403,7 +410,9 @@ struct queue_stats_mappings {\n extern uint8_t dcb_config;\n extern uint8_t dcb_test;\n \n-extern uint16_t mbuf_data_size; /**< Mbuf data space size. */\n+extern uint32_t mbuf_data_size_n;\n+extern uint16_t mbuf_data_size[MAX_SEGS_BUFFER_SPLIT];\n+/**< Mbuf data space size. */\n extern uint32_t param_total_num_mbufs;\n \n extern uint16_t stats_period;\n@@ -615,17 +624,22 @@ struct mplsoudp_decap_conf {\n \n /* Mbuf Pools */\n static inline void\n-mbuf_poolname_build(unsigned int sock_id, char* mp_name, int name_size)\n+mbuf_poolname_build(unsigned int sock_id, char *mp_name,\n+\t\t int name_size, unsigned int idx)\n {\n-\tsnprintf(mp_name, name_size, \"mbuf_pool_socket_%u\", sock_id);\n+\tif (!idx)\n+\t\tsnprintf(mp_name, name_size, \"mbuf_pool_socket_%u\", sock_id);\n+\telse\n+\t\tsnprintf(mp_name, name_size, \"mbuf_pool_socket_%u_%u\",\n+\t\t\t sock_id, idx);\n }\n \n static inline struct rte_mempool *\n-mbuf_pool_find(unsigned int sock_id)\n+mbuf_pool_find(unsigned int sock_id, unsigned int idx)\n {\n \tchar pool_name[RTE_MEMPOOL_NAMESIZE];\n \n-\tmbuf_poolname_build(sock_id, pool_name, sizeof(pool_name));\n+\tmbuf_poolname_build(sock_id, pool_name, sizeof(pool_name), idx);\n \treturn rte_mempool_lookup((const char *)pool_name);\n }\n \ndiff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst\nindex ec085c2..1eb0a10 100644\n--- a/doc/guides/testpmd_app_ug/run_app.rst\n+++ b/doc/guides/testpmd_app_ug/run_app.rst\n@@ -107,9 +107,12 @@ The command line options are:\n Set the socket from which all memory is allocated in NUMA mode,\n where 0 <= N < number of sockets on the board.\n \n-* ``--mbuf-size=N``\n+* ``--mbuf-size=N[,N1[,...Nn]``\n \n- Set the data size of the mbufs used to N bytes, where N < 65536. The default value is 2048.\n+ Set the data size of the mbufs used to N bytes, where N < 65536.\n+ The default value is 2048. If multiple mbuf-size values are specified the\n+ extra memory pools will be created for allocating mbufs to receive packets\n+ with buffer splittling features.\n \n * ``--total-num-mbufs=N``\n \n", "prefixes": [ "v9", "2/6" ] }{ "id": 81079, "url": "