* [PATCH] app/testpmd: add command line argument 'rx-metadata' @ 2022-08-01 4:41 Hanumanth Pothula 2022-08-01 13:11 ` Hanumanth Pothula 2022-08-01 13:13 ` Hanumanth Pothula 0 siblings, 2 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-01 4:41 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, jerinj, hpothula, ndabilpuram Performance drop is observed by sending per packet rx metadata (offloads). Hence, introducing command line argument, 'rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..daf1218977 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --rx-metadata: send rx metadata to driver \n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "rx-metadata")) + rx_metadata_negotiate = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..ebbde5dfc9 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* send rx metadata */ +uint8_t rx_metadata_negotiate; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (rx_metadata_negotiate) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..8a9168c51e 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t rx_metadata_negotiate; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH] app/testpmd: add command line argument 'rx-metadata' 2022-08-01 4:41 [PATCH] app/testpmd: add command line argument 'rx-metadata' Hanumanth Pothula @ 2022-08-01 13:11 ` Hanumanth Pothula 2022-08-01 13:13 ` Hanumanth Pothula 1 sibling, 0 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-01 13:11 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, hpothula Presently, rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. ci: skip_checkpatch Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> Change-Id: If7b6bbc7489d3e9df89c63e000d71ea2f7fe9afd --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..daf1218977 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --rx-metadata: send rx metadata to driver \n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "rx-metadata")) + rx_metadata_negotiate = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..ebbde5dfc9 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* send rx metadata */ +uint8_t rx_metadata_negotiate; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (rx_metadata_negotiate) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..8a9168c51e 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t rx_metadata_negotiate; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH] app/testpmd: add command line argument 'rx-metadata' 2022-08-01 4:41 [PATCH] app/testpmd: add command line argument 'rx-metadata' Hanumanth Pothula 2022-08-01 13:11 ` Hanumanth Pothula @ 2022-08-01 13:13 ` Hanumanth Pothula 2022-08-01 19:41 ` Ivan Malov ` (2 more replies) 1 sibling, 3 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-01 13:13 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, jerinj, hpothula Presently, rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..daf1218977 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --rx-metadata: send rx metadata to driver \n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "rx-metadata")) + rx_metadata_negotiate = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..ebbde5dfc9 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* send rx metadata */ +uint8_t rx_metadata_negotiate; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (rx_metadata_negotiate) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..8a9168c51e 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t rx_metadata_negotiate; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH] app/testpmd: add command line argument 'rx-metadata' 2022-08-01 13:13 ` Hanumanth Pothula @ 2022-08-01 19:41 ` Ivan Malov 2022-08-02 16:45 ` [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula 2 siblings, 0 replies; 73+ messages in thread From: Ivan Malov @ 2022-08-01 19:41 UTC (permalink / raw) To: Hanumanth Pothula; +Cc: Aman Singh, Yuying Zhang, dev, jerinj [-- Attachment #1: Type: text/plain, Size: 3688 bytes --] Hi Hanumanth, Thanks for expanding support for the NIC-to-PMD Rx metadata feature. I do not object the idea of the patch, it looks aceeptable. However, please find my comments below. On Mon, 1 Aug 2022, Hanumanth Pothula wrote: > Presently, rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in rx path > takes extra cycles. > > Hence, introducing command line argument, 'rx-metadata' to > control passing rx metadata to PMD. By default it’s disabled. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > --- > app/test-pmd/parameters.c | 4 ++++ > app/test-pmd/testpmd.c | 6 +++++- > app/test-pmd/testpmd.h | 2 ++ > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c > index e3c9757f3f..daf1218977 100644 > --- a/app/test-pmd/parameters.c > +++ b/app/test-pmd/parameters.c > @@ -213,6 +213,7 @@ usage(char* progname) > printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" > " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" > " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); > + printf(" --rx-metadata: send rx metadata to driver \n"); In accordance with the above "printf", one should have 2 space characters between the opening double quote character and "--". Also, it is quite common to capitalise "R" in "Rx". The space character before "\n" seems redundant. Regarding the option name, I would appreciate if it gets more precise and clear. Consider: "--nic-to-pmd-rx-metadata". I do not insist on this particular name. Perhaps it pays to have a bit more verbose description as well. Consider: "let the NIC deliver per-packet Rx metadata to PMD". > } > #ifdef RTE_LIB_CMDLINE > @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) > { "record-burst-stats", 0, 0, 0 }, > { PARAM_NUM_PROCS, 1, 0, 0 }, > { PARAM_PROC_ID, 1, 0, 0 }, > + { "rx-metadata", 0, 0, 0 }, > { 0, 0, 0, 0 }, > }; > @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) > num_procs = atoi(optarg); > if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) > proc_id = atoi(optarg); > + if (!strcmp(lgopts[opt_idx].name, "rx-metadata")) > + rx_metadata_negotiate = 1; > break; > case 'h': > usage(argv[0]); > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index addcbcac85..ebbde5dfc9 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; > /* Hairpin ports configuration mode. */ > uint16_t hairpin_mode; > +/* send rx metadata */ Consider: "/* Send Rx metadata */". > +uint8_t rx_metadata_negotiate; > + > /* Pretty printing of ethdev events */ > static const char * const eth_event_desc[] = { > [RTE_ETH_EVENT_UNKNOWN] = "unknown", > @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) > int ret; > int i; > - eth_rx_metadata_negotiate_mp(pid); > + if (rx_metadata_negotiate) > + eth_rx_metadata_negotiate_mp(pid); > port->dev_conf.txmode = tx_mode; > port->dev_conf.rxmode = rx_mode; > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h > index fb2f5195d3..8a9168c51e 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; > extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ > extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ > +extern uint8_t rx_metadata_negotiate; > + > #ifdef RTE_LIB_GRO > #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 > #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ > > -- > 2.25.1 > > -- Best regards, Ivan M ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-08-01 13:13 ` Hanumanth Pothula 2022-08-01 19:41 ` Ivan Malov @ 2022-08-02 16:45 ` Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 1/2] version: 22.11-rc0 Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 2/2] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula 2 siblings, 2 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-02 16:45 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, Hanumanth Pothula Presently, rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> v2: - taken care alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..a381945492 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --nic-to-pmd-rx-metadata: let the NIC deliver per-packet Rx metadata to PMD\n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "nic-to-pmd-rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "nic-to-pmd-rx-metadata")) + nic_to_pmd_rx_metadata = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..2b17d4f757 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* Send Rx metadata */ +uint8_t nic_to_pmd_rx_metadata; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..294a9c8cf4 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t nic_to_pmd_rx_metadata; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v2 1/2] version: 22.11-rc0 2022-08-02 16:45 ` [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula @ 2022-08-02 16:45 ` Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 2/2] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 1 sibling, 0 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-02 16:45 UTC (permalink / raw) To: Aaron Conole, Michael Santana, Ray Kinsella, Nicolas Chautru, Gagandeep Singh, Hemant Agrawal, Sachin Saxena, Rosen Xu, Stephen Hemminger, Long Li, Fan Zhang, Lee Daly, Ashish Gupta, Matan Azrad, Sunila Sahu, Ruifeng Wang, Ajit Khaparde, Raveendra Padasalagi, Vikas Gupta, Chandubabu Namburu, Pablo de Lara, Michael Shamis, Liron Himi, Nagadheeraj Rottela, Srikanth Jampala, Anoob Joseph, Jay Zhou, Radha Mohan Chintakuntla, Veerasenareddy Burru, Chengwen Feng, Bruce Richardson, Kevin Laatz, Conor Walsh, Timothy McDaniel, Mattias Rönnblom, Jerin Jacob, Liang Ma, Peter Mccarthy, Harry van Haaren, Elena Agostini, Artem V. Andreev, Andrew Rybchenko, Harman Kalra, Olivier Matz, John W. Linville, Ciara Loftus, Qi Zhang, Shepard Siegel, Ed Czeck, John Miller, Igor Russkikh, Steven Webster, Matt Peters, Rasesh Mody, Shahed Shaikh, Somnath Kotur, Chas Williams, Min Hu (Connor), Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Rahul Lakkireddy, Simei Su, Wenjun Wu, Marcin Wojtas, Michal Krawczyk, Shai Brandes, Evgeny Schemeilin, Igor Chauskin, Apeksha Gupta, John Daley, Hyong Youb Kim, Gaetan Rivet, Xiao Wang, Ziyang Xuan, Xiaoyun Wang, Guoyang Zhou, Dongdong Liu, Yisen Zhuang, Yuying Zhang, Beilei Xing, Jingjing Wu, Qiming Yang, Junfeng Guo, Andrew Boyer, Shijith Thotton, Srisivasubramanian Srinivasan, Jakub Grajciar, Viacheslav Ovsiienko, Zyta Szpak, Martin Spinler, Chaoyong He, Niklas Soderlund, Jiawen Wu, Tetsuya Mukawa, Sathesh Edara, Devendra Singh Rawat, Jasvinder Singh, Cristian Dumitrescu, Maciej Czekaj, Jian Wang, Maxime Coquelin, Chenbo Xia, Jochen Behrens, Jakub Palider, Tomasz Duszynski, Tianfei zhang, Ori Kam, Vijay Kumar Srivastava, Konstantin Ananyev, Akhil Goyal, David Hunt, Byron Marohn, Yipeng Wang, Thomas Monjalon, Ferruh Yigit, Vladimir Medvedkin, Jiayu Hu, Sameh Gobriel, Bernard Iremonger, Reshma Pattan, Honnappa Nagarahalli, Ciara Power, Erik Gabriel Carrillo Cc: dev, David Marchand From: David Marchand <david.marchand@redhat.com> Start a new release cycle with empty release notes. The ABI version becomes 23.0. The map files are updated to the new ABI major number (23). The ABI exceptions are dropped and CI ABI checks are disabled because compatibility is not preserved. Special handling of removed drivers is also dropped in check-abi.sh and a note has been added in libabigail.abignore as a reminder. Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Thomas Monjalon <thomas@monjalon.net> --- .github/workflows/build.yml | 4 +- .travis.yml | 21 +--- ABI_VERSION | 2 +- VERSION | 2 +- devtools/check-abi.sh | 4 - devtools/libabigail.abignore | 37 ------ doc/guides/rel_notes/index.rst | 1 + doc/guides/rel_notes/release_22_11.rst | 136 +++++++++++++++++++++ drivers/baseband/acc100/version.map | 2 +- drivers/baseband/fpga_5gnr_fec/version.map | 2 +- drivers/baseband/fpga_lte_fec/version.map | 2 +- drivers/baseband/la12xx/version.map | 2 +- drivers/baseband/null/version.map | 2 +- drivers/baseband/turbo_sw/version.map | 2 +- drivers/bus/fslmc/version.map | 2 +- drivers/bus/ifpga/version.map | 2 +- drivers/bus/pci/version.map | 2 +- drivers/bus/vdev/version.map | 2 +- drivers/bus/vmbus/version.map | 2 +- drivers/common/qat/version.map | 2 +- drivers/compress/isal/version.map | 2 +- drivers/compress/mlx5/version.map | 2 +- drivers/compress/octeontx/version.map | 2 +- drivers/compress/zlib/version.map | 2 +- drivers/crypto/armv8/version.map | 2 +- drivers/crypto/bcmfs/version.map | 2 +- drivers/crypto/caam_jr/version.map | 2 +- drivers/crypto/ccp/version.map | 2 +- drivers/crypto/ipsec_mb/version.map | 2 +- drivers/crypto/mlx5/version.map | 2 +- drivers/crypto/mvsam/version.map | 2 +- drivers/crypto/nitrox/version.map | 2 +- drivers/crypto/null/version.map | 2 +- drivers/crypto/octeontx/version.map | 2 +- drivers/crypto/openssl/version.map | 2 +- drivers/crypto/scheduler/version.map | 2 +- drivers/crypto/virtio/version.map | 2 +- drivers/dma/cnxk/version.map | 2 +- drivers/dma/dpaa/version.map | 2 +- drivers/dma/dpaa2/version.map | 2 +- drivers/dma/hisilicon/version.map | 2 +- drivers/dma/idxd/version.map | 2 +- drivers/dma/ioat/version.map | 2 +- drivers/dma/skeleton/version.map | 2 +- drivers/event/dlb2/version.map | 2 +- drivers/event/dpaa/version.map | 2 +- drivers/event/dpaa2/version.map | 2 +- drivers/event/dsw/version.map | 2 +- drivers/event/octeontx/version.map | 2 +- drivers/event/opdl/version.map | 2 +- drivers/event/skeleton/version.map | 2 +- drivers/event/sw/version.map | 2 +- drivers/gpu/cuda/version.map | 2 +- drivers/mempool/bucket/version.map | 2 +- drivers/mempool/dpaa2/version.map | 2 +- drivers/mempool/octeontx/version.map | 2 +- drivers/mempool/ring/version.map | 2 +- drivers/mempool/stack/version.map | 2 +- drivers/net/af_packet/version.map | 2 +- drivers/net/af_xdp/version.map | 2 +- drivers/net/ark/version.map | 2 +- drivers/net/atlantic/version.map | 2 +- drivers/net/avp/version.map | 2 +- drivers/net/axgbe/version.map | 2 +- drivers/net/bnx2x/version.map | 2 +- drivers/net/bnxt/version.map | 2 +- drivers/net/bonding/version.map | 2 +- drivers/net/cnxk/version.map | 12 +- drivers/net/cxgbe/version.map | 2 +- drivers/net/dpaa/version.map | 2 +- drivers/net/dpaa2/version.map | 2 +- drivers/net/e1000/version.map | 2 +- drivers/net/ena/version.map | 2 +- drivers/net/enetc/version.map | 2 +- drivers/net/enetfec/version.map | 2 +- drivers/net/enic/version.map | 2 +- drivers/net/failsafe/version.map | 2 +- drivers/net/fm10k/version.map | 2 +- drivers/net/hinic/version.map | 2 +- drivers/net/hns3/version.map | 2 +- drivers/net/i40e/version.map | 2 +- drivers/net/iavf/version.map | 2 +- drivers/net/ice/version.map | 2 +- drivers/net/igc/version.map | 2 +- drivers/net/ionic/version.map | 2 +- drivers/net/ipn3ke/version.map | 2 +- drivers/net/ixgbe/version.map | 2 +- drivers/net/kni/version.map | 2 +- drivers/net/liquidio/version.map | 2 +- drivers/net/memif/version.map | 2 +- drivers/net/mlx4/version.map | 2 +- drivers/net/mlx5/version.map | 2 +- drivers/net/mvneta/version.map | 2 +- drivers/net/mvpp2/version.map | 2 +- drivers/net/netvsc/version.map | 2 +- drivers/net/nfb/version.map | 2 +- drivers/net/nfp/version.map | 2 +- drivers/net/ngbe/version.map | 2 +- drivers/net/null/version.map | 2 +- drivers/net/octeontx/version.map | 2 +- drivers/net/octeontx_ep/version.map | 2 +- drivers/net/pcap/version.map | 2 +- drivers/net/pfe/version.map | 2 +- drivers/net/qede/version.map | 2 +- drivers/net/ring/version.map | 2 +- drivers/net/sfc/version.map | 2 +- drivers/net/softnic/version.map | 2 +- drivers/net/tap/version.map | 2 +- drivers/net/thunderx/version.map | 2 +- drivers/net/txgbe/version.map | 2 +- drivers/net/vdev_netvsc/version.map | 2 +- drivers/net/vhost/version.map | 2 +- drivers/net/virtio/version.map | 2 +- drivers/net/vmxnet3/version.map | 2 +- drivers/raw/cnxk_bphy/version.map | 2 +- drivers/raw/cnxk_gpio/version.map | 2 +- drivers/raw/dpaa2_cmdif/version.map | 2 +- drivers/raw/ifpga/version.map | 18 +-- drivers/raw/ioat/version.map | 2 +- drivers/raw/ntb/version.map | 2 +- drivers/raw/skeleton/version.map | 2 +- drivers/regex/cn9k/version.map | 2 +- drivers/regex/mlx5/version.map | 2 +- drivers/vdpa/ifc/version.map | 2 +- drivers/vdpa/mlx5/version.map | 2 +- drivers/vdpa/sfc/version.map | 2 +- lib/acl/version.map | 2 +- lib/bbdev/version.map | 2 +- lib/bitratestats/version.map | 2 +- lib/bpf/version.map | 2 +- lib/cfgfile/version.map | 2 +- lib/cmdline/version.map | 2 +- lib/cryptodev/version.map | 2 +- lib/distributor/version.map | 2 +- lib/eal/version.map | 2 +- lib/efd/version.map | 2 +- lib/ethdev/version.map | 2 +- lib/eventdev/version.map | 2 +- lib/fib/version.map | 2 +- lib/gro/version.map | 2 +- lib/gso/version.map | 2 +- lib/hash/version.map | 2 +- lib/ip_frag/version.map | 2 +- lib/ipsec/version.map | 2 +- lib/jobstats/version.map | 2 +- lib/kni/version.map | 2 +- lib/kvargs/version.map | 2 +- lib/latencystats/version.map | 2 +- lib/lpm/version.map | 2 +- lib/mbuf/version.map | 2 +- lib/member/version.map | 2 +- lib/mempool/version.map | 2 +- lib/meter/version.map | 2 +- lib/metrics/version.map | 2 +- lib/net/version.map | 2 +- lib/pci/version.map | 2 +- lib/pdump/version.map | 2 +- lib/pipeline/version.map | 2 +- lib/port/version.map | 2 +- lib/power/version.map | 2 +- lib/rawdev/version.map | 2 +- lib/rcu/version.map | 2 +- lib/reorder/version.map | 2 +- lib/rib/version.map | 2 +- lib/ring/version.map | 2 +- lib/sched/version.map | 2 +- lib/security/version.map | 2 +- lib/stack/version.map | 2 +- lib/table/version.map | 2 +- lib/telemetry/version.map | 2 +- lib/timer/version.map | 2 +- lib/vhost/version.map | 2 +- 172 files changed, 319 insertions(+), 242 deletions(-) create mode 100644 doc/guides/rel_notes/release_22_11.rst diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1106256539..6f04e7071c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: MINGW: ${{ matrix.config.cross == 'mingw' }} MINI: ${{ matrix.config.mini != '' }} PPC64LE: ${{ matrix.config.cross == 'ppc64le' }} - REF_GIT_TAG: v22.03 + REF_GIT_TAG: none RISCV64: ${{ matrix.config.cross == 'riscv64' }} RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }} @@ -43,7 +43,7 @@ jobs: - os: ubuntu-20.04 compiler: gcc library: shared - checks: abi+doc+tests + checks: doc+tests - os: ubuntu-20.04 compiler: clang library: static diff --git a/.travis.yml b/.travis.yml index 5f46dccb54..4bb5bf629e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ script: ./.ci/${TRAVIS_OS_NAME}-build.sh env: global: - LIBABIGAIL_VERSION=libabigail-1.8 - - REF_GIT_TAG=v22.03 + - REF_GIT_TAG=none jobs: include: @@ -61,14 +61,6 @@ jobs: packages: - *required_packages - *doc_packages - - env: DEF_LIB="shared" ABI_CHECKS=true - arch: amd64 - compiler: gcc - addons: - apt: - packages: - - *required_packages - - *libabigail_build_packages # x86_64 clang jobs - env: DEF_LIB="static" arch: amd64 @@ -145,17 +137,6 @@ jobs: packages: - *required_packages - *doc_packages - - env: DEF_LIB="shared" ABI_CHECKS=true - dist: focal - arch: arm64-graviton2 - virt: vm - group: edge - compiler: gcc - addons: - apt: - packages: - - *required_packages - - *libabigail_build_packages # aarch64 clang jobs - env: DEF_LIB="static" dist: focal diff --git a/ABI_VERSION b/ABI_VERSION index 95af471221..919c868b57 100644 --- a/ABI_VERSION +++ b/ABI_VERSION @@ -1 +1 @@ -22.2 +23.0 diff --git a/VERSION b/VERSION index 97371cc668..4bc005def2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -22.07.0 +22.11.0-rc0 diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh index d465c8cee0..c583eae2fd 100755 --- a/devtools/check-abi.sh +++ b/devtools/check-abi.sh @@ -37,10 +37,6 @@ fi error= for dump in $(find $refdir -name "*.dump"); do name=$(basename $dump) - if grep -qE '\<librte_*(.*_octeontx2|raw_dpaa2_qdma)' $dump; then - echo "Skipped removed driver $name." - continue - fi dump2=$(find $newdir -name $name) if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then echo "Error: cannot find $name in $newdir" >&2 diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index 8c8c648895..7a93de3ba1 100644 --- a/devtools/libabigail.abignore +++ b/devtools/libabigail.abignore @@ -34,40 +34,3 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Temporary exceptions till next major ABI version ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Ignore ethdev event enum update -; because new event cannot be received if not registered -[suppress_type] - type_kind = enum - changed_enumerators = RTE_ETH_EVENT_MAX - -; Ignore fields inserted in cacheline boundary of rte_eth_rxq_info -; because the struct size is unchanged -[suppress_type] - name = rte_eth_rxq_info - has_data_member_inserted_between = {offset_of(rx_buf_size), end} - -; Ignore fields inserted in place of reserved_opts of rte_security_ipsec_sa_options -[suppress_type] - name = rte_security_ipsec_sa_options - has_data_member_inserted_between = {offset_of(reserved_opts), end} - -; Ignore section attribute fixes in experimental regexdev library -[suppress_file] - soname_regexp = ^librte_regexdev\. - -; Ignore changes in common mlx5 driver, should be all internal -[suppress_file] - soname_regexp = ^librte_common_mlx5\. - -; Ignore visibility fix of local functions in experimental auxiliary driver -[suppress_file] - soname_regexp = ^librte_bus_auxiliary\. - -; Ignore visibility fix of local functions in experimental gpudev library -[suppress_file] - soname_regexp = ^librte_gpudev\. - -; Ignore libabigail false-positive in clang builds, after moving code. -[suppress_function] - name = rte_eal_remote_launch diff --git a/doc/guides/rel_notes/index.rst b/doc/guides/rel_notes/index.rst index 93a3f7e5da..f6782b91db 100644 --- a/doc/guides/rel_notes/index.rst +++ b/doc/guides/rel_notes/index.rst @@ -8,6 +8,7 @@ Release Notes :maxdepth: 1 :numbered: + release_22_11 release_22_07 release_22_03 release_21_11 diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst new file mode 100644 index 0000000000..8c021cf050 --- /dev/null +++ b/doc/guides/rel_notes/release_22_11.rst @@ -0,0 +1,136 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright 2022 The DPDK contributors + +.. include:: <isonum.txt> + +DPDK Release 22.11 +================== + +.. **Read this first.** + + The text in the sections below explains how to update the release notes. + + Use proper spelling, capitalization and punctuation in all sections. + + Variable and config names should be quoted as fixed width text: + ``LIKE_THIS``. + + Build the docs and view the output file to ensure the changes are correct:: + + ninja -C build doc + xdg-open build/doc/guides/html/rel_notes/release_22_11.html + + +New Features +------------ + +.. This section should contain new features added in this release. + Sample format: + + * **Add a title in the past tense with a full stop.** + + Add a short 1-2 sentence description in the past tense. + The description should be enough to allow someone scanning + the release notes to understand the new feature. + + If the feature adds a lot of sub-features you can use a bullet list + like this: + + * Added feature foo to do something. + * Enhanced feature bar to do something else. + + Refer to the previous release notes for examples. + + Suggested order in release notes items: + * Core libs (EAL, mempool, ring, mbuf, buses) + * Device abstraction libs and PMDs (ordered alphabetically by vendor name) + - ethdev (lib, PMDs) + - cryptodev (lib, PMDs) + - eventdev (lib, PMDs) + - etc + * Other libs + * Apps, Examples, Tools (if significant) + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= + + +Removed Items +------------- + +.. This section should contain removed items in this release. Sample format: + + * Add a short 1-2 sentence description of the removed item + in the past tense. + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= + + +API Changes +----------- + +.. This section should contain API changes. Sample format: + + * sample: Add a short 1-2 sentence description of the API change + which was announced in the previous releases and made in this release. + Start with a scope label like "ethdev:". + Use fixed width quotes for ``function_names`` or ``struct_names``. + Use the past tense. + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= + + +ABI Changes +----------- + +.. This section should contain ABI changes. Sample format: + + * sample: Add a short 1-2 sentence description of the ABI change + which was announced in the previous releases and made in this release. + Start with a scope label like "ethdev:". + Use fixed width quotes for ``function_names`` or ``struct_names``. + Use the past tense. + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= + + +Known Issues +------------ + +.. This section should contain new known issues in this release. Sample format: + + * **Add title in present tense with full stop.** + + Add a short 1-2 sentence description of the known issue + in the present tense. Add information on any known workarounds. + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= + + +Tested Platforms +---------------- + +.. This section should contain a list of platforms that were tested + with this release. + + The format is: + + * <vendor> platform with <vendor> <type of devices> combinations + + * List of CPU + * List of OS + * List of devices + * Other relevant details... + + This section is a comment. Do not overwrite or remove it. + Also, make sure to start the actual text at the margin. + ======================================================= diff --git a/drivers/baseband/acc100/version.map b/drivers/baseband/acc100/version.map index 13f0398d71..b4ff13e38f 100644 --- a/drivers/baseband/acc100/version.map +++ b/drivers/baseband/acc100/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/baseband/fpga_5gnr_fec/version.map b/drivers/baseband/fpga_5gnr_fec/version.map index de4e5025bf..6b191cf330 100644 --- a/drivers/baseband/fpga_5gnr_fec/version.map +++ b/drivers/baseband/fpga_5gnr_fec/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/baseband/fpga_lte_fec/version.map b/drivers/baseband/fpga_lte_fec/version.map index e3bfa6edb0..aab28a9976 100644 --- a/drivers/baseband/fpga_lte_fec/version.map +++ b/drivers/baseband/fpga_lte_fec/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/baseband/la12xx/version.map b/drivers/baseband/la12xx/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/baseband/la12xx/version.map +++ b/drivers/baseband/la12xx/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/baseband/null/version.map b/drivers/baseband/null/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/baseband/null/version.map +++ b/drivers/baseband/null/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/baseband/turbo_sw/version.map b/drivers/baseband/turbo_sw/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/baseband/turbo_sw/version.map +++ b/drivers/baseband/turbo_sw/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/bus/fslmc/version.map b/drivers/bus/fslmc/version.map index 79b29746b6..a25a9e8ca0 100644 --- a/drivers/bus/fslmc/version.map +++ b/drivers/bus/fslmc/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_fslmc_vfio_mem_dmamap; diff --git a/drivers/bus/ifpga/version.map b/drivers/bus/ifpga/version.map index 8ac3a4d258..c0a1eecae8 100644 --- a/drivers/bus/ifpga/version.map +++ b/drivers/bus/ifpga/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_ifpga_driver_register; diff --git a/drivers/bus/pci/version.map b/drivers/bus/pci/version.map index aa56439c2b..3d5c2f3068 100644 --- a/drivers/bus/pci/version.map +++ b/drivers/bus/pci/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pci_dump; diff --git a/drivers/bus/vdev/version.map b/drivers/bus/vdev/version.map index 0d60b7e2bc..7cc3098a50 100644 --- a/drivers/bus/vdev/version.map +++ b/drivers/bus/vdev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_vdev_add_custom_scan; diff --git a/drivers/bus/vmbus/version.map b/drivers/bus/vmbus/version.map index 3cadec7fae..84db31b6e9 100644 --- a/drivers/bus/vmbus/version.map +++ b/drivers/bus/vmbus/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_vmbus_chan_close; diff --git a/drivers/common/qat/version.map b/drivers/common/qat/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/common/qat/version.map +++ b/drivers/common/qat/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/compress/isal/version.map b/drivers/compress/isal/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/compress/isal/version.map +++ b/drivers/compress/isal/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/compress/mlx5/version.map b/drivers/compress/mlx5/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/compress/mlx5/version.map +++ b/drivers/compress/mlx5/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/compress/octeontx/version.map b/drivers/compress/octeontx/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/compress/octeontx/version.map +++ b/drivers/compress/octeontx/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/compress/zlib/version.map b/drivers/compress/zlib/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/compress/zlib/version.map +++ b/drivers/compress/zlib/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/armv8/version.map b/drivers/crypto/armv8/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/armv8/version.map +++ b/drivers/crypto/armv8/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/bcmfs/version.map b/drivers/crypto/bcmfs/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/bcmfs/version.map +++ b/drivers/crypto/bcmfs/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/caam_jr/version.map b/drivers/crypto/caam_jr/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/caam_jr/version.map +++ b/drivers/crypto/caam_jr/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/ccp/version.map b/drivers/crypto/ccp/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/ccp/version.map +++ b/drivers/crypto/ccp/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/ipsec_mb/version.map b/drivers/crypto/ipsec_mb/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/ipsec_mb/version.map +++ b/drivers/crypto/ipsec_mb/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/mlx5/version.map b/drivers/crypto/mlx5/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/mlx5/version.map +++ b/drivers/crypto/mlx5/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/mvsam/version.map b/drivers/crypto/mvsam/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/mvsam/version.map +++ b/drivers/crypto/mvsam/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/nitrox/version.map b/drivers/crypto/nitrox/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/nitrox/version.map +++ b/drivers/crypto/nitrox/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/null/version.map b/drivers/crypto/null/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/null/version.map +++ b/drivers/crypto/null/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/octeontx/version.map b/drivers/crypto/octeontx/version.map index 997a95ea33..cc4b6b0970 100644 --- a/drivers/crypto/octeontx/version.map +++ b/drivers/crypto/octeontx/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/openssl/version.map b/drivers/crypto/openssl/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/openssl/version.map +++ b/drivers/crypto/openssl/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/crypto/scheduler/version.map b/drivers/crypto/scheduler/version.map index 47e4487b75..74491beabb 100644 --- a/drivers/crypto/scheduler/version.map +++ b/drivers/crypto/scheduler/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_cryptodev_scheduler_load_user_scheduler; diff --git a/drivers/crypto/virtio/version.map b/drivers/crypto/virtio/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/crypto/virtio/version.map +++ b/drivers/crypto/virtio/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/cnxk/version.map b/drivers/dma/cnxk/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/cnxk/version.map +++ b/drivers/dma/cnxk/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/dpaa/version.map b/drivers/dma/dpaa/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/dpaa/version.map +++ b/drivers/dma/dpaa/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/dpaa2/version.map b/drivers/dma/dpaa2/version.map index 38d3d225db..0c020e5249 100644 --- a/drivers/dma/dpaa2/version.map +++ b/drivers/dma/dpaa2/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/hisilicon/version.map b/drivers/dma/hisilicon/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/hisilicon/version.map +++ b/drivers/dma/hisilicon/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/idxd/version.map b/drivers/dma/idxd/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/idxd/version.map +++ b/drivers/dma/idxd/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/ioat/version.map b/drivers/dma/ioat/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/ioat/version.map +++ b/drivers/dma/ioat/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/dma/skeleton/version.map b/drivers/dma/skeleton/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/dma/skeleton/version.map +++ b/drivers/dma/skeleton/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/dlb2/version.map b/drivers/event/dlb2/version.map index c727207d1a..1327e3e335 100644 --- a/drivers/event/dlb2/version.map +++ b/drivers/event/dlb2/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/dpaa/version.map b/drivers/event/dpaa/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/dpaa/version.map +++ b/drivers/event/dpaa/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/dpaa2/version.map b/drivers/event/dpaa2/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/dpaa2/version.map +++ b/drivers/event/dpaa2/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/dsw/version.map b/drivers/event/dsw/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/dsw/version.map +++ b/drivers/event/dsw/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/octeontx/version.map b/drivers/event/octeontx/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/octeontx/version.map +++ b/drivers/event/octeontx/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/opdl/version.map b/drivers/event/opdl/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/opdl/version.map +++ b/drivers/event/opdl/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/skeleton/version.map b/drivers/event/skeleton/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/skeleton/version.map +++ b/drivers/event/skeleton/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/event/sw/version.map b/drivers/event/sw/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/event/sw/version.map +++ b/drivers/event/sw/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/gpu/cuda/version.map b/drivers/gpu/cuda/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/gpu/cuda/version.map +++ b/drivers/gpu/cuda/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/mempool/bucket/version.map b/drivers/mempool/bucket/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/mempool/bucket/version.map +++ b/drivers/mempool/bucket/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/mempool/dpaa2/version.map b/drivers/mempool/dpaa2/version.map index cfd4ae617a..0023765843 100644 --- a/drivers/mempool/dpaa2/version.map +++ b/drivers/mempool/dpaa2/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_dpaa2_mbuf_from_buf_addr; diff --git a/drivers/mempool/octeontx/version.map b/drivers/mempool/octeontx/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/mempool/octeontx/version.map +++ b/drivers/mempool/octeontx/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/mempool/ring/version.map b/drivers/mempool/ring/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/mempool/ring/version.map +++ b/drivers/mempool/ring/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/mempool/stack/version.map b/drivers/mempool/stack/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/mempool/stack/version.map +++ b/drivers/mempool/stack/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/af_packet/version.map b/drivers/net/af_packet/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/af_packet/version.map +++ b/drivers/net/af_packet/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/af_xdp/version.map b/drivers/net/af_xdp/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/af_xdp/version.map +++ b/drivers/net/af_xdp/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ark/version.map b/drivers/net/ark/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/ark/version.map +++ b/drivers/net/ark/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/atlantic/version.map b/drivers/net/atlantic/version.map index d36fc61a84..e301b105fe 100644 --- a/drivers/net/atlantic/version.map +++ b/drivers/net/atlantic/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/avp/version.map b/drivers/net/avp/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/avp/version.map +++ b/drivers/net/avp/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/axgbe/version.map b/drivers/net/axgbe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/axgbe/version.map +++ b/drivers/net/axgbe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/bnx2x/version.map b/drivers/net/bnx2x/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/bnx2x/version.map +++ b/drivers/net/bnx2x/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/bnxt/version.map b/drivers/net/bnxt/version.map index 2ba5ec5f6e..075bb37a36 100644 --- a/drivers/net/bnxt/version.map +++ b/drivers/net/bnxt/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_bnxt_get_vf_rx_status; diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map index d7142c4f94..9333923b4e 100644 --- a/drivers/net/bonding/version.map +++ b/drivers/net/bonding/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_eth_bond_8023ad_agg_selection_get; diff --git a/drivers/net/cnxk/version.map b/drivers/net/cnxk/version.map index 0bcc65fe6f..3ef3e76bb0 100644 --- a/drivers/net/cnxk/version.map +++ b/drivers/net/cnxk/version.map @@ -1,15 +1,15 @@ -DPDK_22 { +DPDK_23 { local: *; }; -INTERNAL { - global: - cnxk_nix_inb_mode_set; -}; - EXPERIMENTAL { # added in 22.07 global: rte_pmd_cnxk_hw_sa_read; rte_pmd_cnxk_hw_sa_write; }; + +INTERNAL { + global: + cnxk_nix_inb_mode_set; +}; diff --git a/drivers/net/cxgbe/version.map b/drivers/net/cxgbe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/cxgbe/version.map +++ b/drivers/net/cxgbe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/dpaa/version.map b/drivers/net/dpaa/version.map index 338ea2d8b2..5268d39ef6 100644 --- a/drivers/net/dpaa/version.map +++ b/drivers/net/dpaa/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_dpaa_set_tx_loopback; diff --git a/drivers/net/dpaa2/version.map b/drivers/net/dpaa2/version.map index cc82b8579d..d6535343b1 100644 --- a/drivers/net/dpaa2/version.map +++ b/drivers/net/dpaa2/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_dpaa2_mux_flow_create; diff --git a/drivers/net/e1000/version.map b/drivers/net/e1000/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/e1000/version.map +++ b/drivers/net/e1000/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ena/version.map b/drivers/net/ena/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/ena/version.map +++ b/drivers/net/ena/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/enetc/version.map b/drivers/net/enetc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/enetc/version.map +++ b/drivers/net/enetc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/enetfec/version.map b/drivers/net/enetfec/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/enetfec/version.map +++ b/drivers/net/enetfec/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/enic/version.map b/drivers/net/enic/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/enic/version.map +++ b/drivers/net/enic/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/failsafe/version.map b/drivers/net/failsafe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/failsafe/version.map +++ b/drivers/net/failsafe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/fm10k/version.map b/drivers/net/fm10k/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/fm10k/version.map +++ b/drivers/net/fm10k/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/hinic/version.map b/drivers/net/hinic/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/hinic/version.map +++ b/drivers/net/hinic/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/hns3/version.map b/drivers/net/hns3/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/hns3/version.map +++ b/drivers/net/hns3/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/i40e/version.map b/drivers/net/i40e/version.map index 5dd68158d3..561db50eac 100644 --- a/drivers/net/i40e/version.map +++ b/drivers/net/i40e/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_i40e_add_vf_mac_addr; diff --git a/drivers/net/iavf/version.map b/drivers/net/iavf/version.map index 97f0f87311..4796c2884f 100644 --- a/drivers/net/iavf/version.map +++ b/drivers/net/iavf/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ice/version.map b/drivers/net/ice/version.map index 60a3f17393..e7e8e50557 100644 --- a/drivers/net/ice/version.map +++ b/drivers/net/ice/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/igc/version.map b/drivers/net/igc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/igc/version.map +++ b/drivers/net/igc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ionic/version.map b/drivers/net/ionic/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/ionic/version.map +++ b/drivers/net/ionic/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ipn3ke/version.map b/drivers/net/ipn3ke/version.map index 4fd4e7c09b..4c48499993 100644 --- a/drivers/net/ipn3ke/version.map +++ b/drivers/net/ipn3ke/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ixgbe/version.map b/drivers/net/ixgbe/version.map index f0f29d8749..94693ccc1a 100644 --- a/drivers/net/ixgbe/version.map +++ b/drivers/net/ixgbe/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_ixgbe_bypass_event_show; diff --git a/drivers/net/kni/version.map b/drivers/net/kni/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/kni/version.map +++ b/drivers/net/kni/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/liquidio/version.map b/drivers/net/liquidio/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/liquidio/version.map +++ b/drivers/net/liquidio/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/memif/version.map b/drivers/net/memif/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/memif/version.map +++ b/drivers/net/memif/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/mlx4/version.map b/drivers/net/mlx4/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/mlx4/version.map +++ b/drivers/net/mlx4/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/mlx5/version.map b/drivers/net/mlx5/version.map index c97dfe440a..9942de5079 100644 --- a/drivers/net/mlx5/version.map +++ b/drivers/net/mlx5/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/mvneta/version.map b/drivers/net/mvneta/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/mvneta/version.map +++ b/drivers/net/mvneta/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/mvpp2/version.map b/drivers/net/mvpp2/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/mvpp2/version.map +++ b/drivers/net/mvpp2/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/netvsc/version.map b/drivers/net/netvsc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/netvsc/version.map +++ b/drivers/net/netvsc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/nfb/version.map b/drivers/net/nfb/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/nfb/version.map +++ b/drivers/net/nfb/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/nfp/version.map b/drivers/net/nfp/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/nfp/version.map +++ b/drivers/net/nfp/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ngbe/version.map b/drivers/net/ngbe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/ngbe/version.map +++ b/drivers/net/ngbe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/null/version.map b/drivers/net/null/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/null/version.map +++ b/drivers/net/null/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/octeontx/version.map b/drivers/net/octeontx/version.map index d12156778e..ae37d32d04 100644 --- a/drivers/net/octeontx/version.map +++ b/drivers/net/octeontx/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_octeontx_pchan_map; diff --git a/drivers/net/octeontx_ep/version.map b/drivers/net/octeontx_ep/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/octeontx_ep/version.map +++ b/drivers/net/octeontx_ep/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/pcap/version.map b/drivers/net/pcap/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/pcap/version.map +++ b/drivers/net/pcap/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/pfe/version.map b/drivers/net/pfe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/pfe/version.map +++ b/drivers/net/pfe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/qede/version.map b/drivers/net/qede/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/qede/version.map +++ b/drivers/net/qede/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/ring/version.map b/drivers/net/ring/version.map index e43f5ea908..84e52064e0 100644 --- a/drivers/net/ring/version.map +++ b/drivers/net/ring/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_eth_from_ring; diff --git a/drivers/net/sfc/version.map b/drivers/net/sfc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/sfc/version.map +++ b/drivers/net/sfc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/softnic/version.map b/drivers/net/softnic/version.map index 01e1514276..4dac46ecd5 100644 --- a/drivers/net/softnic/version.map +++ b/drivers/net/softnic/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pmd_softnic_manage; diff --git a/drivers/net/tap/version.map b/drivers/net/tap/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/tap/version.map +++ b/drivers/net/tap/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/thunderx/version.map b/drivers/net/thunderx/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/thunderx/version.map +++ b/drivers/net/thunderx/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/txgbe/version.map b/drivers/net/txgbe/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/txgbe/version.map +++ b/drivers/net/txgbe/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/vdev_netvsc/version.map b/drivers/net/vdev_netvsc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/vdev_netvsc/version.map +++ b/drivers/net/vdev_netvsc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/vhost/version.map b/drivers/net/vhost/version.map index 1aa8abef75..e42c89f1eb 100644 --- a/drivers/net/vhost/version.map +++ b/drivers/net/vhost/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_eth_vhost_get_queue_event; diff --git a/drivers/net/virtio/version.map b/drivers/net/virtio/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/virtio/version.map +++ b/drivers/net/virtio/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/net/vmxnet3/version.map b/drivers/net/vmxnet3/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/net/vmxnet3/version.map +++ b/drivers/net/vmxnet3/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/cnxk_bphy/version.map b/drivers/raw/cnxk_bphy/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/cnxk_bphy/version.map +++ b/drivers/raw/cnxk_bphy/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/cnxk_gpio/version.map b/drivers/raw/cnxk_gpio/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/cnxk_gpio/version.map +++ b/drivers/raw/cnxk_gpio/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/dpaa2_cmdif/version.map b/drivers/raw/dpaa2_cmdif/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/dpaa2_cmdif/version.map +++ b/drivers/raw/dpaa2_cmdif/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/ifpga/version.map b/drivers/raw/ifpga/version.map index ff71a453e2..f5c3959b7f 100644 --- a/drivers/raw/ifpga/version.map +++ b/drivers/raw/ifpga/version.map @@ -1,18 +1,18 @@ -DPDK_22 { +DPDK_23 { global: + rte_pmd_ifpga_cleanup; rte_pmd_ifpga_get_dev_id; - rte_pmd_ifpga_get_rsu_status; - rte_pmd_ifpga_set_rsu_status; - rte_pmd_ifpga_get_property; + rte_pmd_ifpga_get_pci_bus; rte_pmd_ifpga_get_phy_info; - rte_pmd_ifpga_update_flash; - rte_pmd_ifpga_stop_update; + rte_pmd_ifpga_get_property; + rte_pmd_ifpga_get_rsu_status; + rte_pmd_ifpga_partial_reconfigure; rte_pmd_ifpga_reboot_try; rte_pmd_ifpga_reload; - rte_pmd_ifpga_get_pci_bus; - rte_pmd_ifpga_partial_reconfigure; - rte_pmd_ifpga_cleanup; + rte_pmd_ifpga_set_rsu_status; + rte_pmd_ifpga_stop_update; + rte_pmd_ifpga_update_flash; local: *; }; diff --git a/drivers/raw/ioat/version.map b/drivers/raw/ioat/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/ioat/version.map +++ b/drivers/raw/ioat/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/ntb/version.map b/drivers/raw/ntb/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/ntb/version.map +++ b/drivers/raw/ntb/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/raw/skeleton/version.map b/drivers/raw/skeleton/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/raw/skeleton/version.map +++ b/drivers/raw/skeleton/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/regex/cn9k/version.map b/drivers/regex/cn9k/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/regex/cn9k/version.map +++ b/drivers/regex/cn9k/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/regex/mlx5/version.map b/drivers/regex/mlx5/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/regex/mlx5/version.map +++ b/drivers/regex/mlx5/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/vdpa/ifc/version.map b/drivers/vdpa/ifc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/vdpa/ifc/version.map +++ b/drivers/vdpa/ifc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/vdpa/mlx5/version.map b/drivers/vdpa/mlx5/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/vdpa/mlx5/version.map +++ b/drivers/vdpa/mlx5/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/drivers/vdpa/sfc/version.map b/drivers/vdpa/sfc/version.map index c2e0723b4c..78c3585d7c 100644 --- a/drivers/vdpa/sfc/version.map +++ b/drivers/vdpa/sfc/version.map @@ -1,3 +1,3 @@ -DPDK_22 { +DPDK_23 { local: *; }; diff --git a/lib/acl/version.map b/lib/acl/version.map index 2b18c21601..4c15dbbb36 100644 --- a/lib/acl/version.map +++ b/lib/acl/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_acl_add_rules; diff --git a/lib/bbdev/version.map b/lib/bbdev/version.map index cce3f3c8f5..25a0a22bd4 100644 --- a/lib/bbdev/version.map +++ b/lib/bbdev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_bbdev_allocate; diff --git a/lib/bitratestats/version.map b/lib/bitratestats/version.map index 01c61670dd..dc110440e0 100644 --- a/lib/bitratestats/version.map +++ b/lib/bitratestats/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_stats_bitrate_calc; diff --git a/lib/bpf/version.map b/lib/bpf/version.map index 3b953f2f45..04bd657a85 100644 --- a/lib/bpf/version.map +++ b/lib/bpf/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_bpf_destroy; diff --git a/lib/cfgfile/version.map b/lib/cfgfile/version.map index 02cbccb8ab..fdb0f13040 100644 --- a/lib/cfgfile/version.map +++ b/lib/cfgfile/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_cfgfile_add_entry; diff --git a/lib/cmdline/version.map b/lib/cmdline/version.map index fc7fdd6ea4..e3d59aaf8d 100644 --- a/lib/cmdline/version.map +++ b/lib/cmdline/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: cirbuf_add_buf_head; diff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map index dbf1f62199..5aee87c6f7 100644 --- a/lib/cryptodev/version.map +++ b/lib/cryptodev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_crypto_aead_algorithm_strings; diff --git a/lib/distributor/version.map b/lib/distributor/version.map index 4d9ff07373..7a34dfa2f2 100644 --- a/lib/distributor/version.map +++ b/lib/distributor/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_distributor_clear_returns; diff --git a/lib/eal/version.map b/lib/eal/version.map index c2a2cebf69..1f293e768b 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: __rte_panic; diff --git a/lib/efd/version.map b/lib/efd/version.map index 0226285245..67886414ab 100644 --- a/lib/efd/version.map +++ b/lib/efd/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_efd_create; diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index d46f31b63f..03f52fee91 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_eth_add_first_rx_callback; diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index 886e2ec875..d99f996245 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: __rte_eventdev_trace_crypto_adapter_enqueue; diff --git a/lib/fib/version.map b/lib/fib/version.map index b23fa42b9b..a867d2b7d8 100644 --- a/lib/fib/version.map +++ b/lib/fib/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_fib6_add; diff --git a/lib/gro/version.map b/lib/gro/version.map index f8a32e221c..105aa64ca3 100644 --- a/lib/gro/version.map +++ b/lib/gro/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_gro_ctx_create; diff --git a/lib/gso/version.map b/lib/gso/version.map index 73767623b9..f6b552de6d 100644 --- a/lib/gso/version.map +++ b/lib/gso/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_gso_segment; diff --git a/lib/hash/version.map b/lib/hash/version.map index c2e261ed13..bdcebd19c2 100644 --- a/lib/hash/version.map +++ b/lib/hash/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_fbk_hash_create; diff --git a/lib/ip_frag/version.map b/lib/ip_frag/version.map index e537224293..b9c1ccaa1b 100644 --- a/lib/ip_frag/version.map +++ b/lib/ip_frag/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_ip_frag_free_death_row; diff --git a/lib/ipsec/version.map b/lib/ipsec/version.map index 0af27ffd60..f17a49dd26 100644 --- a/lib/ipsec/version.map +++ b/lib/ipsec/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_ipsec_pkt_crypto_group; diff --git a/lib/jobstats/version.map b/lib/jobstats/version.map index 89faa02004..bca7480afb 100644 --- a/lib/jobstats/version.map +++ b/lib/jobstats/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_jobstats_abort; diff --git a/lib/kni/version.map b/lib/kni/version.map index cc7790651a..83bbbe880f 100644 --- a/lib/kni/version.map +++ b/lib/kni/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_kni_alloc; diff --git a/lib/kvargs/version.map b/lib/kvargs/version.map index 0d42cd58a8..781f71cf23 100644 --- a/lib/kvargs/version.map +++ b/lib/kvargs/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_kvargs_count; diff --git a/lib/latencystats/version.map b/lib/latencystats/version.map index be5b014cd7..79b8395f12 100644 --- a/lib/latencystats/version.map +++ b/lib/latencystats/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_latencystats_get; diff --git a/lib/lpm/version.map b/lib/lpm/version.map index 0cdd04822e..e1a7aaedbb 100644 --- a/lib/lpm/version.map +++ b/lib/lpm/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_lpm6_add; diff --git a/lib/mbuf/version.map b/lib/mbuf/version.map index 2745c2b77c..ed486ed14e 100644 --- a/lib/mbuf/version.map +++ b/lib/mbuf/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: __rte_pktmbuf_linearize; diff --git a/lib/member/version.map b/lib/member/version.map index f287aabc91..19469c6aba 100644 --- a/lib/member/version.map +++ b/lib/member/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_member_add; diff --git a/lib/mempool/version.map b/lib/mempool/version.map index 1b7d7c5456..b67d7aace7 100644 --- a/lib/mempool/version.map +++ b/lib/mempool/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_mempool_audit; diff --git a/lib/meter/version.map b/lib/meter/version.map index befa3b7e32..b10b544641 100644 --- a/lib/meter/version.map +++ b/lib/meter/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_meter_srtcm_config; diff --git a/lib/metrics/version.map b/lib/metrics/version.map index b11a9647cd..89ffa9be80 100644 --- a/lib/metrics/version.map +++ b/lib/metrics/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_metrics_deinit; diff --git a/lib/net/version.map b/lib/net/version.map index 4f4330d1c4..e8fe2b7635 100644 --- a/lib/net/version.map +++ b/lib/net/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_eth_random_addr; diff --git a/lib/pci/version.map b/lib/pci/version.map index 3f38303749..e9282ff49c 100644 --- a/lib/pci/version.map +++ b/lib/pci/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pci_addr_cmp; diff --git a/lib/pdump/version.map b/lib/pdump/version.map index ce5502d9cd..25df5a82c2 100644 --- a/lib/pdump/version.map +++ b/lib/pdump/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pdump_disable; diff --git a/lib/pipeline/version.map b/lib/pipeline/version.map index 8312307a7a..1baa74a77a 100644 --- a/lib/pipeline/version.map +++ b/lib/pipeline/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_pipeline_ah_packet_drop; diff --git a/lib/port/version.map b/lib/port/version.map index 73d0825d2e..af6cf696fd 100644 --- a/lib/port/version.map +++ b/lib/port/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_port_ethdev_reader_ops; diff --git a/lib/power/version.map b/lib/power/version.map index a687754f4a..f9b2947adf 100644 --- a/lib/power/version.map +++ b/lib/power/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_power_exit; diff --git a/lib/rawdev/version.map b/lib/rawdev/version.map index 4f56870761..8278aacdea 100644 --- a/lib/rawdev/version.map +++ b/lib/rawdev/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_rawdev_close; diff --git a/lib/rcu/version.map b/lib/rcu/version.map index b63c74f856..cabed64fca 100644 --- a/lib/rcu/version.map +++ b/lib/rcu/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_rcu_log_type; diff --git a/lib/reorder/version.map b/lib/reorder/version.map index 250e6664f5..e114d17730 100644 --- a/lib/reorder/version.map +++ b/lib/reorder/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_reorder_create; diff --git a/lib/rib/version.map b/lib/rib/version.map index f356fe8849..ca2815e44b 100644 --- a/lib/rib/version.map +++ b/lib/rib/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_rib6_create; diff --git a/lib/ring/version.map b/lib/ring/version.map index 3377293ee4..4d7c27a6d9 100644 --- a/lib/ring/version.map +++ b/lib/ring/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_ring_create; diff --git a/lib/sched/version.map b/lib/sched/version.map index 13d7510584..2f64834c8f 100644 --- a/lib/sched/version.map +++ b/lib/sched/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_approx; diff --git a/lib/security/version.map b/lib/security/version.map index edf4887e12..c770b2e8f8 100644 --- a/lib/security/version.map +++ b/lib/security/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_security_capabilities_get; diff --git a/lib/stack/version.map b/lib/stack/version.map index e145e32451..c0250f5cdf 100644 --- a/lib/stack/version.map +++ b/lib/stack/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_stack_create; diff --git a/lib/table/version.map b/lib/table/version.map index 623709f886..e32e15a5fc 100644 --- a/lib/table/version.map +++ b/lib/table/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_table_acl_ops; diff --git a/lib/telemetry/version.map b/lib/telemetry/version.map index 77528bb1fe..9794f9ea20 100644 --- a/lib/telemetry/version.map +++ b/lib/telemetry/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_tel_data_add_array_container; diff --git a/lib/timer/version.map b/lib/timer/version.map index 4b782456da..101f5c18b5 100644 --- a/lib/timer/version.map +++ b/lib/timer/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_timer_alt_dump_stats; diff --git a/lib/vhost/version.map b/lib/vhost/version.map index 9329f88e79..18574346d5 100644 --- a/lib/vhost/version.map +++ b/lib/vhost/version.map @@ -1,4 +1,4 @@ -DPDK_22 { +DPDK_23 { global: rte_vdpa_find_device_by_name; -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v2 2/2] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-08-02 16:45 ` [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 1/2] version: 22.11-rc0 Hanumanth Pothula @ 2022-08-02 16:45 ` Hanumanth Pothula 1 sibling, 0 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-02 16:45 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, Hanumanth Pothula Presently, rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> v2: - taken cared alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..a381945492 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --nic-to-pmd-rx-metadata: let the NIC deliver per-packet Rx metadata to PMD\n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "nic-to-pmd-rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "nic-to-pmd-rx-metadata")) + nic_to_pmd_rx_metadata = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..2b17d4f757 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* Send Rx metadata */ +uint8_t nic_to_pmd_rx_metadata; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..294a9c8cf4 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t nic_to_pmd_rx_metadata; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v2 1/1] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-08-01 13:13 ` Hanumanth Pothula 2022-08-01 19:41 ` Ivan Malov 2022-08-02 16:45 ` [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula @ 2022-08-02 17:51 ` Hanumanth Pothula 2022-08-30 12:36 ` Hanumanth Reddy Pothula ` (2 more replies) 2 siblings, 3 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-08-02 17:51 UTC (permalink / raw) To: Aman Singh, Yuying Zhang; +Cc: dev, Hanumanth Pothula Presently, rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> v2: - taken cared alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..a381945492 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -213,6 +213,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --nic-to-pmd-rx-metadata: let the NIC deliver per-packet Rx metadata to PMD\n"); } #ifdef RTE_LIB_CMDLINE @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "nic-to-pmd-rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "nic-to-pmd-rx-metadata")) + nic_to_pmd_rx_metadata = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..2b17d4f757 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* Send Rx metadata */ +uint8_t nic_to_pmd_rx_metadata; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..294a9c8cf4 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -621,6 +621,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t nic_to_pmd_rx_metadata; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [PATCH v2 1/1] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula @ 2022-08-30 12:36 ` Hanumanth Reddy Pothula 2022-09-01 8:03 ` Singh, Aman Deep 2022-10-06 18:35 ` [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD Hanumanth Pothula 2 siblings, 0 replies; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2022-08-30 12:36 UTC (permalink / raw) To: Andrew Rybchenko, Aman Singh, Yuying Zhang; +Cc: dev Ping > -----Original Message----- > From: Hanumanth Pothula <hpothula@marvell.com> > Sent: Tuesday, August 2, 2022 11:22 PM > To: Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang > <yuying.zhang@intel.com> > Cc: dev@dpdk.org; Hanumanth Reddy Pothula <hpothula@marvell.com> > Subject: [PATCH v2 1/1] app/testpmd: add command line argument 'nic-to-pmd- > rx-metadata' > > Presently, rx metadata is sent to PMD by default, leading to a performance drop > as processing for the same in rx path takes extra cycles. > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > to control passing rx metadata to PMD. By default it’s disabled. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > v2: > - taken cared alignment issues > - renamed command line argument from rx-metadata to nic-to-pmd-rx- > metadata > - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata > --- > app/test-pmd/parameters.c | 4 ++++ > app/test-pmd/testpmd.c | 6 +++++- > app/test-pmd/testpmd.h | 2 ++ > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index > e3c9757f3f..a381945492 100644 > --- a/app/test-pmd/parameters.c > +++ b/app/test-pmd/parameters.c > @@ -213,6 +213,7 @@ usage(char* progname) > printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" > " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" > " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); > + printf(" --nic-to-pmd-rx-metadata: let the NIC deliver per-packet Rx > +metadata to PMD\n"); > } > > #ifdef RTE_LIB_CMDLINE > @@ -710,6 +711,7 @@ launch_args_parse(int argc, char** argv) > { "record-burst-stats", 0, 0, 0 }, > { PARAM_NUM_PROCS, 1, 0, 0 }, > { PARAM_PROC_ID, 1, 0, 0 }, > + { "nic-to-pmd-rx-metadata", 0, 0, 0 }, > { 0, 0, 0, 0 }, > }; > > @@ -1510,6 +1512,8 @@ launch_args_parse(int argc, char** argv) > num_procs = atoi(optarg); > if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) > proc_id = atoi(optarg); > + if (!strcmp(lgopts[opt_idx].name, "nic-to-pmd-rx- > metadata")) > + nic_to_pmd_rx_metadata = 1; > break; > case 'h': > usage(argv[0]); > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > addcbcac85..2b17d4f757 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; > /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; > > +/* Send Rx metadata */ > +uint8_t nic_to_pmd_rx_metadata; > + > /* Pretty printing of ethdev events */ > static const char * const eth_event_desc[] = { > [RTE_ETH_EVENT_UNKNOWN] = "unknown", > @@ -1628,7 +1631,8 @@ init_config_port_offloads(portid_t pid, uint32_t > socket_id) > int ret; > int i; > > - eth_rx_metadata_negotiate_mp(pid); > + if (nic_to_pmd_rx_metadata) > + eth_rx_metadata_negotiate_mp(pid); > > port->dev_conf.txmode = tx_mode; > port->dev_conf.rxmode = rx_mode; > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index > fb2f5195d3..294a9c8cf4 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -621,6 +621,8 @@ extern struct rte_ether_addr > peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; > /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t > burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ > > +extern uint8_t nic_to_pmd_rx_metadata; > + > #ifdef RTE_LIB_GRO > #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define > GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ > -- > 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v2 1/1] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula 2022-08-30 12:36 ` Hanumanth Reddy Pothula @ 2022-09-01 8:03 ` Singh, Aman Deep 2022-10-04 14:48 ` Andrew Rybchenko 2022-10-06 18:35 ` [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD Hanumanth Pothula 2 siblings, 1 reply; 73+ messages in thread From: Singh, Aman Deep @ 2022-09-01 8:03 UTC (permalink / raw) To: Hanumanth Pothula, Yuying Zhang; +Cc: dev On 8/2/2022 11:21 PM, Hanumanth Pothula wrote: > Presently, rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in rx path > takes extra cycles. > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > to control passing rx metadata to PMD. By default it’s disabled. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> Acked-by: Aman Singh <aman.deep.singh@intel.com> > v2: > - taken cared alignment issues > - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata > - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata > --- > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v2 1/1] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' 2022-09-01 8:03 ` Singh, Aman Deep @ 2022-10-04 14:48 ` Andrew Rybchenko 0 siblings, 0 replies; 73+ messages in thread From: Andrew Rybchenko @ 2022-10-04 14:48 UTC (permalink / raw) To: Singh, Aman Deep, Hanumanth Pothula, Yuying Zhang; +Cc: dev On 9/1/22 11:03, Singh, Aman Deep wrote: > > > On 8/2/2022 11:21 PM, Hanumanth Pothula wrote: >> Presently, rx metadata is sent to PMD by default, leading >> to a performance drop as processing for the same in rx path >> takes extra cycles. >> >> Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' >> to control passing rx metadata to PMD. By default it’s disabled. >> >> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > Acked-by: Aman Singh <aman.deep.singh@intel.com> > >> v2: >> - taken cared alignment issues >> - renamed command line argument from rx-metadata to >> nic-to-pmd-rx-metadata >> - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata >> --- >> > Please, update doc/guides/testpmd_app_ug/testpmd_funcs.rst to document the new command-line argument. Also avoid argument name in the summary. It must be human- readable. ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula 2022-08-30 12:36 ` Hanumanth Reddy Pothula 2022-09-01 8:03 ` Singh, Aman Deep @ 2022-10-06 18:35 ` Hanumanth Pothula 2022-10-17 8:32 ` Andrew Rybchenko 2022-12-20 20:02 ` [PATCH v4 1/2] ethdev: control Rx metadata negotiation Hanumanth Pothula 2 siblings, 2 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-10-06 18:35 UTC (permalink / raw) To: Aman Singh, Yuying Zhang Cc: dev, andrew.rybchenko, jerinj, ndabilpuram, Hanumanth Pothula Presently, Rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in rx path takes extra cycles. Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' to control passing rx metadata to PMD. By default it’s disabled. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> v3: - Updated run_app.rst with the new command line argument, nic-to-pmd-rx-metadata. - Updated commit text. v2: - taken cared alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 6 +++++- app/test-pmd/testpmd.h | 2 ++ doc/guides/testpmd_app_ug/run_app.rst | 3 +++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index cfd7cd1e50..2b1314771f 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -202,6 +202,7 @@ usage(char* progname) printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n" " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n" " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n"); + printf(" --nic-to-pmd-rx-metadata: let the NIC deliver per-packet Rx metadata to PMD\n"); } #ifdef RTE_LIB_CMDLINE @@ -695,6 +696,7 @@ launch_args_parse(int argc, char** argv) { "record-burst-stats", 0, 0, 0 }, { PARAM_NUM_PROCS, 1, 0, 0 }, { PARAM_PROC_ID, 1, 0, 0 }, + { "nic-to-pmd-rx-metadata", 0, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1434,6 +1436,8 @@ launch_args_parse(int argc, char** argv) num_procs = atoi(optarg); if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID)) proc_id = atoi(optarg); + if (!strcmp(lgopts[opt_idx].name, "nic-to-pmd-rx-metadata")) + nic_to_pmd_rx_metadata = 1; break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 77741fc41f..938072bb88 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -411,6 +411,9 @@ uint8_t clear_ptypes = true; /* Hairpin ports configuration mode. */ uint16_t hairpin_mode; +/* Send Rx metadata */ +uint8_t nic_to_pmd_rx_metadata; + /* Pretty printing of ethdev events */ static const char * const eth_event_desc[] = { [RTE_ETH_EVENT_UNKNOWN] = "unknown", @@ -1595,7 +1598,8 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); + if (nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pid); port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index ddf5e21849..8522024364 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -615,6 +615,8 @@ extern struct rte_ether_addr peer_eth_addrs[RTE_MAX_ETHPORTS]; extern uint32_t burst_tx_delay_time; /**< Burst tx delay time(us) for mac-retry. */ extern uint32_t burst_tx_retry_num; /**< Burst tx retry number for mac-retry. */ +extern uint8_t nic_to_pmd_rx_metadata; + #ifdef RTE_LIB_GRO #define GRO_DEFAULT_ITEM_NUM_PER_FLOW 32 #define GRO_DEFAULT_FLOW_NUM (RTE_GRO_MAX_BURST_ITEM_NUM / \ diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index 8b41b960c8..24e2e8aa69 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -539,6 +539,9 @@ The command line options are: The default value is 0. Hairpin will use single port mode and implicit Tx flow mode. +* ``--nic_to_pmd_rx_metadata`` + + Enable passing Rx metadata to PMD. Testpmd Multi-Process Command-line Options ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-10-06 18:35 ` [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD Hanumanth Pothula @ 2022-10-17 8:32 ` Andrew Rybchenko 2022-10-27 7:34 ` Thomas Monjalon 2022-12-20 20:02 ` [PATCH v4 1/2] ethdev: control Rx metadata negotiation Hanumanth Pothula 1 sibling, 1 reply; 73+ messages in thread From: Andrew Rybchenko @ 2022-10-17 8:32 UTC (permalink / raw) To: Hanumanth Pothula, Aman Singh, Yuying Zhang; +Cc: dev, jerinj, ndabilpuram On 10/6/22 21:35, Hanumanth Pothula wrote: > Presently, Rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in rx path > takes extra cycles. > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > to control passing rx metadata to PMD. By default it’s disabled. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > v3: > - Updated run_app.rst with the new command line argument, > nic-to-pmd-rx-metadata. > - Updated commit text. > v2: > - taken cared alignment issues > - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata > - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata Applied to dpdk-next-net/main, thanks. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-10-17 8:32 ` Andrew Rybchenko @ 2022-10-27 7:34 ` Thomas Monjalon 2022-10-27 12:54 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2022-10-27 7:34 UTC (permalink / raw) To: Hanumanth Pothula Cc: Aman Singh, Yuying Zhang, dev, jerinj, ndabilpuram, Andrew Rybchenko, rasland, orika, viacheslavo 17/10/2022 10:32, Andrew Rybchenko: > On 10/6/22 21:35, Hanumanth Pothula wrote: > > Presently, Rx metadata is sent to PMD by default, leading > > to a performance drop as processing for the same in rx path > > takes extra cycles. > > > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > > to control passing rx metadata to PMD. By default it’s disabled. > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > Applied to dpdk-next-net/main, thanks. I'm not sure this patch is really acceptable. It is disabling Rx metadata by default just for benchmarking reason because your driver is doing some processing even if metadata is not required. From a user perspective, if a command requesting metadata is entered, it won't work until we enable this new option on startup. It looks terrible. Please tell me I misunderstood something. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-10-27 7:34 ` Thomas Monjalon @ 2022-10-27 12:54 ` Thomas Monjalon 2022-12-02 16:14 ` [EXT] " Hanumanth Reddy Pothula 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2022-10-27 12:54 UTC (permalink / raw) To: Hanumanth Pothula, Andrew Rybchenko Cc: dev, Aman Singh, Yuying Zhang, dev, jerinj, ndabilpuram, rasland, orika, viacheslavo 27/10/2022 09:34, Thomas Monjalon: > 17/10/2022 10:32, Andrew Rybchenko: > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > Presently, Rx metadata is sent to PMD by default, leading > > > to a performance drop as processing for the same in rx path > > > takes extra cycles. > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > > > to control passing rx metadata to PMD. By default it’s disabled. > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > Applied to dpdk-next-net/main, thanks. > > I'm not sure this patch is really acceptable. > It is disabling Rx metadata by default just for benchmarking reason > because your driver is doing some processing even if metadata is not required. > > From a user perspective, if a command requesting metadata is entered, > it won't work until we enable this new option on startup. > It looks terrible. > > Please tell me I misunderstood something. While pulling, I see that the name is not compliant with others. I think it should start with "enable-", use hyphens and be sorted. I'll drop it from the pull for now, we can have it in -rc3. ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-10-27 12:54 ` Thomas Monjalon @ 2022-12-02 16:14 ` Hanumanth Reddy Pothula 2022-12-02 19:41 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2022-12-02 16:14 UTC (permalink / raw) To: Thomas Monjalon, Andrew Rybchenko Cc: dev, Aman Singh, Yuying Zhang, dev, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, rasland, orika, viacheslavo > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Thursday, October 27, 2022 6:25 PM > To: Hanumanth Reddy Pothula <hpothula@marvell.com>; Andrew > Rybchenko <andrew.rybchenko@oktetlabs.ru> > Cc: dev@dpdk.org; Aman Singh <aman.deep.singh@intel.com>; Yuying > Zhang <yuying.zhang@intel.com>; dev@dpdk.org; Jerin Jacob > Kollanukkaran <jerinj@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpuram@marvell.com>; rasland@nvidia.com; orika@nvidia.com; > viacheslavo@nvidia.com > Subject: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx > metadata to PMD > > External Email > > ---------------------------------------------------------------------- > 27/10/2022 09:34, Thomas Monjalon: > > 17/10/2022 10:32, Andrew Rybchenko: > > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > > performance drop as processing for the same in rx path takes extra > > > > cycles. > > > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > > > > to control passing rx metadata to PMD. By default it’s disabled. > > > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > > > Applied to dpdk-next-net/main, thanks. > > > > I'm not sure this patch is really acceptable. > > It is disabling Rx metadata by default just for benchmarking reason > > because your driver is doing some processing even if metadata is not > required. > > > > From a user perspective, if a command requesting metadata is entered, > > it won't work until we enable this new option on startup. > > It looks terrible. > > > > Please tell me I misunderstood something. > > While pulling, I see that the name is not compliant with others. > I think it should start with "enable-", use hyphens and be sorted. > > I'll drop it from the pull for now, we can have it in -rc3. > @Thomas Monjalon I missed your comment, sorry for the delayed response. Sending Rx metadata to PMD is added recently, which breaking our driver performance. Normally any feature added to testpmd will be disabled by default, to make sure it won't affect other code(PMD). Hence adding new testpmd command line argument to disable this feature by default. Presently, below three Rx meta features are sent to PMD by default. /** The NIC is able to deliver flag (if set) with packets to the PMD. */ #define RTE_ETH_RX_METADATA_USER_FLAG RTE_BIT64(0) /** The NIC is able to deliver mark ID with packets to the PMD. */ #define RTE_ETH_RX_METADATA_USER_MARK RTE_BIT64(1) /** The NIC is able to deliver tunnel ID with packets to the PMD. */ #define RTE_ETH_RX_METADATA_TUNNEL_ID RTE_BIT64(2) ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-12-02 16:14 ` [EXT] " Hanumanth Reddy Pothula @ 2022-12-02 19:41 ` Thomas Monjalon 2022-12-05 7:59 ` Hanumanth Reddy Pothula 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2022-12-02 19:41 UTC (permalink / raw) To: Andrew Rybchenko, Hanumanth Reddy Pothula Cc: dev, Aman Singh, Yuying Zhang, dev, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, rasland, orika, viacheslavo 02/12/2022 17:14, Hanumanth Reddy Pothula: > -----Original Message----- > > 27/10/2022 09:34, Thomas Monjalon: > > > 17/10/2022 10:32, Andrew Rybchenko: > > > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > > > performance drop as processing for the same in rx path takes extra > > > > > cycles. > > > > > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx-metadata' > > > > > to control passing rx metadata to PMD. By default it’s disabled. > > > > > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > > > > > Applied to dpdk-next-net/main, thanks. > > > > > > I'm not sure this patch is really acceptable. > > > It is disabling Rx metadata by default just for benchmarking reason > > > because your driver is doing some processing even if metadata is not > > required. > > > > > > From a user perspective, if a command requesting metadata is entered, > > > it won't work until we enable this new option on startup. > > > It looks terrible. > > > > > > Please tell me I misunderstood something. > > > > While pulling, I see that the name is not compliant with others. > > I think it should start with "enable-", use hyphens and be sorted. > > > > I'll drop it from the pull for now, we can have it in -rc3. > > > > @Thomas Monjalon I missed your comment, sorry for the delayed response. > > Sending Rx metadata to PMD is added recently, which breaking our driver performance. > Normally any feature added to testpmd will be disabled by default, to make sure it won't affect other code(PMD). > Hence adding new testpmd command line argument to disable this feature by default. No, disabling by default doesn't mean you should enable with option. It should be enabled if required by a command. ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-12-02 19:41 ` Thomas Monjalon @ 2022-12-05 7:59 ` Hanumanth Reddy Pothula 2022-12-05 8:28 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2022-12-05 7:59 UTC (permalink / raw) To: Thomas Monjalon, Andrew Rybchenko Cc: dev, Aman Singh, Yuying Zhang, dev, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, rasland, orika, viacheslavo > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Saturday, December 3, 2022 1:11 AM > To: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>; Hanumanth > Reddy Pothula <hpothula@marvell.com> > Cc: dev@dpdk.org; Aman Singh <aman.deep.singh@intel.com>; Yuying > Zhang <yuying.zhang@intel.com>; dev@dpdk.org; Jerin Jacob > Kollanukkaran <jerinj@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpuram@marvell.com>; rasland@nvidia.com; orika@nvidia.com; > viacheslavo@nvidia.com > Subject: Re: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx > metadata to PMD > > 02/12/2022 17:14, Hanumanth Reddy Pothula: > > -----Original Message----- > > > 27/10/2022 09:34, Thomas Monjalon: > > > > 17/10/2022 10:32, Andrew Rybchenko: > > > > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > > > > performance drop as processing for the same in rx path takes > > > > > > extra cycles. > > > > > > > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx- > metadata' > > > > > > to control passing rx metadata to PMD. By default it’s disabled. > > > > > > > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > > > > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > > > > > > > Applied to dpdk-next-net/main, thanks. > > > > > > > > I'm not sure this patch is really acceptable. > > > > It is disabling Rx metadata by default just for benchmarking > > > > reason because your driver is doing some processing even if > > > > metadata is not > > > required. > > > > > > > > From a user perspective, if a command requesting metadata is > > > > entered, it won't work until we enable this new option on startup. > > > > It looks terrible. > > > > > > > > Please tell me I misunderstood something. > > > > > > While pulling, I see that the name is not compliant with others. > > > I think it should start with "enable-", use hyphens and be sorted. > > > > > > I'll drop it from the pull for now, we can have it in -rc3. > > > > > > > @Thomas Monjalon I missed your comment, sorry for the delayed > response. > > > > Sending Rx metadata to PMD is added recently, which breaking our driver > performance. > > Normally any feature added to testpmd will be disabled by default, to > make sure it won't affect other code(PMD). > > Hence adding new testpmd command line argument to disable this > feature by default. > > No, disabling by default doesn't mean you should enable with option. > It should be enabled if required by a command. > Yeah, got it, user can enable/disable the feature on the fly without restarting the application(testpmd). Will introduce new command, like below, 'port config rx-nic-to-pmd-metadata on/off' Please let me know your thoughts on this command implementation. If it's fine, will start implementing the command. Suggest if there is any other better way to implement the same. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-12-05 7:59 ` Hanumanth Reddy Pothula @ 2022-12-05 8:28 ` Thomas Monjalon 2022-12-05 9:43 ` Slava Ovsiienko 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2022-12-05 8:28 UTC (permalink / raw) To: Andrew Rybchenko, Hanumanth Reddy Pothula Cc: dev, Aman Singh, Yuying Zhang, dev, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, rasland, orika, viacheslavo 05/12/2022 08:59, Hanumanth Reddy Pothula: > From: Thomas Monjalon <thomas@monjalon.net> > > 02/12/2022 17:14, Hanumanth Reddy Pothula: > > > -----Original Message----- > > > > 27/10/2022 09:34, Thomas Monjalon: > > > > > 17/10/2022 10:32, Andrew Rybchenko: > > > > > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > > > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > > > > > performance drop as processing for the same in rx path takes > > > > > > > extra cycles. > > > > > > > > > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx- > > metadata' > > > > > > > to control passing rx metadata to PMD. By default it’s disabled. > > > > > > > > > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > > > > > > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > > > > > > > > > Applied to dpdk-next-net/main, thanks. > > > > > > > > > > I'm not sure this patch is really acceptable. > > > > > It is disabling Rx metadata by default just for benchmarking > > > > > reason because your driver is doing some processing even if > > > > > metadata is not > > > > required. > > > > > > > > > > From a user perspective, if a command requesting metadata is > > > > > entered, it won't work until we enable this new option on startup. > > > > > It looks terrible. > > > > > > > > > > Please tell me I misunderstood something. > > > > > > > > While pulling, I see that the name is not compliant with others. > > > > I think it should start with "enable-", use hyphens and be sorted. > > > > > > > > I'll drop it from the pull for now, we can have it in -rc3. > > > > > > > > > > @Thomas Monjalon I missed your comment, sorry for the delayed > > response. > > > > > > Sending Rx metadata to PMD is added recently, which breaking our driver > > performance. > > > Normally any feature added to testpmd will be disabled by default, to > > make sure it won't affect other code(PMD). > > > Hence adding new testpmd command line argument to disable this > > feature by default. > > > > No, disabling by default doesn't mean you should enable with option. > > It should be enabled if required by a command. > > > Yeah, got it, user can enable/disable the feature on the fly without restarting the application(testpmd). > Will introduce new command, like below, > 'port config rx-nic-to-pmd-metadata on/off' > > Please let me know your thoughts on this command implementation. > If it's fine, will start implementing the command. Suggest if there is any other better way to implement the same. What about enabling automatically when a flow command requests metadata? ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD 2022-12-05 8:28 ` Thomas Monjalon @ 2022-12-05 9:43 ` Slava Ovsiienko 0 siblings, 0 replies; 73+ messages in thread From: Slava Ovsiienko @ 2022-12-05 9:43 UTC (permalink / raw) To: NBU-Contact-Thomas Monjalon (EXTERNAL), Andrew Rybchenko, Hanumanth Reddy Pothula Cc: dev, Aman Singh, Yuying Zhang, dev, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, Raslan Darawsheh, Ori Kam > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Monday, December 5, 2022 10:29 > To: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>; Hanumanth Reddy > Pothula <hpothula@marvell.com> > Cc: dev@dpdk.org; Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang > <yuying.zhang@intel.com>; dev@dpdk.org; Jerin Jacob Kollanukkaran > <jerinj@marvell.com>; Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>; > Raslan Darawsheh <rasland@nvidia.com>; Ori Kam <orika@nvidia.com>; Slava > Ovsiienko <viacheslavo@nvidia.com> > Subject: Re: [EXT] Re: [PATCH v3 1/1] app/testpmd: control passing Rx > metadata to PMD > > 05/12/2022 08:59, Hanumanth Reddy Pothula: > > From: Thomas Monjalon <thomas@monjalon.net> > > > 02/12/2022 17:14, Hanumanth Reddy Pothula: > > > > -----Original Message----- > > > > > 27/10/2022 09:34, Thomas Monjalon: > > > > > > 17/10/2022 10:32, Andrew Rybchenko: > > > > > > > On 10/6/22 21:35, Hanumanth Pothula wrote: > > > > > > > > Presently, Rx metadata is sent to PMD by default, leading > > > > > > > > to a performance drop as processing for the same in rx > > > > > > > > path takes extra cycles. > > > > > > > > > > > > > > > > Hence, introducing command line argument, 'nic-to-pmd-rx- > > > metadata' > > > > > > > > to control passing rx metadata to PMD. By default it’s > disabled. > > > > > > > > > > > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > > > > > > > > > > > Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > > > > > > > > > > > > > > Applied to dpdk-next-net/main, thanks. > > > > > > > > > > > > I'm not sure this patch is really acceptable. > > > > > > It is disabling Rx metadata by default just for benchmarking > > > > > > reason because your driver is doing some processing even if > > > > > > metadata is not > > > > > required. > > > > > > > > > > > > From a user perspective, if a command requesting metadata is > > > > > > entered, it won't work until we enable this new option on startup. > > > > > > It looks terrible. > > > > > > > > > > > > Please tell me I misunderstood something. > > > > > > > > > > While pulling, I see that the name is not compliant with others. > > > > > I think it should start with "enable-", use hyphens and be sorted. > > > > > > > > > > I'll drop it from the pull for now, we can have it in -rc3. > > > > > > > > > > > > > @Thomas Monjalon I missed your comment, sorry for the delayed > > > response. > > > > > > > > Sending Rx metadata to PMD is added recently, which breaking our > > > > driver > > > performance. > > > > Normally any feature added to testpmd will be disabled by default, > > > > to > > > make sure it won't affect other code(PMD). > > > > Hence adding new testpmd command line argument to disable this > > > feature by default. > > > > > > No, disabling by default doesn't mean you should enable with option. > > > It should be enabled if required by a command. > > > > > Yeah, got it, user can enable/disable the feature on the fly without > restarting the application(testpmd). > > Will introduce new command, like below, > > 'port config rx-nic-to-pmd-metadata on/off' > > > > Please let me know your thoughts on this command implementation. > > If it's fine, will start implementing the command. Suggest if there is any > other better way to implement the same. > > What about enabling automatically when a flow command requests metadata? > Another option - enable on defining metadata dynamic field/flag in mbuf. mlx5 PMD, for example follows this approach. Do we need disabling this in real application? If application is designed to use metadata it is unlikely it stops using these ones. With best regards, Slava ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v4 1/2] ethdev: control Rx metadata negotiation 2022-10-06 18:35 ` [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD Hanumanth Pothula 2022-10-17 8:32 ` Andrew Rybchenko @ 2022-12-20 20:02 ` Hanumanth Pothula 2022-12-20 20:02 ` [PATCH v4 2/2] app/testpmd: add command to process " Hanumanth Pothula 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula 1 sibling, 2 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-12-20 20:02 UTC (permalink / raw) To: Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko Cc: dev, viacheslavo, jerinj, ndabilpuram, hpothula Presently, Rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in Rx path takes extra cycles. Hence, adding a new eth port configuration filed, 'nic_to_pmd_rx_metadata', to control NIC to PMD Rx metadata negotiation. Also, reset dev_configured flag as part of device reset, this helps in reconfiguring porting cleanly. Rx metadata negotiation, rte_eth_rx_metadata_negotiate(), is allowed only when dev_configured flag is reset. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- v4: - As per spec rte_eth_rx_metadata_negotiate() is processed only when dev_configured is set. Hence can't enable automatically when a flow command requests metadata. - Add new testpmd command to allow NIC to PMD Rx metadata negotiation. v3: - Updated run_app.rst with the new command line argument, nic-to-pmd-rx-metadata. - Updated commit text. v2: - taken cared alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- lib/ethdev/rte_ethdev.c | 2 ++ lib/ethdev/rte_ethdev.h | 1 + 2 files changed, 3 insertions(+) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 5d5e18db1e..18c59044bc 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -1629,6 +1629,8 @@ rte_eth_dev_reset(uint16_t port_id) port_id, rte_strerror(-ret)); } ret = dev->dev_ops->dev_reset(dev); + if (!ret) + dev->data->dev_configured = 0; return eth_err(port_id, ret); } diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index c129ca1eaf..f1160a8aca 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -1487,6 +1487,7 @@ struct rte_eth_conf { is needed,and the variable must be set RTE_ETH_DCB_PFC_SUPPORT. */ uint32_t dcb_capability_en; struct rte_eth_intr_conf intr_conf; /**< Interrupt mode configuration. */ + uint8_t nic_to_pmd_rx_metadata; /**< send rx metadata to PMD. */ }; /** -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v4 2/2] app/testpmd: add command to process Rx metadata negotiation 2022-12-20 20:02 ` [PATCH v4 1/2] ethdev: control Rx metadata negotiation Hanumanth Pothula @ 2022-12-20 20:02 ` Hanumanth Pothula 2022-12-20 21:23 ` Stephen Hemminger 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula 1 sibling, 1 reply; 73+ messages in thread From: Hanumanth Pothula @ 2022-12-20 20:02 UTC (permalink / raw) To: Aman Singh, Yuying Zhang Cc: dev, andrew.rybchenko, viacheslavo, jerinj, ndabilpuram, hpothula Presently, Rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in Rx path takes extra cycles. Hence, add new testpmd command, 'enable port <port_id> nic_to_pmd_rx_metadata' This command helps in sending Rx metadata to PMD and thereby Rx metadata flow command requests are processed. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- app/test-pmd/cmdline.c | 58 +++++++++++++++++++++ app/test-pmd/config.c | 9 ++++ app/test-pmd/testpmd.c | 5 +- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++ 4 files changed, 76 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index b32dc8bfd4..56946b2520 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -610,6 +610,9 @@ static void cmd_help_long_parsed(void *parsed_result, "set port (port_id) fec_mode auto|off|rs|baser\n" " set fec mode for a specific port\n\n" + "enable port <port_id> nic_to_pmd_rx_metadata" + " Allow nic to pmd Rx metadata negotiation\n\n" + , list_pkt_forwarding_modes() ); } @@ -12621,6 +12624,60 @@ static cmdline_parse_inst_t cmd_show_port_flow_transfer_proxy = { } }; +/* Allow negotiating Rx metadata between NIC and PMD */ +struct cmd_config_port_rx_metadata { + cmdline_fixed_string_t enable; + cmdline_fixed_string_t port; + uint16_t port_id; + cmdline_fixed_string_t nic_to_pmd_rx_metadata; +}; + +static void +cmd_config_port_rx_metadata_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_config_port_rx_metadata *res = parsed_result; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + if (!port_is_stopped(res->port_id)) { + fprintf(stderr, "Please stop port %u first\n", res->port_id); + return; + } + + ports[res->port_id].dev_conf.nic_to_pmd_rx_metadata = 1; + + reset_port(res->port_id); +} + + +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_enable = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, enable, + "enable"); +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_port = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, port, + "port"); +static cmdline_parse_token_num_t cmd_config_port_rx_metadata_id = + TOKEN_NUM_INITIALIZER(struct cmd_config_port_rx_metadata, port_id, + RTE_UINT16); +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_nic_to_pmd_rx_metadata = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, nic_to_pmd_rx_metadata, + "nic_to_pmd_rx_metadata"); + +static cmdline_parse_inst_t cmd_config_port_rx_metadata_parse = { + .f = cmd_config_port_rx_metadata_parsed, + .data = NULL, + .help_str = "enable port <port_id> nic_to_pmd_rx_metadata", + .tokens = { + (void *)&cmd_config_port_rx_metadata_enable, + (void *)&cmd_config_port_rx_metadata_port, + (void *)&cmd_config_port_rx_metadata_id, + (void *)&cmd_config_port_rx_metadata_nic_to_pmd_rx_metadata, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -12851,6 +12908,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = { (cmdline_parse_inst_t *)&cmd_show_capability, (cmdline_parse_inst_t *)&cmd_set_flex_is_pattern, (cmdline_parse_inst_t *)&cmd_set_flex_spec_pattern, + (cmdline_parse_inst_t *)&cmd_config_port_rx_metadata_parse, NULL, }; diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index acccb6b035..47fce3accb 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3249,6 +3249,15 @@ port_flow_create(portid_t port_id, } id = port->flow_list->id + 1; } + + if (port->dev_conf.nic_to_pmd_rx_metadata == 0 && + (actions->type == RTE_FLOW_ACTION_TYPE_MARK || + actions->type == RTE_FLOW_ACTION_TYPE_FLAG)) { + fprintf(stderr, + "rx metadata is not negotiated with PMD\n"); + return -EINVAL; + } + if (tunnel_ops->enabled) { pft = port_flow_tunnel_offload_cmd_prep(port_id, pattern, actions, tunnel_ops); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 134d79a555..22e5e08fc1 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1604,8 +1604,6 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); - port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; @@ -2946,6 +2944,9 @@ start_port(portid_t pid) port->update_conf = 0; } + if (port->dev_conf.nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pi); + /* configure port */ diag = eth_dev_configure_mp(pi, nb_rxq + nb_hairpinq, nb_txq + nb_hairpinq, diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 0037506a79..024dbf6012 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1558,6 +1558,12 @@ Enable or disable a per port Rx offloading on all Rx queues of a port:: This command should be run when the port is stopped, or else it will fail. +Enable Rx metadata negotiation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enable NIC to PMD Rx metadata negotiation:: + testpmd> enable port <port_id> nic_to_pmd_rx_metadata + config per queue Rx offloading ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 2/2] app/testpmd: add command to process Rx metadata negotiation 2022-12-20 20:02 ` [PATCH v4 2/2] app/testpmd: add command to process " Hanumanth Pothula @ 2022-12-20 21:23 ` Stephen Hemminger 0 siblings, 0 replies; 73+ messages in thread From: Stephen Hemminger @ 2022-12-20 21:23 UTC (permalink / raw) To: Hanumanth Pothula Cc: Aman Singh, Yuying Zhang, dev, andrew.rybchenko, viacheslavo, jerinj, ndabilpuram On Wed, 21 Dec 2022 01:32:50 +0530 Hanumanth Pothula <hpothula@marvell.com> wrote: > @@ -12851,6 +12908,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = { > (cmdline_parse_inst_t *)&cmd_show_capability, > (cmdline_parse_inst_t *)&cmd_set_flex_is_pattern, > (cmdline_parse_inst_t *)&cmd_set_flex_spec_pattern, > + (cmdline_parse_inst_t *)&cmd_config_port_rx_metadata_parse, > NULL, > }; > Why are all these casts necessary? the function should match the prototype. ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset 2022-12-20 20:02 ` [PATCH v4 1/2] ethdev: control Rx metadata negotiation Hanumanth Pothula 2022-12-20 20:02 ` [PATCH v4 2/2] app/testpmd: add command to process " Hanumanth Pothula @ 2022-12-21 2:07 ` Hanumanth Pothula 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula ` (2 more replies) 1 sibling, 3 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-12-21 2:07 UTC (permalink / raw) To: Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko Cc: dev, viacheslavo, jerinj, ndabilpuram, hpothula Presently, on device reset, ethdev configuration state, dev_configured, is not reset. On device reset, reset ethdev configuration state to make sure device reconfiguration happens cleanly. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- v5: - Move nic-to-pmd-rx-metadata declaration to struct rte_port. v4: - As per spec rte_eth_rx_metadata_negotiate() is processed only when dev_configured is set. Hence can't enable automatically when a flow command requests metadata. - Add new testpmd command to allow NIC to PMD Rx metadata negotiation. v3: - Updated run_app.rst with the new command line argument, nic-to-pmd-rx-metadata. - Updated commit text. v2: - taken cared alignment issues - renamed command line argument from rx-metadata to nic-to-pmd-rx-metadata - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata --- lib/ethdev/rte_ethdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 5d5e18db1e..18c59044bc 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -1629,6 +1629,8 @@ rte_eth_dev_reset(uint16_t port_id) port_id, rte_strerror(-ret)); } ret = dev->dev_ops->dev_reset(dev); + if (!ret) + dev->data->dev_configured = 0; return eth_err(port_id, ret); } -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula @ 2022-12-21 2:07 ` Hanumanth Pothula 2023-01-18 10:32 ` Thomas Monjalon 2023-01-24 18:04 ` Ferruh Yigit 2023-01-16 10:43 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Reddy Pothula 2023-01-18 10:29 ` Thomas Monjalon 2 siblings, 2 replies; 73+ messages in thread From: Hanumanth Pothula @ 2022-12-21 2:07 UTC (permalink / raw) To: Aman Singh, Yuying Zhang Cc: dev, andrew.rybchenko, viacheslavo, jerinj, ndabilpuram, hpothula Presently, Rx metadata is sent to PMD by default, leading to a performance drop as processing for the same in Rx path takes extra cycles. Hence, add new testpmd command, 'enable port <port_id> nic_to_pmd_rx_metadata' This command helps in sending Rx metadata to PMD and thereby Rx metadata flow command requests are processed. Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> --- app/test-pmd/cmdline.c | 58 +++++++++++++++++++++ app/test-pmd/config.c | 9 ++++ app/test-pmd/testpmd.c | 5 +- app/test-pmd/testpmd.h | 1 + doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++ 5 files changed, 77 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index b32dc8bfd4..e3abc9e830 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -610,6 +610,9 @@ static void cmd_help_long_parsed(void *parsed_result, "set port (port_id) fec_mode auto|off|rs|baser\n" " set fec mode for a specific port\n\n" + "enable port <port_id> nic_to_pmd_rx_metadata" + " Allow nic to pmd Rx metadata negotiation\n\n" + , list_pkt_forwarding_modes() ); } @@ -12621,6 +12624,60 @@ static cmdline_parse_inst_t cmd_show_port_flow_transfer_proxy = { } }; +/* Allow negotiating Rx metadata between NIC and PMD */ +struct cmd_config_port_rx_metadata { + cmdline_fixed_string_t enable; + cmdline_fixed_string_t port; + uint16_t port_id; + cmdline_fixed_string_t nic_to_pmd_rx_metadata; +}; + +static void +cmd_config_port_rx_metadata_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_config_port_rx_metadata *res = parsed_result; + + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + if (!port_is_stopped(res->port_id)) { + fprintf(stderr, "Please stop port %u first\n", res->port_id); + return; + } + + ports[res->port_id].nic_to_pmd_rx_metadata = 1; + + reset_port(res->port_id); +} + + +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_enable = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, enable, + "enable"); +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_port = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, port, + "port"); +static cmdline_parse_token_num_t cmd_config_port_rx_metadata_id = + TOKEN_NUM_INITIALIZER(struct cmd_config_port_rx_metadata, port_id, + RTE_UINT16); +static cmdline_parse_token_string_t cmd_config_port_rx_metadata_nic_to_pmd_rx_metadata = + TOKEN_STRING_INITIALIZER(struct cmd_config_port_rx_metadata, nic_to_pmd_rx_metadata, + "nic_to_pmd_rx_metadata"); + +static cmdline_parse_inst_t cmd_config_port_rx_metadata_parse = { + .f = cmd_config_port_rx_metadata_parsed, + .data = NULL, + .help_str = "enable port <port_id> nic_to_pmd_rx_metadata", + .tokens = { + (void *)&cmd_config_port_rx_metadata_enable, + (void *)&cmd_config_port_rx_metadata_port, + (void *)&cmd_config_port_rx_metadata_id, + (void *)&cmd_config_port_rx_metadata_nic_to_pmd_rx_metadata, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -12851,6 +12908,7 @@ static cmdline_parse_ctx_t builtin_ctx[] = { (cmdline_parse_inst_t *)&cmd_show_capability, (cmdline_parse_inst_t *)&cmd_set_flex_is_pattern, (cmdline_parse_inst_t *)&cmd_set_flex_spec_pattern, + (cmdline_parse_inst_t *)&cmd_config_port_rx_metadata_parse, NULL, }; diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index acccb6b035..60df47407e 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3249,6 +3249,15 @@ port_flow_create(portid_t port_id, } id = port->flow_list->id + 1; } + + if (port->nic_to_pmd_rx_metadata == 0 && + (actions->type == RTE_FLOW_ACTION_TYPE_MARK || + actions->type == RTE_FLOW_ACTION_TYPE_FLAG)) { + fprintf(stderr, + "rx metadata is not negotiated with PMD\n"); + return -EINVAL; + } + if (tunnel_ops->enabled) { pft = port_flow_tunnel_offload_cmd_prep(port_id, pattern, actions, tunnel_ops); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 134d79a555..66d5a2634a 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1604,8 +1604,6 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id) int ret; int i; - eth_rx_metadata_negotiate_mp(pid); - port->dev_conf.txmode = tx_mode; port->dev_conf.rxmode = rx_mode; @@ -2946,6 +2944,9 @@ start_port(portid_t pid) port->update_conf = 0; } + if (port->nic_to_pmd_rx_metadata) + eth_rx_metadata_negotiate_mp(pi); + /* configure port */ diag = eth_dev_configure_mp(pi, nb_rxq + nb_hairpinq, nb_txq + nb_hairpinq, diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 7d24d25970..f44756173b 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -309,6 +309,7 @@ struct rte_port { uint8_t need_setup; /**< port just attached */ uint8_t need_reconfig; /**< need reconfiguring port or not */ uint8_t need_reconfig_queues; /**< need reconfiguring queues or not */ + uint8_t nic_to_pmd_rx_metadata; /**< send rx metadata to PMD. */ uint8_t rss_flag; /**< enable rss or not */ uint8_t dcb_flag; /**< enable dcb */ uint16_t nb_rx_desc[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue rx desc number */ diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 0037506a79..024dbf6012 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -1558,6 +1558,12 @@ Enable or disable a per port Rx offloading on all Rx queues of a port:: This command should be run when the port is stopped, or else it will fail. +Enable Rx metadata negotiation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enable NIC to PMD Rx metadata negotiation:: + testpmd> enable port <port_id> nic_to_pmd_rx_metadata + config per queue Rx offloading ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula @ 2023-01-18 10:32 ` Thomas Monjalon 2023-01-19 10:33 ` [EXT] " Hanumanth Reddy Pothula 2023-01-24 18:04 ` Ferruh Yigit 1 sibling, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-18 10:32 UTC (permalink / raw) To: Hanumanth Pothula Cc: Aman Singh, Yuying Zhang, dev, andrew.rybchenko, viacheslavo, jerinj, ndabilpuram, david.marchand 21/12/2022 03:07, Hanumanth Pothula: > Presently, Rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in Rx path > takes extra cycles. > > Hence, add new testpmd command, > 'enable port <port_id> nic_to_pmd_rx_metadata' > > This command helps in sending Rx metadata to PMD and thereby > Rx metadata flow command requests are processed. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> As said in previous versions, please don't add such option in testpmd. The problem is somewhere else, probably in your driver. You should make sure your driver is not sending metadata if not needed. By the way you didn't reply to the last comments on v3 in December. ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-18 10:32 ` Thomas Monjalon @ 2023-01-19 10:33 ` Hanumanth Reddy Pothula 2023-01-25 12:51 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2023-01-19 10:33 UTC (permalink / raw) To: Thomas Monjalon Cc: Aman Singh, Yuying Zhang, dev, andrew.rybchenko, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, david.marchand > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Wednesday, January 18, 2023 4:03 PM > To: Hanumanth Reddy Pothula <hpothula@marvell.com> > Cc: Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang > <yuying.zhang@intel.com>; dev@dpdk.org; > andrew.rybchenko@oktetlabs.ru; viacheslavo@nvidia.com; Jerin Jacob > Kollanukkaran <jerinj@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpuram@marvell.com>; david.marchand@redhat.com > Subject: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process > Rx metadata negotiation > > External Email > > ---------------------------------------------------------------------- > 21/12/2022 03:07, Hanumanth Pothula: > > Presently, Rx metadata is sent to PMD by default, leading to a > > performance drop as processing for the same in Rx path takes extra > > cycles. > > > > Hence, add new testpmd command, > > 'enable port <port_id> nic_to_pmd_rx_metadata' > > > > This command helps in sending Rx metadata to PMD and thereby Rx > > metadata flow command requests are processed. > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > As said in previous versions, please don't add such option in testpmd. > The problem is somewhere else, probably in your driver. > You should make sure your driver is not sending metadata if not needed. > By the way you didn't reply to the last comments on v3 in December. > > I added following comment on V4, - As per spec rte_eth_rx_metadata_negotiate() is processed only when dev_configured is set. Hence can't enable(Rx metadata negotiation) automatically when a flow command requests metadata. - Add new testpmd command to allow NIC to PMD Rx metadata negotiation. As we can't enable Rx metadata negotiation on fly, introduced new testpmd command to enable Rx metadata negotiation by resetting the ports. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-19 10:33 ` [EXT] " Hanumanth Reddy Pothula @ 2023-01-25 12:51 ` Thomas Monjalon 0 siblings, 0 replies; 73+ messages in thread From: Thomas Monjalon @ 2023-01-25 12:51 UTC (permalink / raw) To: Hanumanth Reddy Pothula Cc: Aman Singh, Yuying Zhang, dev, andrew.rybchenko, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, david.marchand 19/01/2023 11:33, Hanumanth Reddy Pothula: > From: Thomas Monjalon <thomas@monjalon.net> > > 21/12/2022 03:07, Hanumanth Pothula: > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > performance drop as processing for the same in Rx path takes extra > > > cycles. > > > > > > Hence, add new testpmd command, > > > 'enable port <port_id> nic_to_pmd_rx_metadata' > > > > > > This command helps in sending Rx metadata to PMD and thereby Rx > > > metadata flow command requests are processed. > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > As said in previous versions, please don't add such option in testpmd. > > The problem is somewhere else, probably in your driver. > > You should make sure your driver is not sending metadata if not needed. > > By the way you didn't reply to the last comments on v3 in December. > > > I added following comment on V4, > - As per spec rte_eth_rx_metadata_negotiate() is processed only > when dev_configured is set. Not exactly. It is said " Invoke this API before the first rte_eth_dev_configure() invocation to let the PMD make preparations that are inconvenient to do later. " > Hence can't enable(Rx metadata negotiation) > automatically when a flow command requests metadata. This sentence does not make any sense. First you negotiate to prepare the feature. Later you enable per flow. > - Add new testpmd command to allow NIC to PMD Rx metadata negotiation. > > As we can't enable Rx metadata negotiation on fly, > introduced new testpmd command to enable Rx metadata negotiation > by resetting the ports. You can enable on the fly. Fix your driver. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula 2023-01-18 10:32 ` Thomas Monjalon @ 2023-01-24 18:04 ` Ferruh Yigit 2023-01-25 9:30 ` [EXT] " Hanumanth Reddy Pothula 1 sibling, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-01-24 18:04 UTC (permalink / raw) To: Hanumanth Pothula, Aman Singh, Yuying Zhang Cc: dev, andrew.rybchenko, viacheslavo, jerinj, ndabilpuram On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > Presently, Rx metadata is sent to PMD by default, leading > to a performance drop as processing for the same in Rx path > takes extra cycles. > > Hence, add new testpmd command, > 'enable port <port_id> nic_to_pmd_rx_metadata' > > This command helps in sending Rx metadata to PMD and thereby > Rx metadata flow command requests are processed. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> Hi Hanumanth, I agree with Thomas for the patch. 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be enabled, but at this stage if there is no flow rule for Rx metadata why it is consuming extra cycles? Can you update driver code to process Rx metadata when it is enabled by application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least one flow rule for it? ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-24 18:04 ` Ferruh Yigit @ 2023-01-25 9:30 ` Hanumanth Reddy Pothula 2023-01-25 12:55 ` Thomas Monjalon ` (2 more replies) 0 siblings, 3 replies; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2023-01-25 9:30 UTC (permalink / raw) To: Ferruh Yigit, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko Cc: dev, andrew.rybchenko, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram ++ Ivan Malov and Andrew Rybchenko > -----Original Message----- > From: Ferruh Yigit <ferruh.yigit@amd.com> > Sent: Tuesday, January 24, 2023 11:34 PM > To: Hanumanth Reddy Pothula <hpothula@marvell.com>; Aman Singh > <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com> > Cc: dev@dpdk.org; andrew.rybchenko@oktetlabs.ru; > viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; > Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> > Subject: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process > Rx metadata negotiation > > External Email > > ---------------------------------------------------------------------- > On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > > Presently, Rx metadata is sent to PMD by default, leading to a > > performance drop as processing for the same in Rx path takes extra > > cycles. > > > > Hence, add new testpmd command, > > 'enable port <port_id> nic_to_pmd_rx_metadata' > > > > This command helps in sending Rx metadata to PMD and thereby Rx > > metadata flow command requests are processed. > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > Hi Hanumanth, > > I agree with Thomas for the patch. > > 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > enabled, but at this stage if there is no flow rule for Rx metadata why it is > consuming extra cycles? > > Can you update driver code to process Rx metadata when it is enabled by > application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > one flow rule for it? #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. We thought it was added so that when that metadata is not needed, application need not call this thereby saving cycles/bandwidth. #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have an option to enable it. In this case, testpmd is by default calling this negotiation. We can update the driver if the purpose of this API is clear. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 9:30 ` [EXT] " Hanumanth Reddy Pothula @ 2023-01-25 12:55 ` Thomas Monjalon 2023-01-25 13:55 ` Ferruh Yigit 2023-01-25 13:17 ` Ferruh Yigit 2023-01-25 13:21 ` Ferruh Yigit 2 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-25 12:55 UTC (permalink / raw) To: Ferruh Yigit, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula Cc: dev, andrew.rybchenko, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, david.marchand 25/01/2023 10:30, Hanumanth Reddy Pothula: > ++ Ivan Malov and Andrew Rybchenko > > From: Ferruh Yigit <ferruh.yigit@amd.com> > > On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > > > Presently, Rx metadata is sent to PMD by default, leading to a > > > performance drop as processing for the same in Rx path takes extra > > > cycles. > > > > > > Hence, add new testpmd command, > > > 'enable port <port_id> nic_to_pmd_rx_metadata' > > > > > > This command helps in sending Rx metadata to PMD and thereby Rx > > > metadata flow command requests are processed. > > > > > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > Hi Hanumanth, > > > > I agree with Thomas for the patch. > > > > 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > > enabled, but at this stage if there is no flow rule for Rx metadata why it is > > consuming extra cycles? > > > > Can you update driver code to process Rx metadata when it is enabled by > > application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > > one flow rule for it? > > #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. > We thought it was added so that when that metadata is not needed, application need not call this > thereby saving cycles/bandwidth. testpmd is for testing all features. That's why all is negotiated. Cycles should be saved if you don't enable it until a flow rule requires it. > #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is > configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. It is just a configuration negotiation specific to metadata. > #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have > an option to enable it. In this case, testpmd is by default calling this negotiation. Negotiating is not enabling. > We can update the driver if the purpose of this API is clear. Please do. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 12:55 ` Thomas Monjalon @ 2023-01-25 13:55 ` Ferruh Yigit 2023-01-25 13:59 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-01-25 13:55 UTC (permalink / raw) To: Thomas Monjalon, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula Cc: viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, david.marchand On 1/25/2023 12:55 PM, Thomas Monjalon wrote: > 25/01/2023 10:30, Hanumanth Reddy Pothula: >> ++ Ivan Malov and Andrew Rybchenko >> >> From: Ferruh Yigit <ferruh.yigit@amd.com> >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: >>>> Presently, Rx metadata is sent to PMD by default, leading to a >>>> performance drop as processing for the same in Rx path takes extra >>>> cycles. >>>> >>>> Hence, add new testpmd command, >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' >>>> >>>> This command helps in sending Rx metadata to PMD and thereby Rx >>>> metadata flow command requests are processed. >>>> >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> >>> >>> Hi Hanumanth, >>> >>> I agree with Thomas for the patch. >>> >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is >>> consuming extra cycles? >>> >>> Can you update driver code to process Rx metadata when it is enabled by >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least >>> one flow rule for it? >> >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. >> We thought it was added so that when that metadata is not needed, application need not call this >> thereby saving cycles/bandwidth. > > testpmd is for testing all features. That's why all is negotiated. > Cycles should be saved if you don't enable it until a flow rule requires it. > Hi Thomas, Not just for saving cycles, but from testing perspective too, do you think does it work if a way to disable these Rx metadata added by keeping default behavior as it is? And new command can be in a consistent command syntax like: "port config <port_id> ..." >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is >> configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. > > It is just a configuration negotiation specific to metadata. > >> #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have >> an option to enable it. In this case, testpmd is by default calling this negotiation. > > Negotiating is not enabling. > >> We can update the driver if the purpose of this API is clear. > > Please do. > Is following understanding correct? API Flow Rule Result ----- ------------ -------- Enable No Rule Feature Disabled Enable Rule exist Feature Enabled Disable X Feature Disabled ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 13:55 ` Ferruh Yigit @ 2023-01-25 13:59 ` Thomas Monjalon 2023-01-25 14:42 ` Nithin Kumar Dabilpuram 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-25 13:59 UTC (permalink / raw) To: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit Cc: viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram, david.marchand 25/01/2023 14:55, Ferruh Yigit: > On 1/25/2023 12:55 PM, Thomas Monjalon wrote: > > 25/01/2023 10:30, Hanumanth Reddy Pothula: > >> ++ Ivan Malov and Andrew Rybchenko > >> > >> From: Ferruh Yigit <ferruh.yigit@amd.com> > >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > >>>> Presently, Rx metadata is sent to PMD by default, leading to a > >>>> performance drop as processing for the same in Rx path takes extra > >>>> cycles. > >>>> > >>>> Hence, add new testpmd command, > >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' > >>>> > >>>> This command helps in sending Rx metadata to PMD and thereby Rx > >>>> metadata flow command requests are processed. > >>>> > >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > >>> > >>> Hi Hanumanth, > >>> > >>> I agree with Thomas for the patch. > >>> > >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is > >>> consuming extra cycles? > >>> > >>> Can you update driver code to process Rx metadata when it is enabled by > >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > >>> one flow rule for it? > >> > >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. > >> We thought it was added so that when that metadata is not needed, application need not call this > >> thereby saving cycles/bandwidth. > > > > testpmd is for testing all features. That's why all is negotiated. > > Cycles should be saved if you don't enable it until a flow rule requires it. > > > > Hi Thomas, > > Not just for saving cycles, but from testing perspective too, do you > think does it work if a way to disable these Rx metadata added by > keeping default behavior as it is? > > And new command can be in a consistent command syntax like: > "port config <port_id> ..." Yes I agree it would be good to have a way to test different values. And it would allow to completely disable metadata I suppose. Note: I don't understand why we don't have RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META negotiated in this function. Probably something to add. > >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is > >> configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. > > > > It is just a configuration negotiation specific to metadata. > > > >> #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have > >> an option to enable it. In this case, testpmd is by default calling this negotiation. > > > > Negotiating is not enabling. > > > >> We can update the driver if the purpose of this API is clear. > > > > Please do. > > Is following understanding correct? > > API Flow Rule Result > ----- ------------ -------- > Enable No Rule Feature Disabled > Enable Rule exist Feature Enabled > Disable X Feature Disabled In the API column, you should say "negotiated" instead of "Enable". ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 13:59 ` Thomas Monjalon @ 2023-01-25 14:42 ` Nithin Kumar Dabilpuram 2023-01-26 11:03 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Nithin Kumar Dabilpuram @ 2023-01-25 14:42 UTC (permalink / raw) To: Thomas Monjalon, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit Cc: viacheslavo, Jerin Jacob Kollanukkaran, david.marchand > >Will it work to enable them all by default and add capability to disable > >it in testpmd, which helps to run performance tests also to verify the > > impact of the API? The spirit of the negotiating features/Rx/Tx offloads upfront is to have it disabled by default and enable the feature only when needed. Having the features enabled by default is probably against that spirit. We understand the concerns with drivers that didn't not implement that API. Why not disable it by default(like other offloads) and modify rte_flow action creation in testpmd to check for if !ENOSUP and feature disabled and add print to enable. So for the PMD's that won't support rte_eth_rx_metadata_negotiate(), there won't be any difference and for very few PMD's that support this API, they need to enable it before using RTE_FLOW with MARK/FLAG. Behavior change would be seen only with two PMD's(cnxk, sfc). > Note: I don't understand why we don't have > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > negotiated in this function. Probably something to add. The purpose of negotiate is to tell the PMD upfront so that PMD can prepare HW appropriately. Having these new actions would be very late to inform PMD and I think won't solve the purpose. > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Wednesday, January 25, 2023 7:30 PM > To: Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com>; > Ivan Malov <ivan.malov@oktetlabs.ru>; Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru>; dev@dpdk.org; Hanumanth Reddy Pothula > <hpothula@marvell.com>; Ferruh Yigit <ferruh.yigit@amd.com> > Cc: viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Nithin Kumar > Dabilpuram <ndabilpuram@marvell.com>; david.marchand@redhat.com > Subject: Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata > negotiation > > 25/01/2023 14:55, Ferruh Yigit: > > On 1/25/2023 12:55 PM, Thomas Monjalon wrote: > > > 25/01/2023 10:30, Hanumanth Reddy Pothula: > > >> ++ Ivan Malov and Andrew Rybchenko > > >> > > >> From: Ferruh Yigit <ferruh.yigit@amd.com> > > >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > > >>>> Presently, Rx metadata is sent to PMD by default, leading to a > > >>>> performance drop as processing for the same in Rx path takes extra > > >>>> cycles. > > >>>> > > >>>> Hence, add new testpmd command, > > >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' > > >>>> > > >>>> This command helps in sending Rx metadata to PMD and thereby Rx > > >>>> metadata flow command requests are processed. > > >>>> > > >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > >>> > > >>> Hi Hanumanth, > > >>> > > >>> I agree with Thomas for the patch. > > >>> > > >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > > >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is > > >>> consuming extra cycles? > > >>> > > >>> Can you update driver code to process Rx metadata when it is enabled by > > >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > > >>> one flow rule for it? > > >> > > >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by > testpmd. > > >> We thought it was added so that when that metadata is not needed, application need > not call this > > >> thereby saving cycles/bandwidth. > > > > > > testpmd is for testing all features. That's why all is negotiated. > > > Cycles should be saved if you don't enable it until a flow rule requires it. > > > > > > > Hi Thomas, > > > > Not just for saving cycles, but from testing perspective too, do you > > think does it work if a way to disable these Rx metadata added by > > keeping default behavior as it is? > > > > And new command can be in a consistent command syntax like: > > "port config <port_id> ..." > > Yes I agree it would be good to have a way to test different values. > And it would allow to completely disable metadata I suppose. > > Note: I don't understand why we don't have > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > negotiated in this function. Probably something to add. > > > > >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before > device is > > >> configured. We thought that is the purpose of having this negotiate API and avoid > depleting offload flags. > > > > > > It is just a configuration negotiation specific to metadata. > > > > > >> #3 Generally any new offloads added to DPDK would be in disabled state in testpmd > and we would have > > >> an option to enable it. In this case, testpmd is by default calling this negotiation. > > > > > > Negotiating is not enabling. > > > > > >> We can update the driver if the purpose of this API is clear. > > > > > > Please do. > > > > Is following understanding correct? > > > > API Flow Rule Result > > ----- ------------ -------- > > Enable No Rule Feature Disabled > > Enable Rule exist Feature Enabled > > Disable X Feature Disabled > > In the API column, you should say "negotiated" instead of "Enable". > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 14:42 ` Nithin Kumar Dabilpuram @ 2023-01-26 11:03 ` Thomas Monjalon 2023-01-27 5:02 ` Nithin Kumar Dabilpuram 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-26 11:03 UTC (permalink / raw) To: Nithin Kumar Dabilpuram Cc: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand Please reply inline below instead of doing an incomplete copy of the replies on top. 25/01/2023 15:42, Nithin Kumar Dabilpuram: > > >Will it work to enable them all by default and add capability to disable > > >it in testpmd, which helps to run performance tests also to verify the > > > impact of the API? > > The spirit of the negotiating features/Rx/Tx offloads upfront is to have it disabled by default and enable the feature only when needed. Having the features enabled by default is probably against that spirit. > > We understand the concerns with drivers that didn't not implement that API. There is no such concern I think. > Why not disable it by default(like other offloads) and modify rte_flow action creation in testpmd to check for if !ENOSUP and feature disabled and add print to enable. So for the PMD's that won't support rte_eth_rx_metadata_negotiate(), there won't be any difference and for very few PMD's that support this API, they need to enable it before using RTE_FLOW with MARK/FLAG. > Behavior change would be seen only with two PMD's(cnxk, sfc). I think you missed the whole point. Ferruh is proposing to have a command "port config <port_id> ..." to configure the flags to negotiate. Are you OK with this approach? > > Note: I don't understand why we don't have > > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > > negotiated in this function. Probably something to add. > > The purpose of negotiate is to tell the PMD upfront so that PMD can prepare > HW appropriately. Having these new actions would be very late to inform PMD and > I think won't solve the purpose. I am not talking about your problem here. I am just saying that TAG and META should be negotiated as well in rte_eth_rx_metadata_negotiate(). > From: Thomas Monjalon <thomas@monjalon.net> > > 25/01/2023 14:55, Ferruh Yigit: > > > On 1/25/2023 12:55 PM, Thomas Monjalon wrote: > > > > 25/01/2023 10:30, Hanumanth Reddy Pothula: > > > >> ++ Ivan Malov and Andrew Rybchenko > > > >> > > > >> From: Ferruh Yigit <ferruh.yigit@amd.com> > > > >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > > > >>>> Presently, Rx metadata is sent to PMD by default, leading to a > > > >>>> performance drop as processing for the same in Rx path takes extra > > > >>>> cycles. > > > >>>> > > > >>>> Hence, add new testpmd command, > > > >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' > > > >>>> > > > >>>> This command helps in sending Rx metadata to PMD and thereby Rx > > > >>>> metadata flow command requests are processed. > > > >>>> > > > >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > >>> > > > >>> Hi Hanumanth, > > > >>> > > > >>> I agree with Thomas for the patch. > > > >>> > > > >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > > > >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is > > > >>> consuming extra cycles? > > > >>> > > > >>> Can you update driver code to process Rx metadata when it is enabled by > > > >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > > > >>> one flow rule for it? > > > >> > > > >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by > > testpmd. > > > >> We thought it was added so that when that metadata is not needed, application need > > not call this > > > >> thereby saving cycles/bandwidth. > > > > > > > > testpmd is for testing all features. That's why all is negotiated. > > > > Cycles should be saved if you don't enable it until a flow rule requires it. > > > > > > > > > > Hi Thomas, > > > > > > Not just for saving cycles, but from testing perspective too, do you > > > think does it work if a way to disable these Rx metadata added by > > > keeping default behavior as it is? > > > > > > And new command can be in a consistent command syntax like: > > > "port config <port_id> ..." > > > > Yes I agree it would be good to have a way to test different values. > > And it would allow to completely disable metadata I suppose. > > > > Note: I don't understand why we don't have > > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > > negotiated in this function. Probably something to add. > > > > > > > >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before > > device is > > > >> configured. We thought that is the purpose of having this negotiate API and avoid > > depleting offload flags. > > > > > > > > It is just a configuration negotiation specific to metadata. > > > > > > > >> #3 Generally any new offloads added to DPDK would be in disabled state in testpmd > > and we would have > > > >> an option to enable it. In this case, testpmd is by default calling this negotiation. > > > > > > > > Negotiating is not enabling. > > > > > > > >> We can update the driver if the purpose of this API is clear. > > > > > > > > Please do. > > > > > > Is following understanding correct? > > > > > > API Flow Rule Result > > > ----- ------------ -------- > > > Enable No Rule Feature Disabled > > > Enable Rule exist Feature Enabled > > > Disable X Feature Disabled > > > > In the API column, you should say "negotiated" instead of "Enable". > > > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-26 11:03 ` Thomas Monjalon @ 2023-01-27 5:02 ` Nithin Kumar Dabilpuram 2023-01-27 8:54 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Nithin Kumar Dabilpuram @ 2023-01-27 5:02 UTC (permalink / raw) To: Thomas Monjalon Cc: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand Please see inline. > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Thursday, January 26, 2023 4:33 PM > To: Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> > Cc: Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com>; > Ivan Malov <ivan.malov@oktetlabs.ru>; Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru>; dev@dpdk.org; Hanumanth Reddy Pothula > <hpothula@marvell.com>; Ferruh Yigit <ferruh.yigit@amd.com>; viacheslavo@nvidia.com; > Jerin Jacob Kollanukkaran <jerinj@marvell.com>; david.marchand@redhat.com > Subject: Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata > negotiation > > Please reply inline below instead of doing an incomplete copy > of the replies on top. Ack, was just trying converge threads. > > > 25/01/2023 15:42, Nithin Kumar Dabilpuram: > > > >Will it work to enable them all by default and add capability to disable > > > >it in testpmd, which helps to run performance tests also to verify the > > > > impact of the API? > > > > The spirit of the negotiating features/Rx/Tx offloads upfront is to have it disabled by > default and enable the feature only when needed. Having the features enabled by default > is probably against that spirit. > > > > We understand the concerns with drivers that didn't not implement that API. > > There is no such concern I think. > > > Why not disable it by default(like other offloads) and modify rte_flow action creation in > testpmd to check for if !ENOSUP and feature disabled and add print to enable. So for the > PMD's that won't support rte_eth_rx_metadata_negotiate(), there won't be any > difference and for very few PMD's that support this API, they need to enable it before > using RTE_FLOW with MARK/FLAG. > > Behavior change would be seen only with two PMD's(cnxk, sfc). > > I think you missed the whole point. > Ferruh is proposing to have a command "port config <port_id> ..." > to configure the flags to negotiate. > Are you OK with this approach? > Yes, we are fine to have such command to enable and disable the feature with default being it disabled if supported by PMD. Is default being disabled fine if the feature is supported by a PMD ? > > > Note: I don't understand why we don't have > > > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > > > negotiated in this function. Probably something to add. > > > > The purpose of negotiate is to tell the PMD upfront so that PMD can prepare > > HW appropriately. Having these new actions would be very late to inform PMD and > > I think won't solve the purpose. > > I am not talking about your problem here. > I am just saying that TAG and META should be negotiated as well > in rte_eth_rx_metadata_negotiate(). > > > From: Thomas Monjalon <thomas@monjalon.net> > > > 25/01/2023 14:55, Ferruh Yigit: > > > > On 1/25/2023 12:55 PM, Thomas Monjalon wrote: > > > > > 25/01/2023 10:30, Hanumanth Reddy Pothula: > > > > >> ++ Ivan Malov and Andrew Rybchenko > > > > >> > > > > >> From: Ferruh Yigit <ferruh.yigit@amd.com> > > > > >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: > > > > >>>> Presently, Rx metadata is sent to PMD by default, leading to a > > > > >>>> performance drop as processing for the same in Rx path takes extra > > > > >>>> cycles. > > > > >>>> > > > > >>>> Hence, add new testpmd command, > > > > >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' > > > > >>>> > > > > >>>> This command helps in sending Rx metadata to PMD and thereby Rx > > > > >>>> metadata flow command requests are processed. > > > > >>>> > > > > >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > > > >>> > > > > >>> Hi Hanumanth, > > > > >>> > > > > >>> I agree with Thomas for the patch. > > > > >>> > > > > >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be > > > > >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is > > > > >>> consuming extra cycles? > > > > >>> > > > > >>> Can you update driver code to process Rx metadata when it is enabled by > > > > >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least > > > > >>> one flow rule for it? > > > > >> > > > > >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always > called by > > > testpmd. > > > > >> We thought it was added so that when that metadata is not needed, application > need > > > not call this > > > > >> thereby saving cycles/bandwidth. > > > > > > > > > > testpmd is for testing all features. That's why all is negotiated. > > > > > Cycles should be saved if you don't enable it until a flow rule requires it. > > > > > > > > > > > > > Hi Thomas, > > > > > > > > Not just for saving cycles, but from testing perspective too, do you > > > > think does it work if a way to disable these Rx metadata added by > > > > keeping default behavior as it is? > > > > > > > > And new command can be in a consistent command syntax like: > > > > "port config <port_id> ..." > > > > > > Yes I agree it would be good to have a way to test different values. > > > And it would allow to completely disable metadata I suppose. > > > > > > Note: I don't understand why we don't have > > > RTE_FLOW_ACTION_TYPE_SET_TAG and RTE_FLOW_ACTION_TYPE_SET_META > > > negotiated in this function. Probably something to add. > > > > > > > > > > >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before > > > device is > > > > >> configured. We thought that is the purpose of having this negotiate API and avoid > > > depleting offload flags. > > > > > > > > > > It is just a configuration negotiation specific to metadata. > > > > > > > > > >> #3 Generally any new offloads added to DPDK would be in disabled state in > testpmd > > > and we would have > > > > >> an option to enable it. In this case, testpmd is by default calling this negotiation. > > > > > > > > > > Negotiating is not enabling. > > > > > > > > > >> We can update the driver if the purpose of this API is clear. > > > > > > > > > > Please do. > > > > > > > > Is following understanding correct? > > > > > > > > API Flow Rule Result > > > > ----- ------------ -------- > > > > Enable No Rule Feature Disabled > > > > Enable Rule exist Feature Enabled > > > > Disable X Feature Disabled > > > > > > In the API column, you should say "negotiated" instead of "Enable". > > > > > > > > > > > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-27 5:02 ` Nithin Kumar Dabilpuram @ 2023-01-27 8:54 ` Thomas Monjalon 2023-01-27 10:42 ` Nithin Kumar Dabilpuram 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-27 8:54 UTC (permalink / raw) To: Nithin Kumar Dabilpuram Cc: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand 27/01/2023 06:02, Nithin Kumar Dabilpuram: > From: Thomas Monjalon <thomas@monjalon.net> > > Ferruh is proposing to have a command "port config <port_id> ..." > > to configure the flags to negotiate. > > Are you OK with this approach? > > Yes, we are fine to have such command to enable and disable the feature > with default being it disabled if supported by PMD. > Is default being disabled fine if the feature is supported by a PMD ? I think the default should be enabled for ease of use. Do we have similar features disables by default? I mean do we know features in testpmd which require a "double enablement" like one configuration command + one rte_flow rule? ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-27 8:54 ` Thomas Monjalon @ 2023-01-27 10:42 ` Nithin Kumar Dabilpuram 2023-01-27 15:01 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Nithin Kumar Dabilpuram @ 2023-01-27 10:42 UTC (permalink / raw) To: Thomas Monjalon Cc: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Friday, January 27, 2023 2:25 PM > To: Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> > Cc: Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com>; > Ivan Malov <ivan.malov@oktetlabs.ru>; Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru>; dev@dpdk.org; Hanumanth Reddy Pothula > <hpothula@marvell.com>; Ferruh Yigit <ferruh.yigit@amd.com>; viacheslavo@nvidia.com; > Jerin Jacob Kollanukkaran <jerinj@marvell.com>; david.marchand@redhat.com > Subject: Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata > negotiation > > 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > From: Thomas Monjalon <thomas@monjalon.net> > > > Ferruh is proposing to have a command "port config <port_id> ..." > > > to configure the flags to negotiate. > > > Are you OK with this approach? > > > > Yes, we are fine to have such command to enable and disable the feature > > with default being it disabled if supported by PMD. > > Is default being disabled fine if the feature is supported by a PMD ? > > I think the default should be enabled for ease of use. Since testpmd is used extensively for benchmarking purposes, we thought it should have minimum features enabled by default. The default testpmd doesn't have any Rx/Tx offloads enabled(except for FAST FREE), default fwd mode being "iofwd" and the Rx metadata is only referenced when dumping packets. > Do we have similar features disables by default? > I mean do we know features in testpmd which require a "double enablement" > like one configuration command + one rte_flow rule? Spec itself is that way i.e "RTE_FLOW_RULE + RX_METADATA_NEGOTIATE(once)" Isn't it enough if #1 We have enough print when rte_flow is being create without negotiation done and ask user to enable rx metadata using "port config <port_id>..." #2 Provide testpmd app arg to enable Rx metadata(for example " --rx-metadata") like other features to avoid calling another command before rte flow create. > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-27 10:42 ` Nithin Kumar Dabilpuram @ 2023-01-27 15:01 ` Thomas Monjalon 2023-01-31 16:17 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-27 15:01 UTC (permalink / raw) To: Nithin Kumar Dabilpuram Cc: Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand 27/01/2023 11:42, Nithin Kumar Dabilpuram: > From: Thomas Monjalon <thomas@monjalon.net> > > 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > > From: Thomas Monjalon <thomas@monjalon.net> > > > > Ferruh is proposing to have a command "port config <port_id> ..." > > > > to configure the flags to negotiate. > > > > Are you OK with this approach? > > > > > > Yes, we are fine to have such command to enable and disable the feature > > > with default being it disabled if supported by PMD. > > > Is default being disabled fine if the feature is supported by a PMD ? > > > > I think the default should be enabled for ease of use. > > Since testpmd is used extensively for benchmarking purposes, we thought it should have minimum features > enabled by default. The default testpmd doesn't have any Rx/Tx offloads enabled(except for FAST FREE), default > fwd mode being "iofwd" and the Rx metadata is only referenced when dumping packets. > > > > Do we have similar features disables by default? > > I mean do we know features in testpmd which require a "double enablement" > > like one configuration command + one rte_flow rule? > > Spec itself is that way i.e "RTE_FLOW_RULE + RX_METADATA_NEGOTIATE(once)" > > Isn't it enough if > > #1 We have enough print when rte_flow is being create without negotiation done and ask user to enable rx metadata using > "port config <port_id>..." > #2 Provide testpmd app arg to enable Rx metadata(for example " --rx-metadata") like other features to avoid calling another > command before rte flow create. I'm not sure what is best. I will let others discuss this part. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-27 15:01 ` Thomas Monjalon @ 2023-01-31 16:17 ` Jerin Jacob 2023-01-31 23:03 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-01-31 16:17 UTC (permalink / raw) To: Thomas Monjalon Cc: Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, dev, Hanumanth Reddy Pothula, Ferruh Yigit, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > 27/01/2023 11:42, Nithin Kumar Dabilpuram: > > From: Thomas Monjalon <thomas@monjalon.net> > > > 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > > > From: Thomas Monjalon <thomas@monjalon.net> > > > > > Ferruh is proposing to have a command "port config <port_id> ..." > > > > > to configure the flags to negotiate. > > > > > Are you OK with this approach? > > > > > > > > Yes, we are fine to have such command to enable and disable the feature > > > > with default being it disabled if supported by PMD. > > > > Is default being disabled fine if the feature is supported by a PMD ? > > > > > > I think the default should be enabled for ease of use. > > > > Since testpmd is used extensively for benchmarking purposes, we thought it should have minimum features > > enabled by default. The default testpmd doesn't have any Rx/Tx offloads enabled(except for FAST FREE), default > > fwd mode being "iofwd" and the Rx metadata is only referenced when dumping packets. > > > > > > > Do we have similar features disables by default? > > > I mean do we know features in testpmd which require a "double enablement" > > > like one configuration command + one rte_flow rule? > > > > Spec itself is that way i.e "RTE_FLOW_RULE + RX_METADATA_NEGOTIATE(once)" > > > > Isn't it enough if > > > > #1 We have enough print when rte_flow is being create without negotiation done and ask user to enable rx metadata using > > "port config <port_id>..." > > #2 Provide testpmd app arg to enable Rx metadata(for example " --rx-metadata") like other features to avoid calling another > > command before rte flow create. > > I'm not sure what is best. > I will let others discuss this part. IMO, enabling something always defeat the purpose to negotiate. IMO, someone needs to negotiate for a feature if the feature is needed. I think, the double enablement is part of the spec itself. In case, The PMD drivers won't like double enablement, no need to implement the PMD callback. That way, there is no change in the existing flow. The reason why cnxk driver thought of leveraging negotiate() feature so that it helps for optimization. e.s.p function template for multiprocess case as we know what features needed in fastpath upfront. If there still concerns with patch we can take up this to TB decide one way or another to make forward progress. Let us know. > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-31 16:17 ` Jerin Jacob @ 2023-01-31 23:03 ` Thomas Monjalon 2023-02-01 6:10 ` Ivan Malov 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-31 23:03 UTC (permalink / raw) To: Ivan Malov, Andrew Rybchenko, Ferruh Yigit, orika, Ivan Malov Cc: Jerin Jacob, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand 31/01/2023 17:17, Jerin Jacob: > On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > > > 27/01/2023 11:42, Nithin Kumar Dabilpuram: > > > From: Thomas Monjalon <thomas@monjalon.net> > > > > 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > > > > From: Thomas Monjalon <thomas@monjalon.net> > > > > > > Ferruh is proposing to have a command "port config <port_id> ..." > > > > > > to configure the flags to negotiate. > > > > > > Are you OK with this approach? > > > > > > > > > > Yes, we are fine to have such command to enable and disable the feature > > > > > with default being it disabled if supported by PMD. > > > > > Is default being disabled fine if the feature is supported by a PMD ? > > > > > > > > I think the default should be enabled for ease of use. > > > > > > Since testpmd is used extensively for benchmarking purposes, we thought it should have minimum features > > > enabled by default. The default testpmd doesn't have any Rx/Tx offloads enabled(except for FAST FREE), default > > > fwd mode being "iofwd" and the Rx metadata is only referenced when dumping packets. > > > > > > > > > > Do we have similar features disables by default? > > > > I mean do we know features in testpmd which require a "double enablement" > > > > like one configuration command + one rte_flow rule? > > > > > > Spec itself is that way i.e "RTE_FLOW_RULE + RX_METADATA_NEGOTIATE(once)" > > > > > > Isn't it enough if > > > > > > #1 We have enough print when rte_flow is being create without negotiation done and ask user to enable rx metadata using > > > "port config <port_id>..." > > > #2 Provide testpmd app arg to enable Rx metadata(for example " --rx-metadata") like other features to avoid calling another > > > command before rte flow create. > > > > I'm not sure what is best. > > I will let others discuss this part. > > IMO, enabling something always defeat the purpose to negotiate. IMO, > someone needs to negotiate > for a feature if the feature is needed. I think, the double enablement > is part of the spec itself. In case, The PMD > drivers won't like double enablement, no need to implement the PMD > callback. That way, there is no change in the existing flow. > > The reason why cnxk driver thought of leveraging negotiate() feature > so that it helps for optimization. e.s.p > function template for multiprocess case as we know what features > needed in fastpath upfront. > > If there still concerns with patch we can take up this to TB decide > one way or another to make forward progress. Let us know. Ferruh, Andrew, Ori, Ivan, what is your opinion? Let's progress with this patch to make it in -rc1. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-31 23:03 ` Thomas Monjalon @ 2023-02-01 6:10 ` Ivan Malov 2023-02-01 7:16 ` Andrew Rybchenko 0 siblings, 1 reply; 73+ messages in thread From: Ivan Malov @ 2023-02-01 6:10 UTC (permalink / raw) To: Thomas Monjalon Cc: Ivan Malov, Andrew Rybchenko, Ferruh Yigit, orika, Jerin Jacob, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand Hello everyone, Since making automatic, or implicit, offload decisions does not belong in testpmd responsibility domain, it should be safer to avoid calling the "negotiate metadata delivery" API with some default selection unless the user asks to do so explicitly, via internal CLI or app options. With that in mind, port config <port_id> ... sounds OK. PMDs that support flow primitives which can generate metadata but, if in started state, can't enable its delivery may pass appropriate rte_error messages to the user suggesting they enable delivery of such metadata from NIC to PMD first. This way, if the person operating testpmd enters a flow create command and that fails, they can figure out the inconsistency, stop the port, negotiate, start and try again. As for non-debug applications, their developers shall be properly informed about the problem of enabling delivery of metadata from NIC to PMD. This way, they will invoke the negotiate API by default in their apps, with the feature selection (eg. MARK) as per nature of the app's business. This API should indeed be helpful to some PMDs with regard to collecting upfront knowledge like this. At the same time, should be benign to those PMDs who do not need this knowledge and can enable delivery of metadata right when inserting the flow rules. So I hope the API does not create too much discomfort to vendors not needing it. Thank you. On Wed, 1 Feb 2023, Thomas Monjalon wrote: > 31/01/2023 17:17, Jerin Jacob: >> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon <thomas@monjalon.net> wrote: >>> >>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: >>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: >>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>> Ferruh is proposing to have a command "port config <port_id> ..." >>>>>>> to configure the flags to negotiate. >>>>>>> Are you OK with this approach? >>>>>> >>>>>> Yes, we are fine to have such command to enable and disable the feature >>>>>> with default being it disabled if supported by PMD. >>>>>> Is default being disabled fine if the feature is supported by a PMD ? >>>>> >>>>> I think the default should be enabled for ease of use. >>>> >>>> Since testpmd is used extensively for benchmarking purposes, we thought it should have minimum features >>>> enabled by default. The default testpmd doesn't have any Rx/Tx offloads enabled(except for FAST FREE), default >>>> fwd mode being "iofwd" and the Rx metadata is only referenced when dumping packets. >>>> >>>> >>>>> Do we have similar features disables by default? >>>>> I mean do we know features in testpmd which require a "double enablement" >>>>> like one configuration command + one rte_flow rule? >>>> >>>> Spec itself is that way i.e "RTE_FLOW_RULE + RX_METADATA_NEGOTIATE(once)" >>>> >>>> Isn't it enough if >>>> >>>> #1 We have enough print when rte_flow is being create without negotiation done and ask user to enable rx metadata using >>>> "port config <port_id>..." >>>> #2 Provide testpmd app arg to enable Rx metadata(for example " --rx-metadata") like other features to avoid calling another >>>> command before rte flow create. >>> >>> I'm not sure what is best. >>> I will let others discuss this part. >> >> IMO, enabling something always defeat the purpose to negotiate. IMO, >> someone needs to negotiate >> for a feature if the feature is needed. I think, the double enablement >> is part of the spec itself. In case, The PMD >> drivers won't like double enablement, no need to implement the PMD >> callback. That way, there is no change in the existing flow. >> >> The reason why cnxk driver thought of leveraging negotiate() feature >> so that it helps for optimization. e.s.p >> function template for multiprocess case as we know what features >> needed in fastpath upfront. >> >> If there still concerns with patch we can take up this to TB decide >> one way or another to make forward progress. Let us know. > > Ferruh, Andrew, Ori, Ivan, what is your opinion? > Let's progress with this patch to make it in -rc1. > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 6:10 ` Ivan Malov @ 2023-02-01 7:16 ` Andrew Rybchenko 2023-02-01 8:53 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Andrew Rybchenko @ 2023-02-01 7:16 UTC (permalink / raw) To: Ivan Malov, Thomas Monjalon Cc: Ivan Malov, Ferruh Yigit, orika, Jerin Jacob, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand On 2/1/23 09:10, Ivan Malov wrote: > Hello everyone, > > Since making automatic, or implicit, offload decisions does > not belong in testpmd responsibility domain, it should be > safer to avoid calling the "negotiate metadata delivery" > API with some default selection unless the user asks to > do so explicitly, via internal CLI or app options. > > With that in mind, port config <port_id> ... sounds OK. > > PMDs that support flow primitives which can generate metadata > but, if in started state, can't enable its delivery may pass > appropriate rte_error messages to the user suggesting > they enable delivery of such metadata from NIC to PMD > first. This way, if the person operating testpmd > enters a flow create command and that fails, > they can figure out the inconsistency, stop > the port, negotiate, start and try again. > > As for non-debug applications, their developers shall > be properly informed about the problem of enabling > delivery of metadata from NIC to PMD. This way, > they will invoke the negotiate API by default > in their apps, with the feature selection (eg. > MARK) as per nature of the app's business. > > This API should indeed be helpful to some PMDs with > regard to collecting upfront knowledge like this. > At the same time, should be benign to those PMDs > who do not need this knowledge and can enable > delivery of metadata right when inserting the > flow rules. So I hope the API does not create > too much discomfort to vendors not needing it. > > Thank you. > > On Wed, 1 Feb 2023, Thomas Monjalon wrote: > >> 31/01/2023 17:17, Jerin Jacob: >>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon <thomas@monjalon.net> >>> wrote: >>>> >>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: >>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: >>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>> Ferruh is proposing to have a command "port config <port_id> ..." >>>>>>>> to configure the flags to negotiate. >>>>>>>> Are you OK with this approach? >>>>>>> >>>>>>> Yes, we are fine to have such command to enable and disable the >>>>>>> feature >>>>>>> with default being it disabled if supported by PMD. >>>>>>> Is default being disabled fine if the feature is supported by a >>>>>>> PMD ? >>>>>> >>>>>> I think the default should be enabled for ease of use. >>>>> >>>>> Since testpmd is used extensively for benchmarking purposes, we >>>>> thought it should have minimum features >>>>> enabled by default. The default testpmd doesn't have any Rx/Tx >>>>> offloads enabled(except for FAST FREE), default >>>>> fwd mode being "iofwd" and the Rx metadata is only referenced when >>>>> dumping packets. >>>>> >>>>> >>>>>> Do we have similar features disables by default? >>>>>> I mean do we know features in testpmd which require a "double >>>>>> enablement" >>>>>> like one configuration command + one rte_flow rule? >>>>> >>>>> Spec itself is that way i.e "RTE_FLOW_RULE + >>>>> RX_METADATA_NEGOTIATE(once)" >>>>> >>>>> Isn't it enough if >>>>> >>>>> #1 We have enough print when rte_flow is being create without >>>>> negotiation done and ask user to enable rx metadata using >>>>> "port config <port_id>..." >>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " >>>>> --rx-metadata") like other features to avoid calling another >>>>> command before rte flow create. >>>> >>>> I'm not sure what is best. >>>> I will let others discuss this part. >>> >>> IMO, enabling something always defeat the purpose to negotiate. IMO, >>> someone needs to negotiate >>> for a feature if the feature is needed. I think, the double enablement >>> is part of the spec itself. In case, The PMD >>> drivers won't like double enablement, no need to implement the PMD >>> callback. That way, there is no change in the existing flow. >>> >>> The reason why cnxk driver thought of leveraging negotiate() feature >>> so that it helps for optimization. e.s.p >>> function template for multiprocess case as we know what features >>> needed in fastpath upfront. >>> >>> If there still concerns with patch we can take up this to TB decide >>> one way or another to make forward progress. Let us know. >> >> Ferruh, Andrew, Ori, Ivan, what is your opinion? >> Let's progress with this patch to make it in -rc1. As I understand all agreed that we need testpmd command to control negotiated Rx metadata. May be even command-line option would be useful. So, remaining question is what should be the default value in testpmd. Note that it is just testpmd question since default value in an abstract application is nothing negotiated (if I'm not mistaken). The key advantage of the current behaviour is to avoid "double-enabling" in testpmd. It preserves behaviour which we had before before the API addition. It is a strong argument. Basically it puts the feature into the same basket as FAST_FREE - need an action to run faster. I see no problem in such approach. The key disadvantage is the difference in testpmd and other applications default behaviour. I'd look at the feature in the following way: if an application theoretically wants to use USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate corresponding Rx metadata to ensure that the feature is available and HW is informed that application may need it. Since testpmd supports corresponding flow API actions and flow tunnels, it tries to negotiate it by default, but do not fail if the negotiation fails. So, I'd would vote to keeping the default value as is. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 7:16 ` Andrew Rybchenko @ 2023-02-01 8:53 ` Jerin Jacob 2023-02-01 9:00 ` Ori Kam 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 8:53 UTC (permalink / raw) To: Andrew Rybchenko Cc: Ivan Malov, Thomas Monjalon, Ivan Malov, Ferruh Yigit, orika, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, viacheslavo, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> wrote: > > On 2/1/23 09:10, Ivan Malov wrote: > > Hello everyone, > > > > Since making automatic, or implicit, offload decisions does > > not belong in testpmd responsibility domain, it should be > > safer to avoid calling the "negotiate metadata delivery" > > API with some default selection unless the user asks to > > do so explicitly, via internal CLI or app options. > > > > With that in mind, port config <port_id> ... sounds OK. > > > > PMDs that support flow primitives which can generate metadata > > but, if in started state, can't enable its delivery may pass > > appropriate rte_error messages to the user suggesting > > they enable delivery of such metadata from NIC to PMD > > first. This way, if the person operating testpmd > > enters a flow create command and that fails, > > they can figure out the inconsistency, stop > > the port, negotiate, start and try again. > > > > As for non-debug applications, their developers shall > > be properly informed about the problem of enabling > > delivery of metadata from NIC to PMD. This way, > > they will invoke the negotiate API by default > > in their apps, with the feature selection (eg. > > MARK) as per nature of the app's business. > > > > This API should indeed be helpful to some PMDs with > > regard to collecting upfront knowledge like this. > > At the same time, should be benign to those PMDs > > who do not need this knowledge and can enable > > delivery of metadata right when inserting the > > flow rules. So I hope the API does not create > > too much discomfort to vendors not needing it. > > > > Thank you. > > > > On Wed, 1 Feb 2023, Thomas Monjalon wrote: > > > >> 31/01/2023 17:17, Jerin Jacob: > >>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon <thomas@monjalon.net> > >>> wrote: > >>>> > >>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: > >>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: > >>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>>>> Ferruh is proposing to have a command "port config <port_id> ..." > >>>>>>>> to configure the flags to negotiate. > >>>>>>>> Are you OK with this approach? > >>>>>>> > >>>>>>> Yes, we are fine to have such command to enable and disable the > >>>>>>> feature > >>>>>>> with default being it disabled if supported by PMD. > >>>>>>> Is default being disabled fine if the feature is supported by a > >>>>>>> PMD ? > >>>>>> > >>>>>> I think the default should be enabled for ease of use. > >>>>> > >>>>> Since testpmd is used extensively for benchmarking purposes, we > >>>>> thought it should have minimum features > >>>>> enabled by default. The default testpmd doesn't have any Rx/Tx > >>>>> offloads enabled(except for FAST FREE), default > >>>>> fwd mode being "iofwd" and the Rx metadata is only referenced when > >>>>> dumping packets. > >>>>> > >>>>> > >>>>>> Do we have similar features disables by default? > >>>>>> I mean do we know features in testpmd which require a "double > >>>>>> enablement" > >>>>>> like one configuration command + one rte_flow rule? > >>>>> > >>>>> Spec itself is that way i.e "RTE_FLOW_RULE + > >>>>> RX_METADATA_NEGOTIATE(once)" > >>>>> > >>>>> Isn't it enough if > >>>>> > >>>>> #1 We have enough print when rte_flow is being create without > >>>>> negotiation done and ask user to enable rx metadata using > >>>>> "port config <port_id>..." > >>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " > >>>>> --rx-metadata") like other features to avoid calling another > >>>>> command before rte flow create. > >>>> > >>>> I'm not sure what is best. > >>>> I will let others discuss this part. > >>> > >>> IMO, enabling something always defeat the purpose to negotiate. IMO, > >>> someone needs to negotiate > >>> for a feature if the feature is needed. I think, the double enablement > >>> is part of the spec itself. In case, The PMD > >>> drivers won't like double enablement, no need to implement the PMD > >>> callback. That way, there is no change in the existing flow. > >>> > >>> The reason why cnxk driver thought of leveraging negotiate() feature > >>> so that it helps for optimization. e.s.p > >>> function template for multiprocess case as we know what features > >>> needed in fastpath upfront. > >>> > >>> If there still concerns with patch we can take up this to TB decide > >>> one way or another to make forward progress. Let us know. > >> > >> Ferruh, Andrew, Ori, Ivan, what is your opinion? > >> Let's progress with this patch to make it in -rc1. > > As I understand all agreed that we need testpmd command to > control negotiated Rx metadata. May be even command-line > option would be useful. > > So, remaining question is what should be the default value in > testpmd. Note that it is just testpmd question since default > value in an abstract application is nothing negotiated > (if I'm not mistaken). > > The key advantage of the current behaviour is to avoid > "double-enabling" in testpmd. It preserves behaviour which > we had before before the API addition. It is a strong > argument. Basically it puts the feature into the same > basket as FAST_FREE - need an action to run faster. I think, there is a disconnect here. FAST_FREE is enabled by default. i.e We don't need any specific action to run faster. To align with performance test application, by default the configuration should be run faster. User needs to give explicit configuration to allow more offload or the one causes the mpps drops. IMO, That is the theme followed in testpmd. > I see no problem in such approach. > > The key disadvantage is the difference in testpmd and > other applications default behaviour. > > I'd look at the feature in the following way: > if an application theoretically wants to use > USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate > corresponding Rx metadata to ensure that the feature is > available and HW is informed that application may need it. > Since testpmd supports corresponding flow API actions and > flow tunnels, it tries to negotiate it by default, but do > not fail if the negotiation fails. > > So, I'd would vote to keeping the default value as is. > ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 8:53 ` Jerin Jacob @ 2023-02-01 9:00 ` Ori Kam 2023-02-01 9:05 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Ori Kam @ 2023-02-01 9:00 UTC (permalink / raw) To: Jerin Jacob, Andrew Rybchenko Cc: Ivan Malov, NBU-Contact-Thomas Monjalon (EXTERNAL), Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand Hi all, Sorry for jumping in late, > -----Original Message----- > From: Jerin Jacob <jerinjacobk@gmail.com> > Sent: Wednesday, 1 February 2023 10:53 > > On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru> wrote: > > > > On 2/1/23 09:10, Ivan Malov wrote: > > > Hello everyone, > > > > > > Since making automatic, or implicit, offload decisions does > > > not belong in testpmd responsibility domain, it should be > > > safer to avoid calling the "negotiate metadata delivery" > > > API with some default selection unless the user asks to > > > do so explicitly, via internal CLI or app options. > > > > > > With that in mind, port config <port_id> ... sounds OK. > > > > > > PMDs that support flow primitives which can generate metadata > > > but, if in started state, can't enable its delivery may pass > > > appropriate rte_error messages to the user suggesting > > > they enable delivery of such metadata from NIC to PMD > > > first. This way, if the person operating testpmd > > > enters a flow create command and that fails, > > > they can figure out the inconsistency, stop > > > the port, negotiate, start and try again. > > > > > > As for non-debug applications, their developers shall > > > be properly informed about the problem of enabling > > > delivery of metadata from NIC to PMD. This way, > > > they will invoke the negotiate API by default > > > in their apps, with the feature selection (eg. > > > MARK) as per nature of the app's business. > > > > > > This API should indeed be helpful to some PMDs with > > > regard to collecting upfront knowledge like this. > > > At the same time, should be benign to those PMDs > > > who do not need this knowledge and can enable > > > delivery of metadata right when inserting the > > > flow rules. So I hope the API does not create > > > too much discomfort to vendors not needing it. > > > > > > Thank you. > > > > > > On Wed, 1 Feb 2023, Thomas Monjalon wrote: > > > > > >> 31/01/2023 17:17, Jerin Jacob: > > >>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon > <thomas@monjalon.net> > > >>> wrote: > > >>>> > > >>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: > > >>>>> From: Thomas Monjalon <thomas@monjalon.net> > > >>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > >>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > > >>>>>>>> Ferruh is proposing to have a command "port config <port_id> > ..." > > >>>>>>>> to configure the flags to negotiate. > > >>>>>>>> Are you OK with this approach? > > >>>>>>> > > >>>>>>> Yes, we are fine to have such command to enable and disable the > > >>>>>>> feature > > >>>>>>> with default being it disabled if supported by PMD. > > >>>>>>> Is default being disabled fine if the feature is supported by a > > >>>>>>> PMD ? > > >>>>>> > > >>>>>> I think the default should be enabled for ease of use. > > >>>>> > > >>>>> Since testpmd is used extensively for benchmarking purposes, we > > >>>>> thought it should have minimum features > > >>>>> enabled by default. The default testpmd doesn't have any Rx/Tx > > >>>>> offloads enabled(except for FAST FREE), default > > >>>>> fwd mode being "iofwd" and the Rx metadata is only referenced > when > > >>>>> dumping packets. > > >>>>> > > >>>>> > > >>>>>> Do we have similar features disables by default? > > >>>>>> I mean do we know features in testpmd which require a "double > > >>>>>> enablement" > > >>>>>> like one configuration command + one rte_flow rule? > > >>>>> > > >>>>> Spec itself is that way i.e "RTE_FLOW_RULE + > > >>>>> RX_METADATA_NEGOTIATE(once)" > > >>>>> > > >>>>> Isn't it enough if > > >>>>> > > >>>>> #1 We have enough print when rte_flow is being create without > > >>>>> negotiation done and ask user to enable rx metadata using > > >>>>> "port config <port_id>..." > > >>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " > > >>>>> --rx-metadata") like other features to avoid calling another > > >>>>> command before rte flow create. > > >>>> > > >>>> I'm not sure what is best. > > >>>> I will let others discuss this part. > > >>> > > >>> IMO, enabling something always defeat the purpose to negotiate. IMO, > > >>> someone needs to negotiate > > >>> for a feature if the feature is needed. I think, the double enablement > > >>> is part of the spec itself. In case, The PMD > > >>> drivers won't like double enablement, no need to implement the PMD > > >>> callback. That way, there is no change in the existing flow. > > >>> > > >>> The reason why cnxk driver thought of leveraging negotiate() feature > > >>> so that it helps for optimization. e.s.p > > >>> function template for multiprocess case as we know what features > > >>> needed in fastpath upfront. > > >>> > > >>> If there still concerns with patch we can take up this to TB decide > > >>> one way or another to make forward progress. Let us know. > > >> > > >> Ferruh, Andrew, Ori, Ivan, what is your opinion? > > >> Let's progress with this patch to make it in -rc1. > > > > As I understand all agreed that we need testpmd command to > > control negotiated Rx metadata. May be even command-line > > option would be useful. > > > > So, remaining question is what should be the default value in > > testpmd. Note that it is just testpmd question since default > > value in an abstract application is nothing negotiated > > (if I'm not mistaken). > > > > The key advantaan ge of the current behaviour is to avoid > > "double-enabling" in testpmd. It preserves behaviour which > > we had before before the API addition. It is a strong > > argument. Basically it puts the feature into the same > > basket as FAST_FREE - need an action to run faster. > > I think, there is a disconnect here. FAST_FREE is enabled by default. > i.e We don't need any specific action to run faster. To align with performance > test application, by default the configuration should be run faster. User > needs to give explicit configuration to allow more offload or the one causes > the mpps drops. IMO, That is the theme followed in testpmd. > > I agree with Andrew, the default should stay the same, as now, PMD may already implement logic to only enable the feature if there is a flow rule. Changing the default will result in breaking applications. I want to suggest new approach for this feature, maybe we can use the rte_flow_configure, and add a new bit that says if those actions are going to be used. What do you think? > > I see no problem in such approach. > > > > The key disadvantage is the difference in testpmd and > > other applications default behaviour. > > > > I'd look at the feature in the following way: > > if an application theoretically wants to use > > USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate > > corresponding Rx metadata to ensure that the feature is > > available and HW is informed that application may need it. > > Since testpmd supports corresponding flow API actions and > > flow tunnels, it tries to negotiate it by default, but do > > not fail if the negotiation fails. > > > > So, I'd would vote to keeping the default value as is. > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 9:00 ` Ori Kam @ 2023-02-01 9:05 ` Thomas Monjalon 2023-02-01 9:07 ` Andrew Rybchenko 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-02-01 9:05 UTC (permalink / raw) To: Jerin Jacob, Andrew Rybchenko, Ori Kam Cc: Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand 01/02/2023 10:00, Ori Kam: > Hi all, > > Sorry for jumping in late, > > > -----Original Message----- > > From: Jerin Jacob <jerinjacobk@gmail.com> > > Sent: Wednesday, 1 February 2023 10:53 > > > > On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko > > <andrew.rybchenko@oktetlabs.ru> wrote: > > > > > > On 2/1/23 09:10, Ivan Malov wrote: > > > > Hello everyone, > > > > > > > > Since making automatic, or implicit, offload decisions does > > > > not belong in testpmd responsibility domain, it should be > > > > safer to avoid calling the "negotiate metadata delivery" > > > > API with some default selection unless the user asks to > > > > do so explicitly, via internal CLI or app options. > > > > > > > > With that in mind, port config <port_id> ... sounds OK. > > > > > > > > PMDs that support flow primitives which can generate metadata > > > > but, if in started state, can't enable its delivery may pass > > > > appropriate rte_error messages to the user suggesting > > > > they enable delivery of such metadata from NIC to PMD > > > > first. This way, if the person operating testpmd > > > > enters a flow create command and that fails, > > > > they can figure out the inconsistency, stop > > > > the port, negotiate, start and try again. > > > > > > > > As for non-debug applications, their developers shall > > > > be properly informed about the problem of enabling > > > > delivery of metadata from NIC to PMD. This way, > > > > they will invoke the negotiate API by default > > > > in their apps, with the feature selection (eg. > > > > MARK) as per nature of the app's business. > > > > > > > > This API should indeed be helpful to some PMDs with > > > > regard to collecting upfront knowledge like this. > > > > At the same time, should be benign to those PMDs > > > > who do not need this knowledge and can enable > > > > delivery of metadata right when inserting the > > > > flow rules. So I hope the API does not create > > > > too much discomfort to vendors not needing it. > > > > > > > > Thank you. > > > > > > > > On Wed, 1 Feb 2023, Thomas Monjalon wrote: > > > > > > > >> 31/01/2023 17:17, Jerin Jacob: > > > >>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon > > <thomas@monjalon.net> > > > >>> wrote: > > > >>>> > > > >>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: > > > >>>>> From: Thomas Monjalon <thomas@monjalon.net> > > > >>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: > > > >>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > > > >>>>>>>> Ferruh is proposing to have a command "port config <port_id> > > ..." > > > >>>>>>>> to configure the flags to negotiate. > > > >>>>>>>> Are you OK with this approach? > > > >>>>>>> > > > >>>>>>> Yes, we are fine to have such command to enable and disable the > > > >>>>>>> feature > > > >>>>>>> with default being it disabled if supported by PMD. > > > >>>>>>> Is default being disabled fine if the feature is supported by a > > > >>>>>>> PMD ? > > > >>>>>> > > > >>>>>> I think the default should be enabled for ease of use. > > > >>>>> > > > >>>>> Since testpmd is used extensively for benchmarking purposes, we > > > >>>>> thought it should have minimum features > > > >>>>> enabled by default. The default testpmd doesn't have any Rx/Tx > > > >>>>> offloads enabled(except for FAST FREE), default > > > >>>>> fwd mode being "iofwd" and the Rx metadata is only referenced > > when > > > >>>>> dumping packets. > > > >>>>> > > > >>>>> > > > >>>>>> Do we have similar features disables by default? > > > >>>>>> I mean do we know features in testpmd which require a "double > > > >>>>>> enablement" > > > >>>>>> like one configuration command + one rte_flow rule? > > > >>>>> > > > >>>>> Spec itself is that way i.e "RTE_FLOW_RULE + > > > >>>>> RX_METADATA_NEGOTIATE(once)" > > > >>>>> > > > >>>>> Isn't it enough if > > > >>>>> > > > >>>>> #1 We have enough print when rte_flow is being create without > > > >>>>> negotiation done and ask user to enable rx metadata using > > > >>>>> "port config <port_id>..." > > > >>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " > > > >>>>> --rx-metadata") like other features to avoid calling another > > > >>>>> command before rte flow create. > > > >>>> > > > >>>> I'm not sure what is best. > > > >>>> I will let others discuss this part. > > > >>> > > > >>> IMO, enabling something always defeat the purpose to negotiate. IMO, > > > >>> someone needs to negotiate > > > >>> for a feature if the feature is needed. I think, the double enablement > > > >>> is part of the spec itself. In case, The PMD > > > >>> drivers won't like double enablement, no need to implement the PMD > > > >>> callback. That way, there is no change in the existing flow. > > > >>> > > > >>> The reason why cnxk driver thought of leveraging negotiate() feature > > > >>> so that it helps for optimization. e.s.p > > > >>> function template for multiprocess case as we know what features > > > >>> needed in fastpath upfront. > > > >>> > > > >>> If there still concerns with patch we can take up this to TB decide > > > >>> one way or another to make forward progress. Let us know. > > > >> > > > >> Ferruh, Andrew, Ori, Ivan, what is your opinion? > > > >> Let's progress with this patch to make it in -rc1. > > > > > > As I understand all agreed that we need testpmd command to > > > control negotiated Rx metadata. May be even command-line > > > option would be useful. > > > > > > So, remaining question is what should be the default value in > > > testpmd. Note that it is just testpmd question since default > > > value in an abstract application is nothing negotiated > > > (if I'm not mistaken). > > > > > > The key advantaan ge of the current behaviour is to avoid > > > "double-enabling" in testpmd. It preserves behaviour which > > > we had before before the API addition. It is a strong > > > argument. Basically it puts the feature into the same > > > basket as FAST_FREE - need an action to run faster. > > > > I think, there is a disconnect here. FAST_FREE is enabled by default. > > i.e We don't need any specific action to run faster. To align with performance > > test application, by default the configuration should be run faster. User > > needs to give explicit configuration to allow more offload or the one causes > > the mpps drops. IMO, That is the theme followed in testpmd. > > > > > I agree with Andrew, the default should stay the same, as now, PMD may already implement > logic to only enable the feature if there is a flow rule. > Changing the default will result in breaking applications. That's not what is discussed here. We are talking only about testpmd default. > I want to suggest new approach for this feature, > maybe we can use the rte_flow_configure, and add a new bit that says if those > actions are going to be used. > What do you think? Let's not change the API please. > > > I see no problem in such approach. > > > > > > The key disadvantage is the difference in testpmd and > > > other applications default behaviour. > > > > > > I'd look at the feature in the following way: > > > if an application theoretically wants to use > > > USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate > > > corresponding Rx metadata to ensure that the feature is > > > available and HW is informed that application may need it. > > > Since testpmd supports corresponding flow API actions and > > > flow tunnels, it tries to negotiate it by default, but do > > > not fail if the negotiation fails. > > > > > > So, I'd would vote to keeping the default value as is. > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 9:05 ` Thomas Monjalon @ 2023-02-01 9:07 ` Andrew Rybchenko 2023-02-01 9:14 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Andrew Rybchenko @ 2023-02-01 9:07 UTC (permalink / raw) To: Thomas Monjalon, Jerin Jacob, Ori Kam Cc: Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/23 12:05, Thomas Monjalon wrote: > 01/02/2023 10:00, Ori Kam: >> Hi all, >> >> Sorry for jumping in late, >> >>> -----Original Message----- >>> From: Jerin Jacob <jerinjacobk@gmail.com> >>> Sent: Wednesday, 1 February 2023 10:53 >>> >>> On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko >>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>> >>>> On 2/1/23 09:10, Ivan Malov wrote: >>>>> Hello everyone, >>>>> >>>>> Since making automatic, or implicit, offload decisions does >>>>> not belong in testpmd responsibility domain, it should be >>>>> safer to avoid calling the "negotiate metadata delivery" >>>>> API with some default selection unless the user asks to >>>>> do so explicitly, via internal CLI or app options. >>>>> >>>>> With that in mind, port config <port_id> ... sounds OK. >>>>> >>>>> PMDs that support flow primitives which can generate metadata >>>>> but, if in started state, can't enable its delivery may pass >>>>> appropriate rte_error messages to the user suggesting >>>>> they enable delivery of such metadata from NIC to PMD >>>>> first. This way, if the person operating testpmd >>>>> enters a flow create command and that fails, >>>>> they can figure out the inconsistency, stop >>>>> the port, negotiate, start and try again. >>>>> >>>>> As for non-debug applications, their developers shall >>>>> be properly informed about the problem of enabling >>>>> delivery of metadata from NIC to PMD. This way, >>>>> they will invoke the negotiate API by default >>>>> in their apps, with the feature selection (eg. >>>>> MARK) as per nature of the app's business. >>>>> >>>>> This API should indeed be helpful to some PMDs with >>>>> regard to collecting upfront knowledge like this. >>>>> At the same time, should be benign to those PMDs >>>>> who do not need this knowledge and can enable >>>>> delivery of metadata right when inserting the >>>>> flow rules. So I hope the API does not create >>>>> too much discomfort to vendors not needing it. >>>>> >>>>> Thank you. >>>>> >>>>> On Wed, 1 Feb 2023, Thomas Monjalon wrote: >>>>> >>>>>> 31/01/2023 17:17, Jerin Jacob: >>>>>>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon >>> <thomas@monjalon.net> >>>>>>> wrote: >>>>>>>> >>>>>>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: >>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: >>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>>>> Ferruh is proposing to have a command "port config <port_id> >>> ..." >>>>>>>>>>>> to configure the flags to negotiate. >>>>>>>>>>>> Are you OK with this approach? >>>>>>>>>>> >>>>>>>>>>> Yes, we are fine to have such command to enable and disable the >>>>>>>>>>> feature >>>>>>>>>>> with default being it disabled if supported by PMD. >>>>>>>>>>> Is default being disabled fine if the feature is supported by a >>>>>>>>>>> PMD ? >>>>>>>>>> >>>>>>>>>> I think the default should be enabled for ease of use. >>>>>>>>> >>>>>>>>> Since testpmd is used extensively for benchmarking purposes, we >>>>>>>>> thought it should have minimum features >>>>>>>>> enabled by default. The default testpmd doesn't have any Rx/Tx >>>>>>>>> offloads enabled(except for FAST FREE), default >>>>>>>>> fwd mode being "iofwd" and the Rx metadata is only referenced >>> when >>>>>>>>> dumping packets. >>>>>>>>> >>>>>>>>> >>>>>>>>>> Do we have similar features disables by default? >>>>>>>>>> I mean do we know features in testpmd which require a "double >>>>>>>>>> enablement" >>>>>>>>>> like one configuration command + one rte_flow rule? >>>>>>>>> >>>>>>>>> Spec itself is that way i.e "RTE_FLOW_RULE + >>>>>>>>> RX_METADATA_NEGOTIATE(once)" >>>>>>>>> >>>>>>>>> Isn't it enough if >>>>>>>>> >>>>>>>>> #1 We have enough print when rte_flow is being create without >>>>>>>>> negotiation done and ask user to enable rx metadata using >>>>>>>>> "port config <port_id>..." >>>>>>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " >>>>>>>>> --rx-metadata") like other features to avoid calling another >>>>>>>>> command before rte flow create. >>>>>>>> >>>>>>>> I'm not sure what is best. >>>>>>>> I will let others discuss this part. >>>>>>> >>>>>>> IMO, enabling something always defeat the purpose to negotiate. IMO, >>>>>>> someone needs to negotiate >>>>>>> for a feature if the feature is needed. I think, the double enablement >>>>>>> is part of the spec itself. In case, The PMD >>>>>>> drivers won't like double enablement, no need to implement the PMD >>>>>>> callback. That way, there is no change in the existing flow. >>>>>>> >>>>>>> The reason why cnxk driver thought of leveraging negotiate() feature >>>>>>> so that it helps for optimization. e.s.p >>>>>>> function template for multiprocess case as we know what features >>>>>>> needed in fastpath upfront. >>>>>>> >>>>>>> If there still concerns with patch we can take up this to TB decide >>>>>>> one way or another to make forward progress. Let us know. >>>>>> >>>>>> Ferruh, Andrew, Ori, Ivan, what is your opinion? >>>>>> Let's progress with this patch to make it in -rc1. >>>> >>>> As I understand all agreed that we need testpmd command to >>>> control negotiated Rx metadata. May be even command-line >>>> option would be useful. >>>> >>>> So, remaining question is what should be the default value in >>>> testpmd. Note that it is just testpmd question since default >>>> value in an abstract application is nothing negotiated >>>> (if I'm not mistaken). >>>> >>>> The key advantaan ge of the current behaviour is to avoid >>>> "double-enabling" in testpmd. It preserves behaviour which >>>> we had before before the API addition. It is a strong >>>> argument. Basically it puts the feature into the same >>>> basket as FAST_FREE - need an action to run faster. >>> >>> I think, there is a disconnect here. FAST_FREE is enabled by default. Sorry, I'm lost here. Don't we need to enable FAST_FREE offload? As far as I know all offloads are disabled by default. >>> i.e We don't need any specific action to run faster. To align with performance >>> test application, by default the configuration should be run faster. User >>> needs to give explicit configuration to allow more offload or the one causes >>> the mpps drops. IMO, That is the theme followed in testpmd. >>> >>> >> I agree with Andrew, the default should stay the same, as now, PMD may already implement >> logic to only enable the feature if there is a flow rule. >> Changing the default will result in breaking applications. > > That's not what is discussed here. > We are talking only about testpmd default. > >> I want to suggest new approach for this feature, >> maybe we can use the rte_flow_configure, and add a new bit that says if those >> actions are going to be used. >> What do you think? > > Let's not change the API please. > > >>>> I see no problem in such approach. >>>> >>>> The key disadvantage is the difference in testpmd and >>>> other applications default behaviour. >>>> >>>> I'd look at the feature in the following way: >>>> if an application theoretically wants to use >>>> USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate >>>> corresponding Rx metadata to ensure that the feature is >>>> available and HW is informed that application may need it. >>>> Since testpmd supports corresponding flow API actions and >>>> flow tunnels, it tries to negotiate it by default, but do >>>> not fail if the negotiation fails. >>>> >>>> So, I'd would vote to keeping the default value as is. >>>> >> > > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 9:07 ` Andrew Rybchenko @ 2023-02-01 9:14 ` Jerin Jacob 2023-02-01 9:29 ` Andrew Rybchenko 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 9:14 UTC (permalink / raw) To: Andrew Rybchenko Cc: Thomas Monjalon, Ori Kam, Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 2:37 PM Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> wrote: > > On 2/1/23 12:05, Thomas Monjalon wrote: > > 01/02/2023 10:00, Ori Kam: > >> Hi all, > >> > >> Sorry for jumping in late, > >> > >>> -----Original Message----- > >>> From: Jerin Jacob <jerinjacobk@gmail.com> > >>> Sent: Wednesday, 1 February 2023 10:53 > >>> > >>> On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko > >>> <andrew.rybchenko@oktetlabs.ru> wrote: > >>>> > >>>> On 2/1/23 09:10, Ivan Malov wrote: > >>>>> Hello everyone, > >>>>> > >>>>> Since making automatic, or implicit, offload decisions does > >>>>> not belong in testpmd responsibility domain, it should be > >>>>> safer to avoid calling the "negotiate metadata delivery" > >>>>> API with some default selection unless the user asks to > >>>>> do so explicitly, via internal CLI or app options. > >>>>> > >>>>> With that in mind, port config <port_id> ... sounds OK. > >>>>> > >>>>> PMDs that support flow primitives which can generate metadata > >>>>> but, if in started state, can't enable its delivery may pass > >>>>> appropriate rte_error messages to the user suggesting > >>>>> they enable delivery of such metadata from NIC to PMD > >>>>> first. This way, if the person operating testpmd > >>>>> enters a flow create command and that fails, > >>>>> they can figure out the inconsistency, stop > >>>>> the port, negotiate, start and try again. > >>>>> > >>>>> As for non-debug applications, their developers shall > >>>>> be properly informed about the problem of enabling > >>>>> delivery of metadata from NIC to PMD. This way, > >>>>> they will invoke the negotiate API by default > >>>>> in their apps, with the feature selection (eg. > >>>>> MARK) as per nature of the app's business. > >>>>> > >>>>> This API should indeed be helpful to some PMDs with > >>>>> regard to collecting upfront knowledge like this. > >>>>> At the same time, should be benign to those PMDs > >>>>> who do not need this knowledge and can enable > >>>>> delivery of metadata right when inserting the > >>>>> flow rules. So I hope the API does not create > >>>>> too much discomfort to vendors not needing it. > >>>>> > >>>>> Thank you. > >>>>> > >>>>> On Wed, 1 Feb 2023, Thomas Monjalon wrote: > >>>>> > >>>>>> 31/01/2023 17:17, Jerin Jacob: > >>>>>>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon > >>> <thomas@monjalon.net> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: > >>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: > >>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>>>>>>>> Ferruh is proposing to have a command "port config <port_id> > >>> ..." > >>>>>>>>>>>> to configure the flags to negotiate. > >>>>>>>>>>>> Are you OK with this approach? > >>>>>>>>>>> > >>>>>>>>>>> Yes, we are fine to have such command to enable and disable the > >>>>>>>>>>> feature > >>>>>>>>>>> with default being it disabled if supported by PMD. > >>>>>>>>>>> Is default being disabled fine if the feature is supported by a > >>>>>>>>>>> PMD ? > >>>>>>>>>> > >>>>>>>>>> I think the default should be enabled for ease of use. > >>>>>>>>> > >>>>>>>>> Since testpmd is used extensively for benchmarking purposes, we > >>>>>>>>> thought it should have minimum features > >>>>>>>>> enabled by default. The default testpmd doesn't have any Rx/Tx > >>>>>>>>> offloads enabled(except for FAST FREE), default > >>>>>>>>> fwd mode being "iofwd" and the Rx metadata is only referenced > >>> when > >>>>>>>>> dumping packets. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>> Do we have similar features disables by default? > >>>>>>>>>> I mean do we know features in testpmd which require a "double > >>>>>>>>>> enablement" > >>>>>>>>>> like one configuration command + one rte_flow rule? > >>>>>>>>> > >>>>>>>>> Spec itself is that way i.e "RTE_FLOW_RULE + > >>>>>>>>> RX_METADATA_NEGOTIATE(once)" > >>>>>>>>> > >>>>>>>>> Isn't it enough if > >>>>>>>>> > >>>>>>>>> #1 We have enough print when rte_flow is being create without > >>>>>>>>> negotiation done and ask user to enable rx metadata using > >>>>>>>>> "port config <port_id>..." > >>>>>>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " > >>>>>>>>> --rx-metadata") like other features to avoid calling another > >>>>>>>>> command before rte flow create. > >>>>>>>> > >>>>>>>> I'm not sure what is best. > >>>>>>>> I will let others discuss this part. > >>>>>>> > >>>>>>> IMO, enabling something always defeat the purpose to negotiate. IMO, > >>>>>>> someone needs to negotiate > >>>>>>> for a feature if the feature is needed. I think, the double enablement > >>>>>>> is part of the spec itself. In case, The PMD > >>>>>>> drivers won't like double enablement, no need to implement the PMD > >>>>>>> callback. That way, there is no change in the existing flow. > >>>>>>> > >>>>>>> The reason why cnxk driver thought of leveraging negotiate() feature > >>>>>>> so that it helps for optimization. e.s.p > >>>>>>> function template for multiprocess case as we know what features > >>>>>>> needed in fastpath upfront. > >>>>>>> > >>>>>>> If there still concerns with patch we can take up this to TB decide > >>>>>>> one way or another to make forward progress. Let us know. > >>>>>> > >>>>>> Ferruh, Andrew, Ori, Ivan, what is your opinion? > >>>>>> Let's progress with this patch to make it in -rc1. > >>>> > >>>> As I understand all agreed that we need testpmd command to > >>>> control negotiated Rx metadata. May be even command-line > >>>> option would be useful. > >>>> > >>>> So, remaining question is what should be the default value in > >>>> testpmd. Note that it is just testpmd question since default > >>>> value in an abstract application is nothing negotiated > >>>> (if I'm not mistaken). > >>>> > >>>> The key advantaan ge of the current behaviour is to avoid > >>>> "double-enabling" in testpmd. It preserves behaviour which > >>>> we had before before the API addition. It is a strong > >>>> argument. Basically it puts the feature into the same > >>>> basket as FAST_FREE - need an action to run faster. > >>> > >>> I think, there is a disconnect here. FAST_FREE is enabled by default. > > Sorry, I'm lost here. Don't we need to enable FAST_FREE > offload? As far as I know all offloads are disabled by default. Not the case for FAST_FREE as disabling needs "more cycles on processor" side. See app/test-pmd/testpmd.c /* * Ethernet device configuration. */ struct rte_eth_rxmode rx_mode; struct rte_eth_txmode tx_mode = { .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, }; > > >>> i.e We don't need any specific action to run faster. To align with performance > >>> test application, by default the configuration should be run faster. User > >>> needs to give explicit configuration to allow more offload or the one causes > >>> the mpps drops. IMO, That is the theme followed in testpmd. > >>> > >>> > >> I agree with Andrew, the default should stay the same, as now, PMD may already implement > >> logic to only enable the feature if there is a flow rule. > >> Changing the default will result in breaking applications. > > > > That's not what is discussed here. > > We are talking only about testpmd default. > > > >> I want to suggest new approach for this feature, > >> maybe we can use the rte_flow_configure, and add a new bit that says if those > >> actions are going to be used. > >> What do you think? > > > > Let's not change the API please. > > > > > >>>> I see no problem in such approach. > >>>> > >>>> The key disadvantage is the difference in testpmd and > >>>> other applications default behaviour. > >>>> > >>>> I'd look at the feature in the following way: > >>>> if an application theoretically wants to use > >>>> USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate > >>>> corresponding Rx metadata to ensure that the feature is > >>>> available and HW is informed that application may need it. > >>>> Since testpmd supports corresponding flow API actions and > >>>> flow tunnels, it tries to negotiate it by default, but do > >>>> not fail if the negotiation fails. > >>>> > >>>> So, I'd would vote to keeping the default value as is. > >>>> > >> > > > > > > > > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 9:14 ` Jerin Jacob @ 2023-02-01 9:29 ` Andrew Rybchenko 2023-02-01 10:48 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Andrew Rybchenko @ 2023-02-01 9:29 UTC (permalink / raw) To: Jerin Jacob Cc: Thomas Monjalon, Ori Kam, Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/23 12:14, Jerin Jacob wrote: > On Wed, Feb 1, 2023 at 2:37 PM Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru> wrote: >> >> On 2/1/23 12:05, Thomas Monjalon wrote: >>> 01/02/2023 10:00, Ori Kam: >>>> Hi all, >>>> >>>> Sorry for jumping in late, >>>> >>>>> -----Original Message----- >>>>> From: Jerin Jacob <jerinjacobk@gmail.com> >>>>> Sent: Wednesday, 1 February 2023 10:53 >>>>> >>>>> On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko >>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>> >>>>>> On 2/1/23 09:10, Ivan Malov wrote: >>>>>>> Hello everyone, >>>>>>> >>>>>>> Since making automatic, or implicit, offload decisions does >>>>>>> not belong in testpmd responsibility domain, it should be >>>>>>> safer to avoid calling the "negotiate metadata delivery" >>>>>>> API with some default selection unless the user asks to >>>>>>> do so explicitly, via internal CLI or app options. >>>>>>> >>>>>>> With that in mind, port config <port_id> ... sounds OK. >>>>>>> >>>>>>> PMDs that support flow primitives which can generate metadata >>>>>>> but, if in started state, can't enable its delivery may pass >>>>>>> appropriate rte_error messages to the user suggesting >>>>>>> they enable delivery of such metadata from NIC to PMD >>>>>>> first. This way, if the person operating testpmd >>>>>>> enters a flow create command and that fails, >>>>>>> they can figure out the inconsistency, stop >>>>>>> the port, negotiate, start and try again. >>>>>>> >>>>>>> As for non-debug applications, their developers shall >>>>>>> be properly informed about the problem of enabling >>>>>>> delivery of metadata from NIC to PMD. This way, >>>>>>> they will invoke the negotiate API by default >>>>>>> in their apps, with the feature selection (eg. >>>>>>> MARK) as per nature of the app's business. >>>>>>> >>>>>>> This API should indeed be helpful to some PMDs with >>>>>>> regard to collecting upfront knowledge like this. >>>>>>> At the same time, should be benign to those PMDs >>>>>>> who do not need this knowledge and can enable >>>>>>> delivery of metadata right when inserting the >>>>>>> flow rules. So I hope the API does not create >>>>>>> too much discomfort to vendors not needing it. >>>>>>> >>>>>>> Thank you. >>>>>>> >>>>>>> On Wed, 1 Feb 2023, Thomas Monjalon wrote: >>>>>>> >>>>>>>> 31/01/2023 17:17, Jerin Jacob: >>>>>>>>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon >>>>> <thomas@monjalon.net> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: >>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: >>>>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>>>>>> Ferruh is proposing to have a command "port config <port_id> >>>>> ..." >>>>>>>>>>>>>> to configure the flags to negotiate. >>>>>>>>>>>>>> Are you OK with this approach? >>>>>>>>>>>>> >>>>>>>>>>>>> Yes, we are fine to have such command to enable and disable the >>>>>>>>>>>>> feature >>>>>>>>>>>>> with default being it disabled if supported by PMD. >>>>>>>>>>>>> Is default being disabled fine if the feature is supported by a >>>>>>>>>>>>> PMD ? >>>>>>>>>>>> >>>>>>>>>>>> I think the default should be enabled for ease of use. >>>>>>>>>>> >>>>>>>>>>> Since testpmd is used extensively for benchmarking purposes, we >>>>>>>>>>> thought it should have minimum features >>>>>>>>>>> enabled by default. The default testpmd doesn't have any Rx/Tx >>>>>>>>>>> offloads enabled(except for FAST FREE), default >>>>>>>>>>> fwd mode being "iofwd" and the Rx metadata is only referenced >>>>> when >>>>>>>>>>> dumping packets. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> Do we have similar features disables by default? >>>>>>>>>>>> I mean do we know features in testpmd which require a "double >>>>>>>>>>>> enablement" >>>>>>>>>>>> like one configuration command + one rte_flow rule? >>>>>>>>>>> >>>>>>>>>>> Spec itself is that way i.e "RTE_FLOW_RULE + >>>>>>>>>>> RX_METADATA_NEGOTIATE(once)" >>>>>>>>>>> >>>>>>>>>>> Isn't it enough if >>>>>>>>>>> >>>>>>>>>>> #1 We have enough print when rte_flow is being create without >>>>>>>>>>> negotiation done and ask user to enable rx metadata using >>>>>>>>>>> "port config <port_id>..." >>>>>>>>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " >>>>>>>>>>> --rx-metadata") like other features to avoid calling another >>>>>>>>>>> command before rte flow create. >>>>>>>>>> >>>>>>>>>> I'm not sure what is best. >>>>>>>>>> I will let others discuss this part. >>>>>>>>> >>>>>>>>> IMO, enabling something always defeat the purpose to negotiate. IMO, >>>>>>>>> someone needs to negotiate >>>>>>>>> for a feature if the feature is needed. I think, the double enablement >>>>>>>>> is part of the spec itself. In case, The PMD >>>>>>>>> drivers won't like double enablement, no need to implement the PMD >>>>>>>>> callback. That way, there is no change in the existing flow. >>>>>>>>> >>>>>>>>> The reason why cnxk driver thought of leveraging negotiate() feature >>>>>>>>> so that it helps for optimization. e.s.p >>>>>>>>> function template for multiprocess case as we know what features >>>>>>>>> needed in fastpath upfront. >>>>>>>>> >>>>>>>>> If there still concerns with patch we can take up this to TB decide >>>>>>>>> one way or another to make forward progress. Let us know. >>>>>>>> >>>>>>>> Ferruh, Andrew, Ori, Ivan, what is your opinion? >>>>>>>> Let's progress with this patch to make it in -rc1. >>>>>> >>>>>> As I understand all agreed that we need testpmd command to >>>>>> control negotiated Rx metadata. May be even command-line >>>>>> option would be useful. >>>>>> >>>>>> So, remaining question is what should be the default value in >>>>>> testpmd. Note that it is just testpmd question since default >>>>>> value in an abstract application is nothing negotiated >>>>>> (if I'm not mistaken). >>>>>> >>>>>> The key advantaan ge of the current behaviour is to avoid >>>>>> "double-enabling" in testpmd. It preserves behaviour which >>>>>> we had before before the API addition. It is a strong >>>>>> argument. Basically it puts the feature into the same >>>>>> basket as FAST_FREE - need an action to run faster. >>>>> >>>>> I think, there is a disconnect here. FAST_FREE is enabled by default. >> >> Sorry, I'm lost here. Don't we need to enable FAST_FREE >> offload? As far as I know all offloads are disabled by default. > > Not the case for FAST_FREE as disabling needs "more cycles on processor" side. > > See app/test-pmd/testpmd.c > /* > * Ethernet device configuration. > */ > struct rte_eth_rxmode rx_mode; > > struct rte_eth_txmode tx_mode = { > .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, > }; > Surprised, thanks. So, it one more difference of the testpmd defaults from an abstract application. >> >>>>> i.e We don't need any specific action to run faster. To align with performance >>>>> test application, by default the configuration should be run faster. User >>>>> needs to give explicit configuration to allow more offload or the one causes >>>>> the mpps drops. IMO, That is the theme followed in testpmd. >>>>> >>>>> >>>> I agree with Andrew, the default should stay the same, as now, PMD may already implement >>>> logic to only enable the feature if there is a flow rule. >>>> Changing the default will result in breaking applications. >>> >>> That's not what is discussed here. >>> We are talking only about testpmd default. >>> >>>> I want to suggest new approach for this feature, >>>> maybe we can use the rte_flow_configure, and add a new bit that says if those >>>> actions are going to be used. >>>> What do you think? >>> >>> Let's not change the API please. >>> >>> >>>>>> I see no problem in such approach. >>>>>> >>>>>> The key disadvantage is the difference in testpmd and >>>>>> other applications default behaviour. >>>>>> >>>>>> I'd look at the feature in the following way: >>>>>> if an application theoretically wants to use >>>>>> USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate >>>>>> corresponding Rx metadata to ensure that the feature is >>>>>> available and HW is informed that application may need it. >>>>>> Since testpmd supports corresponding flow API actions and >>>>>> flow tunnels, it tries to negotiate it by default, but do >>>>>> not fail if the negotiation fails. >>>>>> >>>>>> So, I'd would vote to keeping the default value as is. Two above paragraphs still stand. Frankly speaking I don't understand why default value is so important if we have a way to change it. Reasons should be really strong to change existing defaults. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 9:29 ` Andrew Rybchenko @ 2023-02-01 10:48 ` Jerin Jacob 2023-02-01 10:58 ` Andrew Rybchenko 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 10:48 UTC (permalink / raw) To: Andrew Rybchenko Cc: Thomas Monjalon, Ori Kam, Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> wrote: > > On 2/1/23 12:14, Jerin Jacob wrote: > > On Wed, Feb 1, 2023 at 2:37 PM Andrew Rybchenko > > <andrew.rybchenko@oktetlabs.ru> wrote: > >> > >> On 2/1/23 12:05, Thomas Monjalon wrote: > >>> 01/02/2023 10:00, Ori Kam: > >>>> Hi all, > >>>> > >>>> Sorry for jumping in late, > >>>> > >>>>> -----Original Message----- > >>>>> From: Jerin Jacob <jerinjacobk@gmail.com> > >>>>> Sent: Wednesday, 1 February 2023 10:53 > >>>>> > >>>>> On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko > >>>>> <andrew.rybchenko@oktetlabs.ru> wrote: > >>>>>> > >>>>>> On 2/1/23 09:10, Ivan Malov wrote: > >>>>>>> Hello everyone, > >>>>>>> > >>>>>>> Since making automatic, or implicit, offload decisions does > >>>>>>> not belong in testpmd responsibility domain, it should be > >>>>>>> safer to avoid calling the "negotiate metadata delivery" > >>>>>>> API with some default selection unless the user asks to > >>>>>>> do so explicitly, via internal CLI or app options. > >>>>>>> > >>>>>>> With that in mind, port config <port_id> ... sounds OK. > >>>>>>> > >>>>>>> PMDs that support flow primitives which can generate metadata > >>>>>>> but, if in started state, can't enable its delivery may pass > >>>>>>> appropriate rte_error messages to the user suggesting > >>>>>>> they enable delivery of such metadata from NIC to PMD > >>>>>>> first. This way, if the person operating testpmd > >>>>>>> enters a flow create command and that fails, > >>>>>>> they can figure out the inconsistency, stop > >>>>>>> the port, negotiate, start and try again. > >>>>>>> > >>>>>>> As for non-debug applications, their developers shall > >>>>>>> be properly informed about the problem of enabling > >>>>>>> delivery of metadata from NIC to PMD. This way, > >>>>>>> they will invoke the negotiate API by default > >>>>>>> in their apps, with the feature selection (eg. > >>>>>>> MARK) as per nature of the app's business. > >>>>>>> > >>>>>>> This API should indeed be helpful to some PMDs with > >>>>>>> regard to collecting upfront knowledge like this. > >>>>>>> At the same time, should be benign to those PMDs > >>>>>>> who do not need this knowledge and can enable > >>>>>>> delivery of metadata right when inserting the > >>>>>>> flow rules. So I hope the API does not create > >>>>>>> too much discomfort to vendors not needing it. > >>>>>>> > >>>>>>> Thank you. > >>>>>>> > >>>>>>> On Wed, 1 Feb 2023, Thomas Monjalon wrote: > >>>>>>> > >>>>>>>> 31/01/2023 17:17, Jerin Jacob: > >>>>>>>>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon > >>>>> <thomas@monjalon.net> > >>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: > >>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>>>>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: > >>>>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> > >>>>>>>>>>>>>> Ferruh is proposing to have a command "port config <port_id> > >>>>> ..." > >>>>>>>>>>>>>> to configure the flags to negotiate. > >>>>>>>>>>>>>> Are you OK with this approach? > >>>>>>>>>>>>> > >>>>>>>>>>>>> Yes, we are fine to have such command to enable and disable the > >>>>>>>>>>>>> feature > >>>>>>>>>>>>> with default being it disabled if supported by PMD. > >>>>>>>>>>>>> Is default being disabled fine if the feature is supported by a > >>>>>>>>>>>>> PMD ? > >>>>>>>>>>>> > >>>>>>>>>>>> I think the default should be enabled for ease of use. > >>>>>>>>>>> > >>>>>>>>>>> Since testpmd is used extensively for benchmarking purposes, we > >>>>>>>>>>> thought it should have minimum features > >>>>>>>>>>> enabled by default. The default testpmd doesn't have any Rx/Tx > >>>>>>>>>>> offloads enabled(except for FAST FREE), default > >>>>>>>>>>> fwd mode being "iofwd" and the Rx metadata is only referenced > >>>>> when > >>>>>>>>>>> dumping packets. > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> Do we have similar features disables by default? > >>>>>>>>>>>> I mean do we know features in testpmd which require a "double > >>>>>>>>>>>> enablement" > >>>>>>>>>>>> like one configuration command + one rte_flow rule? > >>>>>>>>>>> > >>>>>>>>>>> Spec itself is that way i.e "RTE_FLOW_RULE + > >>>>>>>>>>> RX_METADATA_NEGOTIATE(once)" > >>>>>>>>>>> > >>>>>>>>>>> Isn't it enough if > >>>>>>>>>>> > >>>>>>>>>>> #1 We have enough print when rte_flow is being create without > >>>>>>>>>>> negotiation done and ask user to enable rx metadata using > >>>>>>>>>>> "port config <port_id>..." > >>>>>>>>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " > >>>>>>>>>>> --rx-metadata") like other features to avoid calling another > >>>>>>>>>>> command before rte flow create. > >>>>>>>>>> > >>>>>>>>>> I'm not sure what is best. > >>>>>>>>>> I will let others discuss this part. > >>>>>>>>> > >>>>>>>>> IMO, enabling something always defeat the purpose to negotiate. IMO, > >>>>>>>>> someone needs to negotiate > >>>>>>>>> for a feature if the feature is needed. I think, the double enablement > >>>>>>>>> is part of the spec itself. In case, The PMD > >>>>>>>>> drivers won't like double enablement, no need to implement the PMD > >>>>>>>>> callback. That way, there is no change in the existing flow. > >>>>>>>>> > >>>>>>>>> The reason why cnxk driver thought of leveraging negotiate() feature > >>>>>>>>> so that it helps for optimization. e.s.p > >>>>>>>>> function template for multiprocess case as we know what features > >>>>>>>>> needed in fastpath upfront. > >>>>>>>>> > >>>>>>>>> If there still concerns with patch we can take up this to TB decide > >>>>>>>>> one way or another to make forward progress. Let us know. > >>>>>>>> > >>>>>>>> Ferruh, Andrew, Ori, Ivan, what is your opinion? > >>>>>>>> Let's progress with this patch to make it in -rc1. > >>>>>> > >>>>>> As I understand all agreed that we need testpmd command to > >>>>>> control negotiated Rx metadata. May be even command-line > >>>>>> option would be useful. > >>>>>> > >>>>>> So, remaining question is what should be the default value in > >>>>>> testpmd. Note that it is just testpmd question since default > >>>>>> value in an abstract application is nothing negotiated > >>>>>> (if I'm not mistaken). > >>>>>> > >>>>>> The key advantaan ge of the current behaviour is to avoid > >>>>>> "double-enabling" in testpmd. It preserves behaviour which > >>>>>> we had before before the API addition. It is a strong > >>>>>> argument. Basically it puts the feature into the same > >>>>>> basket as FAST_FREE - need an action to run faster. > >>>>> > >>>>> I think, there is a disconnect here. FAST_FREE is enabled by default. > >> > >> Sorry, I'm lost here. Don't we need to enable FAST_FREE > >> offload? As far as I know all offloads are disabled by default. > > > > Not the case for FAST_FREE as disabling needs "more cycles on processor" side. > > > > See app/test-pmd/testpmd.c > > /* > > * Ethernet device configuration. > > */ > > struct rte_eth_rxmode rx_mode; > > > > struct rte_eth_txmode tx_mode = { > > .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, > > }; > > > > Surprised, thanks. So, it one more difference of the testpmd > defaults from an abstract application. It is not, even l2fwd is same as testpmd. In my view, the ideal application just to select what is really needed. > > >> > >>>>> i.e We don't need any specific action to run faster. To align with performance > >>>>> test application, by default the configuration should be run faster. User > >>>>> needs to give explicit configuration to allow more offload or the one causes > >>>>> the mpps drops. IMO, That is the theme followed in testpmd. > >>>>> > >>>>> > >>>> I agree with Andrew, the default should stay the same, as now, PMD may already implement > >>>> logic to only enable the feature if there is a flow rule. > >>>> Changing the default will result in breaking applications. > >>> > >>> That's not what is discussed here. > >>> We are talking only about testpmd default. > >>> > >>>> I want to suggest new approach for this feature, > >>>> maybe we can use the rte_flow_configure, and add a new bit that says if those > >>>> actions are going to be used. > >>>> What do you think? > >>> > >>> Let's not change the API please. > >>> > >>> > >>>>>> I see no problem in such approach. > >>>>>> > >>>>>> The key disadvantage is the difference in testpmd and > >>>>>> other applications default behaviour. But none of the other applications in not negotiating by default. > >>>>>> > >>>>>> I'd look at the feature in the following way: > >>>>>> if an application theoretically wants to use > >>>>>> USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate > >>>>>> corresponding Rx metadata to ensure that the feature is > >>>>>> available and HW is informed that application may need it. > >>>>>> Since testpmd supports corresponding flow API actions and > >>>>>> flow tunnels, it tries to negotiate it by default, but do > >>>>>> not fail if the negotiation fails. > >>>>>> > >>>>>> So, I'd would vote to keeping the default value as is. > > Two above paragraphs still stand. > > Frankly speaking I don't understand why default value is so > important if we have a way to change it. Reasons should be > really strong to change existing defaults. The only reason is, typically testpmd will be used performance benchmarking as an industry standard. It is difficult to tell/educate the QA or customers that, "BTW if you need to get better performance add more flag to testpmd command line". To make that worst, only some PMD needs to give the additional parameter to get better number. And also, testpmd usage will be treated as application modeling. Since this feature only used on sfc and cnxk driver, What is the situation with sfc driver? Keeping it as negotiated and not use the feature, will impact the per core performance of sfc or is it just PCI bandwidth thing which really dont show any difference in testpmd? ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 10:48 ` Jerin Jacob @ 2023-02-01 10:58 ` Andrew Rybchenko 2023-02-01 11:04 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Andrew Rybchenko @ 2023-02-01 10:58 UTC (permalink / raw) To: Jerin Jacob Cc: Thomas Monjalon, Ori Kam, Ivan Malov, Ivan Malov, Ferruh Yigit, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/23 13:48, Jerin Jacob wrote: > On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru> wrote: >> >> On 2/1/23 12:14, Jerin Jacob wrote: >>> On Wed, Feb 1, 2023 at 2:37 PM Andrew Rybchenko >>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>> >>>> On 2/1/23 12:05, Thomas Monjalon wrote: >>>>> 01/02/2023 10:00, Ori Kam: >>>>>> Hi all, >>>>>> >>>>>> Sorry for jumping in late, >>>>>> >>>>>>> -----Original Message----- >>>>>>> From: Jerin Jacob <jerinjacobk@gmail.com> >>>>>>> Sent: Wednesday, 1 February 2023 10:53 >>>>>>> >>>>>>> On Wed, Feb 1, 2023 at 12:46 PM Andrew Rybchenko >>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>> >>>>>>>> On 2/1/23 09:10, Ivan Malov wrote: >>>>>>>>> Hello everyone, >>>>>>>>> >>>>>>>>> Since making automatic, or implicit, offload decisions does >>>>>>>>> not belong in testpmd responsibility domain, it should be >>>>>>>>> safer to avoid calling the "negotiate metadata delivery" >>>>>>>>> API with some default selection unless the user asks to >>>>>>>>> do so explicitly, via internal CLI or app options. >>>>>>>>> >>>>>>>>> With that in mind, port config <port_id> ... sounds OK. >>>>>>>>> >>>>>>>>> PMDs that support flow primitives which can generate metadata >>>>>>>>> but, if in started state, can't enable its delivery may pass >>>>>>>>> appropriate rte_error messages to the user suggesting >>>>>>>>> they enable delivery of such metadata from NIC to PMD >>>>>>>>> first. This way, if the person operating testpmd >>>>>>>>> enters a flow create command and that fails, >>>>>>>>> they can figure out the inconsistency, stop >>>>>>>>> the port, negotiate, start and try again. >>>>>>>>> >>>>>>>>> As for non-debug applications, their developers shall >>>>>>>>> be properly informed about the problem of enabling >>>>>>>>> delivery of metadata from NIC to PMD. This way, >>>>>>>>> they will invoke the negotiate API by default >>>>>>>>> in their apps, with the feature selection (eg. >>>>>>>>> MARK) as per nature of the app's business. >>>>>>>>> >>>>>>>>> This API should indeed be helpful to some PMDs with >>>>>>>>> regard to collecting upfront knowledge like this. >>>>>>>>> At the same time, should be benign to those PMDs >>>>>>>>> who do not need this knowledge and can enable >>>>>>>>> delivery of metadata right when inserting the >>>>>>>>> flow rules. So I hope the API does not create >>>>>>>>> too much discomfort to vendors not needing it. >>>>>>>>> >>>>>>>>> Thank you. >>>>>>>>> >>>>>>>>> On Wed, 1 Feb 2023, Thomas Monjalon wrote: >>>>>>>>> >>>>>>>>>> 31/01/2023 17:17, Jerin Jacob: >>>>>>>>>>> On Fri, Jan 27, 2023 at 8:31 PM Thomas Monjalon >>>>>>> <thomas@monjalon.net> >>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> 27/01/2023 11:42, Nithin Kumar Dabilpuram: >>>>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>>>>>> 27/01/2023 06:02, Nithin Kumar Dabilpuram: >>>>>>>>>>>>>>> From: Thomas Monjalon <thomas@monjalon.net> >>>>>>>>>>>>>>>> Ferruh is proposing to have a command "port config <port_id> >>>>>>> ..." >>>>>>>>>>>>>>>> to configure the flags to negotiate. >>>>>>>>>>>>>>>> Are you OK with this approach? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Yes, we are fine to have such command to enable and disable the >>>>>>>>>>>>>>> feature >>>>>>>>>>>>>>> with default being it disabled if supported by PMD. >>>>>>>>>>>>>>> Is default being disabled fine if the feature is supported by a >>>>>>>>>>>>>>> PMD ? >>>>>>>>>>>>>> >>>>>>>>>>>>>> I think the default should be enabled for ease of use. >>>>>>>>>>>>> >>>>>>>>>>>>> Since testpmd is used extensively for benchmarking purposes, we >>>>>>>>>>>>> thought it should have minimum features >>>>>>>>>>>>> enabled by default. The default testpmd doesn't have any Rx/Tx >>>>>>>>>>>>> offloads enabled(except for FAST FREE), default >>>>>>>>>>>>> fwd mode being "iofwd" and the Rx metadata is only referenced >>>>>>> when >>>>>>>>>>>>> dumping packets. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> Do we have similar features disables by default? >>>>>>>>>>>>>> I mean do we know features in testpmd which require a "double >>>>>>>>>>>>>> enablement" >>>>>>>>>>>>>> like one configuration command + one rte_flow rule? >>>>>>>>>>>>> >>>>>>>>>>>>> Spec itself is that way i.e "RTE_FLOW_RULE + >>>>>>>>>>>>> RX_METADATA_NEGOTIATE(once)" >>>>>>>>>>>>> >>>>>>>>>>>>> Isn't it enough if >>>>>>>>>>>>> >>>>>>>>>>>>> #1 We have enough print when rte_flow is being create without >>>>>>>>>>>>> negotiation done and ask user to enable rx metadata using >>>>>>>>>>>>> "port config <port_id>..." >>>>>>>>>>>>> #2 Provide testpmd app arg to enable Rx metadata(for example " >>>>>>>>>>>>> --rx-metadata") like other features to avoid calling another >>>>>>>>>>>>> command before rte flow create. >>>>>>>>>>>> >>>>>>>>>>>> I'm not sure what is best. >>>>>>>>>>>> I will let others discuss this part. >>>>>>>>>>> >>>>>>>>>>> IMO, enabling something always defeat the purpose to negotiate. IMO, >>>>>>>>>>> someone needs to negotiate >>>>>>>>>>> for a feature if the feature is needed. I think, the double enablement >>>>>>>>>>> is part of the spec itself. In case, The PMD >>>>>>>>>>> drivers won't like double enablement, no need to implement the PMD >>>>>>>>>>> callback. That way, there is no change in the existing flow. >>>>>>>>>>> >>>>>>>>>>> The reason why cnxk driver thought of leveraging negotiate() feature >>>>>>>>>>> so that it helps for optimization. e.s.p >>>>>>>>>>> function template for multiprocess case as we know what features >>>>>>>>>>> needed in fastpath upfront. >>>>>>>>>>> >>>>>>>>>>> If there still concerns with patch we can take up this to TB decide >>>>>>>>>>> one way or another to make forward progress. Let us know. >>>>>>>>>> >>>>>>>>>> Ferruh, Andrew, Ori, Ivan, what is your opinion? >>>>>>>>>> Let's progress with this patch to make it in -rc1. >>>>>>>> >>>>>>>> As I understand all agreed that we need testpmd command to >>>>>>>> control negotiated Rx metadata. May be even command-line >>>>>>>> option would be useful. >>>>>>>> >>>>>>>> So, remaining question is what should be the default value in >>>>>>>> testpmd. Note that it is just testpmd question since default >>>>>>>> value in an abstract application is nothing negotiated >>>>>>>> (if I'm not mistaken). >>>>>>>> >>>>>>>> The key advantaan ge of the current behaviour is to avoid >>>>>>>> "double-enabling" in testpmd. It preserves behaviour which >>>>>>>> we had before before the API addition. It is a strong >>>>>>>> argument. Basically it puts the feature into the same >>>>>>>> basket as FAST_FREE - need an action to run faster. >>>>>>> >>>>>>> I think, there is a disconnect here. FAST_FREE is enabled by default. >>>> >>>> Sorry, I'm lost here. Don't we need to enable FAST_FREE >>>> offload? As far as I know all offloads are disabled by default. >>> >>> Not the case for FAST_FREE as disabling needs "more cycles on processor" side. >>> >>> See app/test-pmd/testpmd.c >>> /* >>> * Ethernet device configuration. >>> */ >>> struct rte_eth_rxmode rx_mode; >>> >>> struct rte_eth_txmode tx_mode = { >>> .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, >>> }; >>> >> >> Surprised, thanks. So, it one more difference of the testpmd >> defaults from an abstract application. > > It is not, even l2fwd is same as testpmd. In my view, the ideal > application just to select what is > really needed. > >> >>>> >>>>>>> i.e We don't need any specific action to run faster. To align with performance >>>>>>> test application, by default the configuration should be run faster. User >>>>>>> needs to give explicit configuration to allow more offload or the one causes >>>>>>> the mpps drops. IMO, That is the theme followed in testpmd. >>>>>>> >>>>>>> >>>>>> I agree with Andrew, the default should stay the same, as now, PMD may already implement >>>>>> logic to only enable the feature if there is a flow rule. >>>>>> Changing the default will result in breaking applications. >>>>> >>>>> That's not what is discussed here. >>>>> We are talking only about testpmd default. >>>>> >>>>>> I want to suggest new approach for this feature, >>>>>> maybe we can use the rte_flow_configure, and add a new bit that says if those >>>>>> actions are going to be used. >>>>>> What do you think? >>>>> >>>>> Let's not change the API please. >>>>> >>>>> >>>>>>>> I see no problem in such approach. >>>>>>>> >>>>>>>> The key disadvantage is the difference in testpmd and >>>>>>>> other applications default behaviour. > > But none of the other applications in not negotiating by default. > >>>>>>>> >>>>>>>> I'd look at the feature in the following way: >>>>>>>> if an application theoretically wants to use >>>>>>>> USER_FLAG, USER_MARK or TUNNEL_ID it must negotiate >>>>>>>> corresponding Rx metadata to ensure that the feature is >>>>>>>> available and HW is informed that application may need it. >>>>>>>> Since testpmd supports corresponding flow API actions and >>>>>>>> flow tunnels, it tries to negotiate it by default, but do >>>>>>>> not fail if the negotiation fails. >>>>>>>> >>>>>>>> So, I'd would vote to keeping the default value as is. >> >> Two above paragraphs still stand. >> >> Frankly speaking I don't understand why default value is so >> important if we have a way to change it. Reasons should be >> really strong to change existing defaults. > > The only reason is, typically testpmd will be used performance > benchmarking as an industry standard. It is difficult to tell/educate > the QA or customers > that, "BTW if you need to get better performance add more flag to > testpmd command line". > To make that worst, only some PMD needs to give the additional > parameter to get better number. > And also, testpmd usage will be treated as application modeling. > > Since this feature only used on sfc and cnxk driver, What is the > situation with sfc driver? > Keeping it as negotiated and not use the feature, will impact the per > core performance of sfc or > is it just PCI bandwidth thing which really dont show any difference in testpmd? Yes, sfc could run faster if no Rx metadata are negotiated. So, it is better to negotiate nothing by default. But it is always painful to change defaults. You need to explain that now you need to negotiate Rx metadata to use mark, flag and tunnel offloads. Yes, it will be required on sfc and cnxk only. As an sfc maintainer I don't mind to change testpmd defaults. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 10:58 ` Andrew Rybchenko @ 2023-02-01 11:04 ` Thomas Monjalon 2023-02-01 11:15 ` Jerin Jacob 2023-02-01 11:20 ` Ivan Malov 0 siblings, 2 replies; 73+ messages in thread From: Thomas Monjalon @ 2023-02-01 11:04 UTC (permalink / raw) To: Jerin Jacob, Andrew Rybchenko, Ferruh Yigit Cc: Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand 01/02/2023 11:58, Andrew Rybchenko: > On 2/1/23 13:48, Jerin Jacob wrote: > > On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > > <andrew.rybchenko@oktetlabs.ru> wrote: > >> Frankly speaking I don't understand why default value is so > >> important if we have a way to change it. Reasons should be > >> really strong to change existing defaults. > > > > The only reason is, typically testpmd will be used performance > > benchmarking as an industry standard. It is difficult to tell/educate > > the QA or customers > > that, "BTW if you need to get better performance add more flag to > > testpmd command line". I disagree. When you do performance benchmark, you tune settings accordingly. > > To make that worst, only some PMD needs to give the additional > > parameter to get better number. > > And also, testpmd usage will be treated as application modeling. > > > > Since this feature only used on sfc and cnxk driver, What is the > > situation with sfc driver? > > Keeping it as negotiated and not use the feature, will impact the per > > core performance of sfc or > > is it just PCI bandwidth thing which really dont show any difference in testpmd? > > Yes, sfc could run faster if no Rx metadata are negotiated. So, > it is better to negotiate nothing by default. But it is always > painful to change defaults. You need to explain that now you > need to negotiate Rx metadata to use mark, flag and tunnel offloads. > Yes, it will be required on sfc and cnxk only. > As an sfc maintainer I don't mind to change testpmd defaults. If we change testpmd defaults to "do nothing", then we should disable MBUF_FAST_FREE as well. ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 11:04 ` Thomas Monjalon @ 2023-02-01 11:15 ` Jerin Jacob 2023-02-01 11:35 ` Ferruh Yigit 2023-02-01 11:20 ` Ivan Malov 1 sibling, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 11:15 UTC (permalink / raw) To: Thomas Monjalon Cc: Andrew Rybchenko, Ferruh Yigit, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: > > 01/02/2023 11:58, Andrew Rybchenko: > > On 2/1/23 13:48, Jerin Jacob wrote: > > > On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > > > <andrew.rybchenko@oktetlabs.ru> wrote: > > >> Frankly speaking I don't understand why default value is so > > >> important if we have a way to change it. Reasons should be > > >> really strong to change existing defaults. > > > > > > The only reason is, typically testpmd will be used performance > > > benchmarking as an industry standard. It is difficult to tell/educate > > > the QA or customers > > > that, "BTW if you need to get better performance add more flag to > > > testpmd command line". > > I disagree. > When you do performance benchmark, you tune settings accordingly. IMO, We tune the system resources like queue depth not the disabling features for raw performance. queue depth etc people know to tune so it is obvious. What is not obvious is, testpmd only negotiated some features by default.I am not using that feature, hence I need to explicitly disable it. > > > > To make that worst, only some PMD needs to give the additional > > > parameter to get better number. > > > And also, testpmd usage will be treated as application modeling. > > > > > > Since this feature only used on sfc and cnxk driver, What is the > > > situation with sfc driver? > > > Keeping it as negotiated and not use the feature, will impact the per > > > core performance of sfc or > > > is it just PCI bandwidth thing which really dont show any difference in testpmd? > > > > Yes, sfc could run faster if no Rx metadata are negotiated. So, > > it is better to negotiate nothing by default. But it is always > > painful to change defaults. You need to explain that now you > > need to negotiate Rx metadata to use mark, flag and tunnel offloads. > > Yes, it will be required on sfc and cnxk only. > > As an sfc maintainer I don't mind to change testpmd defaults. > > If we change testpmd defaults to "do nothing", > then we should disable MBUF_FAST_FREE as well. if you see MBUF_FAST_FREE, it does nothing. Actually, !MBUF_FAST_FREE is doing more work. > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 11:15 ` Jerin Jacob @ 2023-02-01 11:35 ` Ferruh Yigit 2023-02-01 13:48 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-02-01 11:35 UTC (permalink / raw) To: Jerin Jacob, Thomas Monjalon Cc: Andrew Rybchenko, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/2023 11:15 AM, Jerin Jacob wrote: > On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: >> >> 01/02/2023 11:58, Andrew Rybchenko: >>> On 2/1/23 13:48, Jerin Jacob wrote: >>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>> Frankly speaking I don't understand why default value is so >>>>> important if we have a way to change it. Reasons should be >>>>> really strong to change existing defaults. >>>> >>>> The only reason is, typically testpmd will be used performance >>>> benchmarking as an industry standard. It is difficult to tell/educate >>>> the QA or customers >>>> that, "BTW if you need to get better performance add more flag to >>>> testpmd command line". >> >> I disagree. >> When you do performance benchmark, you tune settings accordingly. > > IMO, We tune the system resources like queue depth not the disabling > features for raw performance. > queue depth etc people know to tune so it is obvious. What is not > obvious is, testpmd only > negotiated some features by default.I am not using that feature, hence > I need to explicitly > disable it. > When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I believe that is the case for almost all applications since API is a relatively new one, PMD default behavior should be to enable Rx metadata flow rules, in case user requests them later. So, enabling all in application is same with not calling the API at all. In this perspective, disabling Rx metadata is additional optimization/tuning that application can do if it is sure that Rx metadata flow rules won't be used at all. And API is more meaningful when it is used to disable Rx metadata. I think it is reasonable to enable all Rx metadata by default in testpmd with a capability to disable it when wanted. OR May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in testpmd, it is only called when it is requested explicitly from user, enable or disable. > >> >>>> To make that worst, only some PMD needs to give the additional >>>> parameter to get better number. >>>> And also, testpmd usage will be treated as application modeling. >>>> >>>> Since this feature only used on sfc and cnxk driver, What is the >>>> situation with sfc driver? >>>> Keeping it as negotiated and not use the feature, will impact the per >>>> core performance of sfc or >>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? >>> >>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>> it is better to negotiate nothing by default. But it is always >>> painful to change defaults. You need to explain that now you >>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. >>> Yes, it will be required on sfc and cnxk only. >>> As an sfc maintainer I don't mind to change testpmd defaults. >> >> If we change testpmd defaults to "do nothing", >> then we should disable MBUF_FAST_FREE as well. > > if you see MBUF_FAST_FREE, it does nothing. Actually, > !MBUF_FAST_FREE is doing more work. > > >> >> ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 11:35 ` Ferruh Yigit @ 2023-02-01 13:48 ` Jerin Jacob 2023-02-01 14:50 ` Ferruh Yigit 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 13:48 UTC (permalink / raw) To: Ferruh Yigit Cc: Thomas Monjalon, Andrew Rybchenko, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: > > On 2/1/2023 11:15 AM, Jerin Jacob wrote: > > On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: > >> > >> 01/02/2023 11:58, Andrew Rybchenko: > >>> On 2/1/23 13:48, Jerin Jacob wrote: > >>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > >>>> <andrew.rybchenko@oktetlabs.ru> wrote: > >>>>> Frankly speaking I don't understand why default value is so > >>>>> important if we have a way to change it. Reasons should be > >>>>> really strong to change existing defaults. > >>>> > >>>> The only reason is, typically testpmd will be used performance > >>>> benchmarking as an industry standard. It is difficult to tell/educate > >>>> the QA or customers > >>>> that, "BTW if you need to get better performance add more flag to > >>>> testpmd command line". > >> > >> I disagree. > >> When you do performance benchmark, you tune settings accordingly. > > > > IMO, We tune the system resources like queue depth not the disabling > > features for raw performance. > > queue depth etc people know to tune so it is obvious. What is not > > obvious is, testpmd only > > negotiated some features by default.I am not using that feature, hence > > I need to explicitly > > disable it. > > > > When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I > believe that is the case for almost all applications since API is a > relatively new one, PMD default behavior should be to enable Rx metadata > flow rules, in case user requests them later. > > So, enabling all in application is same with not calling the API at all. > > In this perspective, disabling Rx metadata is additional > optimization/tuning that application can do if it is sure that Rx > metadata flow rules won't be used at all. > And API is more meaningful when it is used to disable Rx metadata. > > I think it is reasonable to enable all Rx metadata by default in testpmd > with a capability to disable it when wanted. > > OR > > May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in > testpmd, it is only called when it is requested explicitly from user, > enable or disable. Second option looks good to me. When 1) user request for action which is needed negotiate(), AND 2) rte_eth_rx_metadata_negotiate() != ENOSUP then, testpmd print a warning that need to enable rte_eth_rx_metadata_negotiate(). > > > >> > >>>> To make that worst, only some PMD needs to give the additional > >>>> parameter to get better number. > >>>> And also, testpmd usage will be treated as application modeling. > >>>> > >>>> Since this feature only used on sfc and cnxk driver, What is the > >>>> situation with sfc driver? > >>>> Keeping it as negotiated and not use the feature, will impact the per > >>>> core performance of sfc or > >>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? > >>> > >>> Yes, sfc could run faster if no Rx metadata are negotiated. So, > >>> it is better to negotiate nothing by default. But it is always > >>> painful to change defaults. You need to explain that now you > >>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. > >>> Yes, it will be required on sfc and cnxk only. > >>> As an sfc maintainer I don't mind to change testpmd defaults. > >> > >> If we change testpmd defaults to "do nothing", > >> then we should disable MBUF_FAST_FREE as well. > > > > if you see MBUF_FAST_FREE, it does nothing. Actually, > > !MBUF_FAST_FREE is doing more work. > > > > > >> > >> > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 13:48 ` Jerin Jacob @ 2023-02-01 14:50 ` Ferruh Yigit 2023-02-01 15:22 ` Jerin Jacob 0 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-02-01 14:50 UTC (permalink / raw) To: Jerin Jacob Cc: Thomas Monjalon, Andrew Rybchenko, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/2023 1:48 PM, Jerin Jacob wrote: > On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >> >> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: >>>> >>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>> Frankly speaking I don't understand why default value is so >>>>>>> important if we have a way to change it. Reasons should be >>>>>>> really strong to change existing defaults. >>>>>> >>>>>> The only reason is, typically testpmd will be used performance >>>>>> benchmarking as an industry standard. It is difficult to tell/educate >>>>>> the QA or customers >>>>>> that, "BTW if you need to get better performance add more flag to >>>>>> testpmd command line". >>>> >>>> I disagree. >>>> When you do performance benchmark, you tune settings accordingly. >>> >>> IMO, We tune the system resources like queue depth not the disabling >>> features for raw performance. >>> queue depth etc people know to tune so it is obvious. What is not >>> obvious is, testpmd only >>> negotiated some features by default.I am not using that feature, hence >>> I need to explicitly >>> disable it. >>> >> >> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >> believe that is the case for almost all applications since API is a >> relatively new one, PMD default behavior should be to enable Rx metadata >> flow rules, in case user requests them later. >> >> So, enabling all in application is same with not calling the API at all. >> >> In this perspective, disabling Rx metadata is additional >> optimization/tuning that application can do if it is sure that Rx >> metadata flow rules won't be used at all. >> And API is more meaningful when it is used to disable Rx metadata. >> >> I think it is reasonable to enable all Rx metadata by default in testpmd >> with a capability to disable it when wanted. >> >> OR >> >> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in >> testpmd, it is only called when it is requested explicitly from user, >> enable or disable. > > Second option looks good to me. > When > 1) user request for action which is needed negotiate(), > AND > 2) rte_eth_rx_metadata_negotiate() != ENOSUP > then, testpmd print a warning that need to enable > rte_eth_rx_metadata_negotiate(). > We are not suggesting same thing. What you described above assumes PMD disabled Rx metadata flow rule support by default, and it needs to be enabled explicitly by 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for functionality. As far as I understand PMD wants to disable this flow rule by default because of performance concerns. But this creates inconsistency between PMDs, because rest of them will enable this flow rule by default (if it is supported) and be ready to use it when proper flow rule created. With this approach some PMDs will need 'rte_eth_rx_metadata_negotiate()' to enable Rx metadata flow rules, some won't. This can be confusing for applications that *some* PMDs require double enabling with specific API call. Instead what I was trying to suggest is reverse, all PMDs enable the Rx metadata flow rule by default, and don't require double enabling. But if application knows that it won't use Rx metadata flow rule, it can disable it to optimize the performance. This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and for testpmd context it can be called via a command on demand by user for optimization purpose. > >>> >>>> >>>>>> To make that worst, only some PMD needs to give the additional >>>>>> parameter to get better number. >>>>>> And also, testpmd usage will be treated as application modeling. >>>>>> >>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>> situation with sfc driver? >>>>>> Keeping it as negotiated and not use the feature, will impact the per >>>>>> core performance of sfc or >>>>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? >>>>> >>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>> it is better to negotiate nothing by default. But it is always >>>>> painful to change defaults. You need to explain that now you >>>>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. >>>>> Yes, it will be required on sfc and cnxk only. >>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>> >>>> If we change testpmd defaults to "do nothing", >>>> then we should disable MBUF_FAST_FREE as well. >>> >>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>> !MBUF_FAST_FREE is doing more work. >>> >>> >>>> >>>> >> ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 14:50 ` Ferruh Yigit @ 2023-02-01 15:22 ` Jerin Jacob 2023-02-02 8:43 ` Ferruh Yigit 0 siblings, 1 reply; 73+ messages in thread From: Jerin Jacob @ 2023-02-01 15:22 UTC (permalink / raw) To: Ferruh Yigit Cc: Thomas Monjalon, Andrew Rybchenko, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: > > On 2/1/2023 1:48 PM, Jerin Jacob wrote: > > On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: > >> > >> On 2/1/2023 11:15 AM, Jerin Jacob wrote: > >>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: > >>>> > >>>> 01/02/2023 11:58, Andrew Rybchenko: > >>>>> On 2/1/23 13:48, Jerin Jacob wrote: > >>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > >>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: > >>>>>>> Frankly speaking I don't understand why default value is so > >>>>>>> important if we have a way to change it. Reasons should be > >>>>>>> really strong to change existing defaults. > >>>>>> > >>>>>> The only reason is, typically testpmd will be used performance > >>>>>> benchmarking as an industry standard. It is difficult to tell/educate > >>>>>> the QA or customers > >>>>>> that, "BTW if you need to get better performance add more flag to > >>>>>> testpmd command line". > >>>> > >>>> I disagree. > >>>> When you do performance benchmark, you tune settings accordingly. > >>> > >>> IMO, We tune the system resources like queue depth not the disabling > >>> features for raw performance. > >>> queue depth etc people know to tune so it is obvious. What is not > >>> obvious is, testpmd only > >>> negotiated some features by default.I am not using that feature, hence > >>> I need to explicitly > >>> disable it. > >>> > >> > >> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I > >> believe that is the case for almost all applications since API is a > >> relatively new one, PMD default behavior should be to enable Rx metadata > >> flow rules, in case user requests them later. > >> > >> So, enabling all in application is same with not calling the API at all. > >> > >> In this perspective, disabling Rx metadata is additional > >> optimization/tuning that application can do if it is sure that Rx > >> metadata flow rules won't be used at all. > >> And API is more meaningful when it is used to disable Rx metadata. > >> > >> I think it is reasonable to enable all Rx metadata by default in testpmd > >> with a capability to disable it when wanted. > >> > >> OR > >> > >> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in > >> testpmd, it is only called when it is requested explicitly from user, > >> enable or disable. > > > > Second option looks good to me. > > When > > 1) user request for action which is needed negotiate(), > > AND > > 2) rte_eth_rx_metadata_negotiate() != ENOSUP > > then, testpmd print a warning that need to enable > > rte_eth_rx_metadata_negotiate(). > > > > We are not suggesting same thing. > > What you described above assumes PMD disabled Rx metadata flow rule > support by default, and it needs to be enabled explicitly by > 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for > functionality. > > As far as I understand PMD wants to disable this flow rule by default > because of performance concerns. But this creates inconsistency between > PMDs, because rest of them will enable this flow rule by default (if it > is supported) and be ready to use it when proper flow rule created. > > With this approach some PMDs will need 'rte_eth_rx_metadata_negotiate()' > to enable Rx metadata flow rules, some won't. This can be confusing for > applications that *some* PMDs require double enabling with specific API > call. > > > Instead what I was trying to suggest is reverse, > all PMDs enable the Rx metadata flow rule by default, and don't require > double enabling. > But if application knows that it won't use Rx metadata flow rule, it can > disable it to optimize the performance. > This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and > for testpmd context it can be called via a command on demand by user for > optimization purpose. This won't solve concern I have outlined earlier[1]. I think, The part of the problem there is no enough adaption of rte_eth_rx_metadata_negotiate(), The view is total different from PMD maintainer PoV vs testpmd application PoV. Just to avoid back and forth. We will call off this patch and remove rte_eth_rx_metadata_negotiate() PMD callback from cnxk driver. Keep it as old behavior, so we don't need to care about rte_eth_rx_metadata_negotiate(). [1] The only reason is, typically testpmd will be used performance benchmarking as an industry standard. It is difficult to tell/educate the QA or customers that, "BTW if you need to get better performance add more flag to testpmd command line". To make that worst, only some PMD needs to give the additional parameter to get better number. And also, testpmd usage will be treated as application modeling. > > > > > > > >>> > >>>> > >>>>>> To make that worst, only some PMD needs to give the additional > >>>>>> parameter to get better number. > >>>>>> And also, testpmd usage will be treated as application modeling. > >>>>>> > >>>>>> Since this feature only used on sfc and cnxk driver, What is the > >>>>>> situation with sfc driver? > >>>>>> Keeping it as negotiated and not use the feature, will impact the per > >>>>>> core performance of sfc or > >>>>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? > >>>>> > >>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, > >>>>> it is better to negotiate nothing by default. But it is always > >>>>> painful to change defaults. You need to explain that now you > >>>>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. > >>>>> Yes, it will be required on sfc and cnxk only. > >>>>> As an sfc maintainer I don't mind to change testpmd defaults. > >>>> > >>>> If we change testpmd defaults to "do nothing", > >>>> then we should disable MBUF_FAST_FREE as well. > >>> > >>> if you see MBUF_FAST_FREE, it does nothing. Actually, > >>> !MBUF_FAST_FREE is doing more work. > >>> > >>> > >>>> > >>>> > >> > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 15:22 ` Jerin Jacob @ 2023-02-02 8:43 ` Ferruh Yigit 2023-02-02 8:50 ` Ivan Malov 0 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-02-02 8:43 UTC (permalink / raw) To: Jerin Jacob Cc: Thomas Monjalon, Andrew Rybchenko, Ori Kam, Ivan Malov, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/1/2023 3:22 PM, Jerin Jacob wrote: > On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >> >> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >>>> >>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: >>>>>> >>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>> really strong to change existing defaults. >>>>>>>> >>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>> benchmarking as an industry standard. It is difficult to tell/educate >>>>>>>> the QA or customers >>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>> testpmd command line". >>>>>> >>>>>> I disagree. >>>>>> When you do performance benchmark, you tune settings accordingly. >>>>> >>>>> IMO, We tune the system resources like queue depth not the disabling >>>>> features for raw performance. >>>>> queue depth etc people know to tune so it is obvious. What is not >>>>> obvious is, testpmd only >>>>> negotiated some features by default.I am not using that feature, hence >>>>> I need to explicitly >>>>> disable it. >>>>> >>>> >>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>> believe that is the case for almost all applications since API is a >>>> relatively new one, PMD default behavior should be to enable Rx metadata >>>> flow rules, in case user requests them later. >>>> >>>> So, enabling all in application is same with not calling the API at all. >>>> >>>> In this perspective, disabling Rx metadata is additional >>>> optimization/tuning that application can do if it is sure that Rx >>>> metadata flow rules won't be used at all. >>>> And API is more meaningful when it is used to disable Rx metadata. >>>> >>>> I think it is reasonable to enable all Rx metadata by default in testpmd >>>> with a capability to disable it when wanted. >>>> >>>> OR >>>> >>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in >>>> testpmd, it is only called when it is requested explicitly from user, >>>> enable or disable. >>> >>> Second option looks good to me. >>> When >>> 1) user request for action which is needed negotiate(), >>> AND >>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>> then, testpmd print a warning that need to enable >>> rte_eth_rx_metadata_negotiate(). >>> >> >> We are not suggesting same thing. >> >> What you described above assumes PMD disabled Rx metadata flow rule >> support by default, and it needs to be enabled explicitly by >> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >> functionality. >> >> As far as I understand PMD wants to disable this flow rule by default >> because of performance concerns. But this creates inconsistency between >> PMDs, because rest of them will enable this flow rule by default (if it >> is supported) and be ready to use it when proper flow rule created. >> >> With this approach some PMDs will need 'rte_eth_rx_metadata_negotiate()' >> to enable Rx metadata flow rules, some won't. This can be confusing for >> applications that *some* PMDs require double enabling with specific API >> call. >> >> >> Instead what I was trying to suggest is reverse, >> all PMDs enable the Rx metadata flow rule by default, and don't require >> double enabling. >> But if application knows that it won't use Rx metadata flow rule, it can >> disable it to optimize the performance. >> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >> for testpmd context it can be called via a command on demand by user for >> optimization purpose. > > This won't solve concern I have outlined earlier[1]. > Yes, it won't. > I think, The part of the problem there is no enough adaption of > rte_eth_rx_metadata_negotiate(), > > The view is total different from PMD maintainer PoV vs testpmd application PoV. > Agree, and I assume it is different for user application too, which may prioritize consistency and portability. Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I think it is confusing. > Just to avoid back and forth. We will call off this patch and remove > rte_eth_rx_metadata_negotiate() > PMD callback from cnxk driver. Keep it as old behavior, so we don't need to care > about rte_eth_rx_metadata_negotiate(). > When you remove 'rx_metadata_negotiate' callback, what will be the PMD behavior? I assume PMD will do the required preparations as if all Rx metadata is enabled. And what is the performance impact, is removing callback improve the performance? > [1] > The only reason is, typically testpmd will be used performance > benchmarking as an industry standard. It is difficult to tell/educate > the QA or customers > that, "BTW if you need to get better performance add more flag to > testpmd command line". > To make that worst, only some PMD needs to give the additional > parameter to get better number. > And also, testpmd usage will be treated as application modeling. > >> >> >> >> >>> >>>>> >>>>>> >>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>> parameter to get better number. >>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>> >>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>> situation with sfc driver? >>>>>>>> Keeping it as negotiated and not use the feature, will impact the per >>>>>>>> core performance of sfc or >>>>>>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? >>>>>>> >>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>> painful to change defaults. You need to explain that now you >>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. >>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>> >>>>>> If we change testpmd defaults to "do nothing", >>>>>> then we should disable MBUF_FAST_FREE as well. >>>>> >>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>> !MBUF_FAST_FREE is doing more work. >>>>> >>>>> >>>>>> >>>>>> >>>> >> ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 8:43 ` Ferruh Yigit @ 2023-02-02 8:50 ` Ivan Malov 2023-02-02 9:17 ` Ferruh Yigit 0 siblings, 1 reply; 73+ messages in thread From: Ivan Malov @ 2023-02-02 8:50 UTC (permalink / raw) To: Ferruh Yigit Cc: Jerin Jacob, Thomas Monjalon, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Thu, 2 Feb 2023, Ferruh Yigit wrote: > On 2/1/2023 3:22 PM, Jerin Jacob wrote: >> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >>> >>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> wrote: >>>>> >>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon <thomas@monjalon.net> wrote: >>>>>>> >>>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>>> really strong to change existing defaults. >>>>>>>>> >>>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>>> benchmarking as an industry standard. It is difficult to tell/educate >>>>>>>>> the QA or customers >>>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>>> testpmd command line". >>>>>>> >>>>>>> I disagree. >>>>>>> When you do performance benchmark, you tune settings accordingly. >>>>>> >>>>>> IMO, We tune the system resources like queue depth not the disabling >>>>>> features for raw performance. >>>>>> queue depth etc people know to tune so it is obvious. What is not >>>>>> obvious is, testpmd only >>>>>> negotiated some features by default.I am not using that feature, hence >>>>>> I need to explicitly >>>>>> disable it. >>>>>> >>>>> >>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>>> believe that is the case for almost all applications since API is a >>>>> relatively new one, PMD default behavior should be to enable Rx metadata >>>>> flow rules, in case user requests them later. >>>>> >>>>> So, enabling all in application is same with not calling the API at all. >>>>> >>>>> In this perspective, disabling Rx metadata is additional >>>>> optimization/tuning that application can do if it is sure that Rx >>>>> metadata flow rules won't be used at all. >>>>> And API is more meaningful when it is used to disable Rx metadata. >>>>> >>>>> I think it is reasonable to enable all Rx metadata by default in testpmd >>>>> with a capability to disable it when wanted. >>>>> >>>>> OR >>>>> >>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by default in >>>>> testpmd, it is only called when it is requested explicitly from user, >>>>> enable or disable. >>>> >>>> Second option looks good to me. >>>> When >>>> 1) user request for action which is needed negotiate(), >>>> AND >>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>>> then, testpmd print a warning that need to enable >>>> rte_eth_rx_metadata_negotiate(). >>>> >>> >>> We are not suggesting same thing. >>> >>> What you described above assumes PMD disabled Rx metadata flow rule >>> support by default, and it needs to be enabled explicitly by >>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >>> functionality. >>> >>> As far as I understand PMD wants to disable this flow rule by default >>> because of performance concerns. But this creates inconsistency between >>> PMDs, because rest of them will enable this flow rule by default (if it >>> is supported) and be ready to use it when proper flow rule created. >>> >>> With this approach some PMDs will need 'rte_eth_rx_metadata_negotiate()' >>> to enable Rx metadata flow rules, some won't. This can be confusing for >>> applications that *some* PMDs require double enabling with specific API >>> call. >>> >>> >>> Instead what I was trying to suggest is reverse, >>> all PMDs enable the Rx metadata flow rule by default, and don't require >>> double enabling. >>> But if application knows that it won't use Rx metadata flow rule, it can >>> disable it to optimize the performance. >>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >>> for testpmd context it can be called via a command on demand by user for >>> optimization purpose. >> >> This won't solve concern I have outlined earlier[1]. >> > > Yes, it won't. > >> I think, The part of the problem there is no enough adaption of >> rte_eth_rx_metadata_negotiate(), >> >> The view is total different from PMD maintainer PoV vs testpmd application PoV. >> > > Agree, > and I assume it is different for user application too, which may > prioritize consistency and portability. > > Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I > think it is confusing. Forgive me, in which way is it confusing? > >> Just to avoid back and forth. We will call off this patch and remove >> rte_eth_rx_metadata_negotiate() >> PMD callback from cnxk driver. Keep it as old behavior, so we don't need to care >> about rte_eth_rx_metadata_negotiate(). >> > > When you remove 'rx_metadata_negotiate' callback, what will be the PMD > behavior? I assume PMD will do the required preparations as if all Rx > metadata is enabled. > And what is the performance impact, is removing callback improve the > performance? > > >> [1] >> The only reason is, typically testpmd will be used performance >> benchmarking as an industry standard. It is difficult to tell/educate >> the QA or customers >> that, "BTW if you need to get better performance add more flag to >> testpmd command line". >> To make that worst, only some PMD needs to give the additional >> parameter to get better number. >> And also, testpmd usage will be treated as application modeling. >> >>> >>> >>> >>> >>>> >>>>>> >>>>>>> >>>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>>> parameter to get better number. >>>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>>> >>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>>> situation with sfc driver? >>>>>>>>> Keeping it as negotiated and not use the feature, will impact the per >>>>>>>>> core performance of sfc or >>>>>>>>> is it just PCI bandwidth thing which really dont show any difference in testpmd? >>>>>>>> >>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>>> painful to change defaults. You need to explain that now you >>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel offloads. >>>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>>> >>>>>>> If we change testpmd defaults to "do nothing", >>>>>>> then we should disable MBUF_FAST_FREE as well. >>>>>> >>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>>> !MBUF_FAST_FREE is doing more work. >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>> >>> > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 8:50 ` Ivan Malov @ 2023-02-02 9:17 ` Ferruh Yigit 2023-02-02 10:41 ` Ivan Malov 0 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-02-02 9:17 UTC (permalink / raw) To: Ivan Malov Cc: Jerin Jacob, Thomas Monjalon, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/2/2023 8:50 AM, Ivan Malov wrote: > On Thu, 2 Feb 2023, Ferruh Yigit wrote: > >> On 2/1/2023 3:22 PM, Jerin Jacob wrote: >>> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> >>> wrote: >>>> >>>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>> wrote: >>>>>> >>>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon >>>>>>> <thomas@monjalon.net> wrote: >>>>>>>> >>>>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>>>> really strong to change existing defaults. >>>>>>>>>> >>>>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>>>> benchmarking as an industry standard. It is difficult to >>>>>>>>>> tell/educate >>>>>>>>>> the QA or customers >>>>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>>>> testpmd command line". >>>>>>>> >>>>>>>> I disagree. >>>>>>>> When you do performance benchmark, you tune settings accordingly. >>>>>>> >>>>>>> IMO, We tune the system resources like queue depth not the disabling >>>>>>> features for raw performance. >>>>>>> queue depth etc people know to tune so it is obvious. What is not >>>>>>> obvious is, testpmd only >>>>>>> negotiated some features by default.I am not using that feature, >>>>>>> hence >>>>>>> I need to explicitly >>>>>>> disable it. >>>>>>> >>>>>> >>>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>>>> believe that is the case for almost all applications since API is a >>>>>> relatively new one, PMD default behavior should be to enable Rx >>>>>> metadata >>>>>> flow rules, in case user requests them later. >>>>>> >>>>>> So, enabling all in application is same with not calling the API >>>>>> at all. >>>>>> >>>>>> In this perspective, disabling Rx metadata is additional >>>>>> optimization/tuning that application can do if it is sure that Rx >>>>>> metadata flow rules won't be used at all. >>>>>> And API is more meaningful when it is used to disable Rx metadata. >>>>>> >>>>>> I think it is reasonable to enable all Rx metadata by default in >>>>>> testpmd >>>>>> with a capability to disable it when wanted. >>>>>> >>>>>> OR >>>>>> >>>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by >>>>>> default in >>>>>> testpmd, it is only called when it is requested explicitly from user, >>>>>> enable or disable. >>>>> >>>>> Second option looks good to me. >>>>> When >>>>> 1) user request for action which is needed negotiate(), >>>>> AND >>>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>>>> then, testpmd print a warning that need to enable >>>>> rte_eth_rx_metadata_negotiate(). >>>>> >>>> >>>> We are not suggesting same thing. >>>> >>>> What you described above assumes PMD disabled Rx metadata flow rule >>>> support by default, and it needs to be enabled explicitly by >>>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >>>> functionality. >>>> >>>> As far as I understand PMD wants to disable this flow rule by default >>>> because of performance concerns. But this creates inconsistency between >>>> PMDs, because rest of them will enable this flow rule by default (if it >>>> is supported) and be ready to use it when proper flow rule created. >>>> >>>> With this approach some PMDs will need >>>> 'rte_eth_rx_metadata_negotiate()' >>>> to enable Rx metadata flow rules, some won't. This can be confusing for >>>> applications that *some* PMDs require double enabling with specific API >>>> call. >>>> >>>> >>>> Instead what I was trying to suggest is reverse, >>>> all PMDs enable the Rx metadata flow rule by default, and don't require >>>> double enabling. >>>> But if application knows that it won't use Rx metadata flow rule, it >>>> can >>>> disable it to optimize the performance. >>>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >>>> for testpmd context it can be called via a command on demand by user >>>> for >>>> optimization purpose. >>> >>> This won't solve concern I have outlined earlier[1]. >>> >> >> Yes, it won't. >> >>> I think, The part of the problem there is no enough adaption of >>> rte_eth_rx_metadata_negotiate(), >>> >>> The view is total different from PMD maintainer PoV vs testpmd >>> application PoV. >>> >> >> Agree, >> and I assume it is different for user application too, which may >> prioritize consistency and portability. >> >> Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I >> think it is confusing. > > Forgive me, in which way is it confusing? > All other flow rules enabled by creating flow rule, but this one requires an API to enable it, so I believe it is inconsistent in that way. From application perspective, assume that it doesn't know NIC details, should it call this API or not? Without API call should application assume Rx metadata flow rules are enabled or disabled? As I understand intention is to get hint from application if it will require Rx metadata flow rules so that PMD can optimize better, but if PMD doesn't enable Rx metadata flow rules when this API call is missing than it becomes a mandatory API to configure the device. But I think it should be optional for optimization. Also if application not sure to use this flow rule or not, it will by default enable all in any case, this will reduce the benefit. As done in testpmd. API works in both ways, it request to enable some Rx metadata flow rule, but based on what PMD returns application can know what device supports, this also inconsistent with how other flow rules work, we don't have API to get capability but detect them via flow create/validate. Can there be a case API returns a flow rule negotiated, but it fails when tried to create the flow rule, isn't this confusing for application I think if we continue this approach there can be multiple enable and capability learning APIs for various flow rules or flow rule groups, and this can make flow API much more harder to use for applications. >> >>> Just to avoid back and forth. We will call off this patch and remove >>> rte_eth_rx_metadata_negotiate() >>> PMD callback from cnxk driver. Keep it as old behavior, so we don't >>> need to care >>> about rte_eth_rx_metadata_negotiate(). >>> >> >> When you remove 'rx_metadata_negotiate' callback, what will be the PMD >> behavior? I assume PMD will do the required preparations as if all Rx >> metadata is enabled. >> And what is the performance impact, is removing callback improve the >> performance? >> >> >>> [1] >>> The only reason is, typically testpmd will be used performance >>> benchmarking as an industry standard. It is difficult to tell/educate >>> the QA or customers >>> that, "BTW if you need to get better performance add more flag to >>> testpmd command line". >>> To make that worst, only some PMD needs to give the additional >>> parameter to get better number. >>> And also, testpmd usage will be treated as application modeling. >>> >>>> >>>> >>>> >>>> >>>>> >>>>>>> >>>>>>>> >>>>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>>>> parameter to get better number. >>>>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>>>> >>>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>>>> situation with sfc driver? >>>>>>>>>> Keeping it as negotiated and not use the feature, will impact >>>>>>>>>> the per >>>>>>>>>> core performance of sfc or >>>>>>>>>> is it just PCI bandwidth thing which really dont show any >>>>>>>>>> difference in testpmd? >>>>>>>>> >>>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>>>> painful to change defaults. You need to explain that now you >>>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel >>>>>>>>> offloads. >>>>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>>>> >>>>>>>> If we change testpmd defaults to "do nothing", >>>>>>>> then we should disable MBUF_FAST_FREE as well. >>>>>>> >>>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>>>> !MBUF_FAST_FREE is doing more work. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>> >> >> ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 9:17 ` Ferruh Yigit @ 2023-02-02 10:41 ` Ivan Malov 2023-02-02 10:48 ` Ivan Malov 0 siblings, 1 reply; 73+ messages in thread From: Ivan Malov @ 2023-02-02 10:41 UTC (permalink / raw) To: Ferruh Yigit Cc: Jerin Jacob, Thomas Monjalon, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On Thu, 2 Feb 2023, Ferruh Yigit wrote: > On 2/2/2023 8:50 AM, Ivan Malov wrote: >> On Thu, 2 Feb 2023, Ferruh Yigit wrote: >> >>> On 2/1/2023 3:22 PM, Jerin Jacob wrote: >>>> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>> wrote: >>>>> >>>>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>>>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>>> wrote: >>>>>>> >>>>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon >>>>>>>> <thomas@monjalon.net> wrote: >>>>>>>>> >>>>>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>>>>> really strong to change existing defaults. >>>>>>>>>>> >>>>>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>>>>> benchmarking as an industry standard. It is difficult to >>>>>>>>>>> tell/educate >>>>>>>>>>> the QA or customers >>>>>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>>>>> testpmd command line". >>>>>>>>> >>>>>>>>> I disagree. >>>>>>>>> When you do performance benchmark, you tune settings accordingly. >>>>>>>> >>>>>>>> IMO, We tune the system resources like queue depth not the disabling >>>>>>>> features for raw performance. >>>>>>>> queue depth etc people know to tune so it is obvious. What is not >>>>>>>> obvious is, testpmd only >>>>>>>> negotiated some features by default.I am not using that feature, >>>>>>>> hence >>>>>>>> I need to explicitly >>>>>>>> disable it. >>>>>>>> >>>>>>> >>>>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>>>>> believe that is the case for almost all applications since API is a >>>>>>> relatively new one, PMD default behavior should be to enable Rx >>>>>>> metadata >>>>>>> flow rules, in case user requests them later. >>>>>>> >>>>>>> So, enabling all in application is same with not calling the API >>>>>>> at all. >>>>>>> >>>>>>> In this perspective, disabling Rx metadata is additional >>>>>>> optimization/tuning that application can do if it is sure that Rx >>>>>>> metadata flow rules won't be used at all. >>>>>>> And API is more meaningful when it is used to disable Rx metadata. >>>>>>> >>>>>>> I think it is reasonable to enable all Rx metadata by default in >>>>>>> testpmd >>>>>>> with a capability to disable it when wanted. >>>>>>> >>>>>>> OR >>>>>>> >>>>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by >>>>>>> default in >>>>>>> testpmd, it is only called when it is requested explicitly from user, >>>>>>> enable or disable. >>>>>> >>>>>> Second option looks good to me. >>>>>> When >>>>>> 1) user request for action which is needed negotiate(), >>>>>> AND >>>>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>>>>> then, testpmd print a warning that need to enable >>>>>> rte_eth_rx_metadata_negotiate(). >>>>>> >>>>> >>>>> We are not suggesting same thing. >>>>> >>>>> What you described above assumes PMD disabled Rx metadata flow rule >>>>> support by default, and it needs to be enabled explicitly by >>>>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >>>>> functionality. >>>>> >>>>> As far as I understand PMD wants to disable this flow rule by default >>>>> because of performance concerns. But this creates inconsistency between >>>>> PMDs, because rest of them will enable this flow rule by default (if it >>>>> is supported) and be ready to use it when proper flow rule created. >>>>> >>>>> With this approach some PMDs will need >>>>> 'rte_eth_rx_metadata_negotiate()' >>>>> to enable Rx metadata flow rules, some won't. This can be confusing for >>>>> applications that *some* PMDs require double enabling with specific API >>>>> call. >>>>> >>>>> >>>>> Instead what I was trying to suggest is reverse, >>>>> all PMDs enable the Rx metadata flow rule by default, and don't require >>>>> double enabling. >>>>> But if application knows that it won't use Rx metadata flow rule, it >>>>> can >>>>> disable it to optimize the performance. >>>>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >>>>> for testpmd context it can be called via a command on demand by user >>>>> for >>>>> optimization purpose. >>>> >>>> This won't solve concern I have outlined earlier[1]. >>>> >>> >>> Yes, it won't. >>> >>>> I think, The part of the problem there is no enough adaption of >>>> rte_eth_rx_metadata_negotiate(), >>>> >>>> The view is total different from PMD maintainer PoV vs testpmd >>>> application PoV. >>>> >>> >>> Agree, >>> and I assume it is different for user application too, which may >>> prioritize consistency and portability. >>> >>> Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I >>> think it is confusing. >> >> Forgive me, in which way is it confusing? >> > > All other flow rules enabled by creating flow rule, but this one Hold on.. Did you just say "flow rules"? But this API is *not* about flow rules. I suggest you please re-read description of the API. It reads: "Negotiate the NIC's ability to deliver specific kinds of metadata to the PMD". Nothing about flows there. Why is it decoupled from flow library this way? Because there is a drastic difference between generating and plumbing metadata INSIDE the NIC's flow engine, on the one hand, and delivering these data from the NIC to the host driver, on the other. Let me explain. Say, one creates the following flow rules: (a) flow create 0 transfer group 0 pattern [A] / end \ actions mark id XXX jump group 1 / end (b) flow create 0 transfer group 0 pattern [B] / end \ actions mark id YYY jump group 1 / end (c) flow create 0 transfer group 1 pattern mark id is XXX / end \ actions represented_port ethdev_id 1 / end (d) flow create 0 transfer group 1 pattern mark id is YYY / end \ actions drop / end In this example, metadata of type "MARK" is used to partition flow group (table) 1 into multiple lookup sections. So the mark value is GENERATED by the flow engine and then it is CONSUMED by this very flow engine. The application may NOT necessarily want to receive the mark with mbufs... And it is only when the application wants these metadata DELIVERED to it that it has to call the negotiate API. The short of it, nothing prevents the driver from accepting flow create requests that leverage some meta items/actions. Drivers do not need the negotiate API to *configure flow*. They only need this API in order to let the application choose whether metadata will be DELIVERED (!) or not. > requires an API to enable it, so I believe it is inconsistent in that way. Please see above. Everything is consistent as *flow library* and *negotiate metadata delivery* API are totally decoupled. > > From application perspective, assume that it doesn't know NIC details, > should it call this API or not? Without API call should application > assume Rx metadata flow rules are enabled or disabled? Frankly, applications like testpmd need never call this API. Simply because seeing, for example, MARK values in mbufs is useless to it. This API is needed by other applications. For example, OvS has partial MARK+RSS offload. It adds flows that distribute packets across multiple queues and set some MARK values for them. OvS is interested in getting this values with mbufs since they affect further lookups in software... So, OvS, knowing it wants these metadata DELIVERED (!), should invoke this metadata negotiate API to ensure that. > > > As I understand intention is to get hint from application if it will > require Rx metadata flow rules so that PMD can optimize better, but if No, nothing about flow rules. Just delivery of metadata with mbufs. > PMD doesn't enable Rx metadata flow rules when this API call is missing Again, PMD shall not make decisions on whether to enable or disable support for some FLOW primitives based on interactions via this API. This API exists solely to let PMD configure delivery of metadata, i.e. not the way it is generated in the first instance. > than it becomes a mandatory API to configure the device. But I think it > should be optional for optimization. > > Also if application not sure to use this flow rule or not, it will by > default enable all in any case, this will reduce the benefit. As done in > testpmd. Please see above. PMD does not need this API, I take it. > > > API works in both ways, it request to enable some Rx metadata flow rule, > but based on what PMD returns application can know what device supports, > this also inconsistent with how other flow rules work, we don't have API > to get capability but detect them via flow create/validate. > Can there be a case API returns a flow rule negotiated, but it fails > when tried to create the flow rule, isn't this confusing for application > > > I think if we continue this approach there can be multiple enable and > capability learning APIs for various flow rules or flow rule groups, and > this can make flow API much more harder to use for applications. See my explanations above. This API is not about flows. Period. > > > >>> >>>> Just to avoid back and forth. We will call off this patch and remove >>>> rte_eth_rx_metadata_negotiate() >>>> PMD callback from cnxk driver. Keep it as old behavior, so we don't >>>> need to care >>>> about rte_eth_rx_metadata_negotiate(). >>>> >>> >>> When you remove 'rx_metadata_negotiate' callback, what will be the PMD >>> behavior? I assume PMD will do the required preparations as if all Rx >>> metadata is enabled. >>> And what is the performance impact, is removing callback improve the >>> performance? >>> >>> >>>> [1] >>>> The only reason is, typically testpmd will be used performance >>>> benchmarking as an industry standard. It is difficult to tell/educate >>>> the QA or customers >>>> that, "BTW if you need to get better performance add more flag to >>>> testpmd command line". >>>> To make that worst, only some PMD needs to give the additional >>>> parameter to get better number. >>>> And also, testpmd usage will be treated as application modeling. >>>> >>>>> >>>>> >>>>> >>>>> >>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>>>>> parameter to get better number. >>>>>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>>>>> >>>>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>>>>> situation with sfc driver? >>>>>>>>>>> Keeping it as negotiated and not use the feature, will impact >>>>>>>>>>> the per >>>>>>>>>>> core performance of sfc or >>>>>>>>>>> is it just PCI bandwidth thing which really dont show any >>>>>>>>>>> difference in testpmd? >>>>>>>>>> >>>>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>>>>> painful to change defaults. You need to explain that now you >>>>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel >>>>>>>>>> offloads. >>>>>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>>>>> >>>>>>>>> If we change testpmd defaults to "do nothing", >>>>>>>>> then we should disable MBUF_FAST_FREE as well. >>>>>>>> >>>>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>>>>> !MBUF_FAST_FREE is doing more work. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>> >>> > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 10:41 ` Ivan Malov @ 2023-02-02 10:48 ` Ivan Malov 2023-02-02 11:41 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Ivan Malov @ 2023-02-02 10:48 UTC (permalink / raw) To: Ferruh Yigit Cc: Jerin Jacob, Thomas Monjalon, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand I apologise, there was a typo in the previous mail: "PMD does not need this API". Should read as "TESTPMD does not need it". Thank you. On Thu, 2 Feb 2023, Ivan Malov wrote: > On Thu, 2 Feb 2023, Ferruh Yigit wrote: > >> On 2/2/2023 8:50 AM, Ivan Malov wrote: >>> On Thu, 2 Feb 2023, Ferruh Yigit wrote: >>> >>>> On 2/1/2023 3:22 PM, Jerin Jacob wrote: >>>>> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>> wrote: >>>>>> >>>>>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>>>>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon >>>>>>>>> <thomas@monjalon.net> wrote: >>>>>>>>>> >>>>>>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>>>>>> really strong to change existing defaults. >>>>>>>>>>>> >>>>>>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>>>>>> benchmarking as an industry standard. It is difficult to >>>>>>>>>>>> tell/educate >>>>>>>>>>>> the QA or customers >>>>>>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>>>>>> testpmd command line". >>>>>>>>>> >>>>>>>>>> I disagree. >>>>>>>>>> When you do performance benchmark, you tune settings accordingly. >>>>>>>>> >>>>>>>>> IMO, We tune the system resources like queue depth not the disabling >>>>>>>>> features for raw performance. >>>>>>>>> queue depth etc people know to tune so it is obvious. What is not >>>>>>>>> obvious is, testpmd only >>>>>>>>> negotiated some features by default.I am not using that feature, >>>>>>>>> hence >>>>>>>>> I need to explicitly >>>>>>>>> disable it. >>>>>>>>> >>>>>>>> >>>>>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>>>>>> believe that is the case for almost all applications since API is a >>>>>>>> relatively new one, PMD default behavior should be to enable Rx >>>>>>>> metadata >>>>>>>> flow rules, in case user requests them later. >>>>>>>> >>>>>>>> So, enabling all in application is same with not calling the API >>>>>>>> at all. >>>>>>>> >>>>>>>> In this perspective, disabling Rx metadata is additional >>>>>>>> optimization/tuning that application can do if it is sure that Rx >>>>>>>> metadata flow rules won't be used at all. >>>>>>>> And API is more meaningful when it is used to disable Rx metadata. >>>>>>>> >>>>>>>> I think it is reasonable to enable all Rx metadata by default in >>>>>>>> testpmd >>>>>>>> with a capability to disable it when wanted. >>>>>>>> >>>>>>>> OR >>>>>>>> >>>>>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by >>>>>>>> default in >>>>>>>> testpmd, it is only called when it is requested explicitly from user, >>>>>>>> enable or disable. >>>>>>> >>>>>>> Second option looks good to me. >>>>>>> When >>>>>>> 1) user request for action which is needed negotiate(), >>>>>>> AND >>>>>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>>>>>> then, testpmd print a warning that need to enable >>>>>>> rte_eth_rx_metadata_negotiate(). >>>>>>> >>>>>> >>>>>> We are not suggesting same thing. >>>>>> >>>>>> What you described above assumes PMD disabled Rx metadata flow rule >>>>>> support by default, and it needs to be enabled explicitly by >>>>>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >>>>>> functionality. >>>>>> >>>>>> As far as I understand PMD wants to disable this flow rule by default >>>>>> because of performance concerns. But this creates inconsistency between >>>>>> PMDs, because rest of them will enable this flow rule by default (if it >>>>>> is supported) and be ready to use it when proper flow rule created. >>>>>> >>>>>> With this approach some PMDs will need >>>>>> 'rte_eth_rx_metadata_negotiate()' >>>>>> to enable Rx metadata flow rules, some won't. This can be confusing for >>>>>> applications that *some* PMDs require double enabling with specific API >>>>>> call. >>>>>> >>>>>> >>>>>> Instead what I was trying to suggest is reverse, >>>>>> all PMDs enable the Rx metadata flow rule by default, and don't require >>>>>> double enabling. >>>>>> But if application knows that it won't use Rx metadata flow rule, it >>>>>> can >>>>>> disable it to optimize the performance. >>>>>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >>>>>> for testpmd context it can be called via a command on demand by user >>>>>> for >>>>>> optimization purpose. >>>>> >>>>> This won't solve concern I have outlined earlier[1]. >>>>> >>>> >>>> Yes, it won't. >>>> >>>>> I think, The part of the problem there is no enough adaption of >>>>> rte_eth_rx_metadata_negotiate(), >>>>> >>>>> The view is total different from PMD maintainer PoV vs testpmd >>>>> application PoV. >>>>> >>>> >>>> Agree, >>>> and I assume it is different for user application too, which may >>>> prioritize consistency and portability. >>>> >>>> Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I >>>> think it is confusing. >>> >>> Forgive me, in which way is it confusing? >>> >> >> All other flow rules enabled by creating flow rule, but this one > > Hold on.. Did you just say "flow rules"? But this API is *not* about > flow rules. I suggest you please re-read description of the API. > It reads: "Negotiate the NIC's ability to deliver specific > kinds of metadata to the PMD". Nothing about flows there. > > Why is it decoupled from flow library this way? Because there is > a drastic difference between generating and plumbing metadata > INSIDE the NIC's flow engine, on the one hand, and delivering > these data from the NIC to the host driver, on the other. > > Let me explain. Say, one creates the following flow rules: > > (a) flow create 0 transfer group 0 pattern [A] / end \ > actions mark id XXX jump group 1 / end > (b) flow create 0 transfer group 0 pattern [B] / end \ > actions mark id YYY jump group 1 / end > > (c) flow create 0 transfer group 1 pattern mark id is XXX / end \ > actions represented_port ethdev_id 1 / end > (d) flow create 0 transfer group 1 pattern mark id is YYY / end \ > actions drop / end > > In this example, metadata of type "MARK" is used to partition > flow group (table) 1 into multiple lookup sections. So the > mark value is GENERATED by the flow engine and then it is > CONSUMED by this very flow engine. The application may > NOT necessarily want to receive the mark with mbufs... > > And it is only when the application wants these metadata > DELIVERED to it that it has to call the negotiate API. > > The short of it, nothing prevents the driver from accepting > flow create requests that leverage some meta items/actions. > Drivers do not need the negotiate API to *configure flow*. > They only need this API in order to let the application > choose whether metadata will be DELIVERED (!) or not. > >> requires an API to enable it, so I believe it is inconsistent in that way. > > Please see above. Everything is consistent as *flow library* > and *negotiate metadata delivery* API are totally decoupled. > >> >> From application perspective, assume that it doesn't know NIC details, >> should it call this API or not? Without API call should application >> assume Rx metadata flow rules are enabled or disabled? > > Frankly, applications like testpmd need never call this API. > Simply because seeing, for example, MARK values in mbufs is > useless to it. This API is needed by other applications. > For example, OvS has partial MARK+RSS offload. It adds > flows that distribute packets across multiple queues > and set some MARK values for them. OvS is interested > in getting this values with mbufs since they affect > further lookups in software... So, OvS, knowing it > wants these metadata DELIVERED (!), should invoke > this metadata negotiate API to ensure that. > >> >> >> As I understand intention is to get hint from application if it will >> require Rx metadata flow rules so that PMD can optimize better, but if > > No, nothing about flow rules. Just delivery of metadata with mbufs. > >> PMD doesn't enable Rx metadata flow rules when this API call is missing > > Again, PMD shall not make decisions on whether to enable or disable > support for some FLOW primitives based on interactions via this API. > This API exists solely to let PMD configure delivery of metadata, > i.e. not the way it is generated in the first instance. > >> than it becomes a mandatory API to configure the device. But I think it >> should be optional for optimization. >> >> Also if application not sure to use this flow rule or not, it will by >> default enable all in any case, this will reduce the benefit. As done in >> testpmd. > > Please see above. PMD does not need this API, I take it. > >> >> >> API works in both ways, it request to enable some Rx metadata flow rule, >> but based on what PMD returns application can know what device supports, >> this also inconsistent with how other flow rules work, we don't have API >> to get capability but detect them via flow create/validate. >> Can there be a case API returns a flow rule negotiated, but it fails >> when tried to create the flow rule, isn't this confusing for application >> >> >> I think if we continue this approach there can be multiple enable and >> capability learning APIs for various flow rules or flow rule groups, and >> this can make flow API much more harder to use for applications. > > See my explanations above. This API is not about flows. Period. > >> >> >> >>>> >>>>> Just to avoid back and forth. We will call off this patch and remove >>>>> rte_eth_rx_metadata_negotiate() >>>>> PMD callback from cnxk driver. Keep it as old behavior, so we don't >>>>> need to care >>>>> about rte_eth_rx_metadata_negotiate(). >>>>> >>>> >>>> When you remove 'rx_metadata_negotiate' callback, what will be the PMD >>>> behavior? I assume PMD will do the required preparations as if all Rx >>>> metadata is enabled. >>>> And what is the performance impact, is removing callback improve the >>>> performance? >>>> >>>> >>>>> [1] >>>>> The only reason is, typically testpmd will be used performance >>>>> benchmarking as an industry standard. It is difficult to tell/educate >>>>> the QA or customers >>>>> that, "BTW if you need to get better performance add more flag to >>>>> testpmd command line". >>>>> To make that worst, only some PMD needs to give the additional >>>>> parameter to get better number. >>>>> And also, testpmd usage will be treated as application modeling. >>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>>>>>> parameter to get better number. >>>>>>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>>>>>> >>>>>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>>>>>> situation with sfc driver? >>>>>>>>>>>> Keeping it as negotiated and not use the feature, will impact >>>>>>>>>>>> the per >>>>>>>>>>>> core performance of sfc or >>>>>>>>>>>> is it just PCI bandwidth thing which really dont show any >>>>>>>>>>>> difference in testpmd? >>>>>>>>>>> >>>>>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>>>>>> painful to change defaults. You need to explain that now you >>>>>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel >>>>>>>>>>> offloads. >>>>>>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>>>>>> >>>>>>>>>> If we change testpmd defaults to "do nothing", >>>>>>>>>> then we should disable MBUF_FAST_FREE as well. >>>>>>>>> >>>>>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>>>>>> !MBUF_FAST_FREE is doing more work. >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>> >>>> >>>> >> >> > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 10:48 ` Ivan Malov @ 2023-02-02 11:41 ` Thomas Monjalon 2023-02-02 11:55 ` Ivan Malov 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-02-02 11:41 UTC (permalink / raw) To: Ferruh Yigit, Ivan Malov, Jerin Jacob Cc: Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand OK we are progressing on this topic :) 02/02/2023 11:48, Ivan Malov: > I apologise, there was a typo in the previous mail: "PMD does > not need this API". Should read as "TESTPMD does not need it". testpmd needs all ethdev API, because its purpose is to test the whole all ethdev API. Maybe the use of this function is misplaced in testpmd. It should be a specific command. By the way, what is the driver default if negotiation is not done? > On Thu, 2 Feb 2023, Ivan Malov wrote: > > On Thu, 2 Feb 2023, Ferruh Yigit wrote: > > > >> On 2/2/2023 8:50 AM, Ivan Malov wrote: > >>> On Thu, 2 Feb 2023, Ferruh Yigit wrote: > >>> > >>>> On 2/1/2023 3:22 PM, Jerin Jacob wrote: > >>>>> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> > >>>>> wrote: > >>>>>> > >>>>>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: > >>>>>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: > >>>>>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon > >>>>>>>>> <thomas@monjalon.net> wrote: > >>>>>>>>>> > >>>>>>>>>> 01/02/2023 11:58, Andrew Rybchenko: > >>>>>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: > >>>>>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko > >>>>>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: > >>>>>>>>>>>>> Frankly speaking I don't understand why default value is so > >>>>>>>>>>>>> important if we have a way to change it. Reasons should be > >>>>>>>>>>>>> really strong to change existing defaults. > >>>>>>>>>>>> > >>>>>>>>>>>> The only reason is, typically testpmd will be used performance > >>>>>>>>>>>> benchmarking as an industry standard. It is difficult to > >>>>>>>>>>>> tell/educate > >>>>>>>>>>>> the QA or customers > >>>>>>>>>>>> that, "BTW if you need to get better performance add more flag to > >>>>>>>>>>>> testpmd command line". > >>>>>>>>>> > >>>>>>>>>> I disagree. > >>>>>>>>>> When you do performance benchmark, you tune settings accordingly. > >>>>>>>>> > >>>>>>>>> IMO, We tune the system resources like queue depth not the disabling > >>>>>>>>> features for raw performance. > >>>>>>>>> queue depth etc people know to tune so it is obvious. What is not > >>>>>>>>> obvious is, testpmd only > >>>>>>>>> negotiated some features by default.I am not using that feature, > >>>>>>>>> hence > >>>>>>>>> I need to explicitly > >>>>>>>>> disable it. > >>>>>>>>> > >>>>>>>> > >>>>>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I > >>>>>>>> believe that is the case for almost all applications since API is a > >>>>>>>> relatively new one, PMD default behavior should be to enable Rx > >>>>>>>> metadata > >>>>>>>> flow rules, in case user requests them later. > >>>>>>>> > >>>>>>>> So, enabling all in application is same with not calling the API > >>>>>>>> at all. > >>>>>>>> > >>>>>>>> In this perspective, disabling Rx metadata is additional > >>>>>>>> optimization/tuning that application can do if it is sure that Rx > >>>>>>>> metadata flow rules won't be used at all. > >>>>>>>> And API is more meaningful when it is used to disable Rx metadata. > >>>>>>>> > >>>>>>>> I think it is reasonable to enable all Rx metadata by default in > >>>>>>>> testpmd > >>>>>>>> with a capability to disable it when wanted. > >>>>>>>> > >>>>>>>> OR > >>>>>>>> > >>>>>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by > >>>>>>>> default in > >>>>>>>> testpmd, it is only called when it is requested explicitly from user, > >>>>>>>> enable or disable. > >>>>>>> > >>>>>>> Second option looks good to me. > >>>>>>> When > >>>>>>> 1) user request for action which is needed negotiate(), > >>>>>>> AND > >>>>>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP > >>>>>>> then, testpmd print a warning that need to enable > >>>>>>> rte_eth_rx_metadata_negotiate(). > >>>>>>> > >>>>>> > >>>>>> We are not suggesting same thing. > >>>>>> > >>>>>> What you described above assumes PMD disabled Rx metadata flow rule > >>>>>> support by default, and it needs to be enabled explicitly by > >>>>>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for > >>>>>> functionality. > >>>>>> > >>>>>> As far as I understand PMD wants to disable this flow rule by default > >>>>>> because of performance concerns. But this creates inconsistency between > >>>>>> PMDs, because rest of them will enable this flow rule by default (if it > >>>>>> is supported) and be ready to use it when proper flow rule created. > >>>>>> > >>>>>> With this approach some PMDs will need > >>>>>> 'rte_eth_rx_metadata_negotiate()' > >>>>>> to enable Rx metadata flow rules, some won't. This can be confusing for > >>>>>> applications that *some* PMDs require double enabling with specific API > >>>>>> call. > >>>>>> > >>>>>> > >>>>>> Instead what I was trying to suggest is reverse, > >>>>>> all PMDs enable the Rx metadata flow rule by default, and don't require > >>>>>> double enabling. > >>>>>> But if application knows that it won't use Rx metadata flow rule, it > >>>>>> can > >>>>>> disable it to optimize the performance. > >>>>>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and > >>>>>> for testpmd context it can be called via a command on demand by user > >>>>>> for > >>>>>> optimization purpose. > >>>>> > >>>>> This won't solve concern I have outlined earlier[1]. > >>>>> > >>>> > >>>> Yes, it won't. > >>>> > >>>>> I think, The part of the problem there is no enough adaption of > >>>>> rte_eth_rx_metadata_negotiate(), > >>>>> > >>>>> The view is total different from PMD maintainer PoV vs testpmd > >>>>> application PoV. > >>>>> > >>>> > >>>> Agree, > >>>> and I assume it is different for user application too, which may > >>>> prioritize consistency and portability. > >>>> > >>>> Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I > >>>> think it is confusing. > >>> > >>> Forgive me, in which way is it confusing? > >>> > >> > >> All other flow rules enabled by creating flow rule, but this one > > > > Hold on.. Did you just say "flow rules"? But this API is *not* about > > flow rules. I suggest you please re-read description of the API. > > It reads: "Negotiate the NIC's ability to deliver specific > > kinds of metadata to the PMD". Nothing about flows there. > > > > Why is it decoupled from flow library this way? Because there is > > a drastic difference between generating and plumbing metadata > > INSIDE the NIC's flow engine, on the one hand, and delivering > > these data from the NIC to the host driver, on the other. > > > > Let me explain. Say, one creates the following flow rules: > > > > (a) flow create 0 transfer group 0 pattern [A] / end \ > > actions mark id XXX jump group 1 / end > > (b) flow create 0 transfer group 0 pattern [B] / end \ > > actions mark id YYY jump group 1 / end > > > > (c) flow create 0 transfer group 1 pattern mark id is XXX / end \ > > actions represented_port ethdev_id 1 / end > > (d) flow create 0 transfer group 1 pattern mark id is YYY / end \ > > actions drop / end > > > > In this example, metadata of type "MARK" is used to partition > > flow group (table) 1 into multiple lookup sections. So the > > mark value is GENERATED by the flow engine and then it is > > CONSUMED by this very flow engine. The application may > > NOT necessarily want to receive the mark with mbufs... > > > > And it is only when the application wants these metadata > > DELIVERED to it that it has to call the negotiate API. > > > > The short of it, nothing prevents the driver from accepting > > flow create requests that leverage some meta items/actions. > > Drivers do not need the negotiate API to *configure flow*. > > They only need this API in order to let the application > > choose whether metadata will be DELIVERED (!) or not. > > > >> requires an API to enable it, so I believe it is inconsistent in that way. > > > > Please see above. Everything is consistent as *flow library* > > and *negotiate metadata delivery* API are totally decoupled. > > > >> > >> From application perspective, assume that it doesn't know NIC details, > >> should it call this API or not? Without API call should application > >> assume Rx metadata flow rules are enabled or disabled? > > > > Frankly, applications like testpmd need never call this API. > > Simply because seeing, for example, MARK values in mbufs is > > useless to it. This API is needed by other applications. > > For example, OvS has partial MARK+RSS offload. It adds > > flows that distribute packets across multiple queues > > and set some MARK values for them. OvS is interested > > in getting this values with mbufs since they affect > > further lookups in software... So, OvS, knowing it > > wants these metadata DELIVERED (!), should invoke > > this metadata negotiate API to ensure that. > > > >> > >> > >> As I understand intention is to get hint from application if it will > >> require Rx metadata flow rules so that PMD can optimize better, but if > > > > No, nothing about flow rules. Just delivery of metadata with mbufs. > > > >> PMD doesn't enable Rx metadata flow rules when this API call is missing > > > > Again, PMD shall not make decisions on whether to enable or disable > > support for some FLOW primitives based on interactions via this API. > > This API exists solely to let PMD configure delivery of metadata, > > i.e. not the way it is generated in the first instance. > > > >> than it becomes a mandatory API to configure the device. But I think it > >> should be optional for optimization. > >> > >> Also if application not sure to use this flow rule or not, it will by > >> default enable all in any case, this will reduce the benefit. As done in > >> testpmd. > > > > Please see above. PMD does not need this API, I take it. > > > >> > >> > >> API works in both ways, it request to enable some Rx metadata flow rule, > >> but based on what PMD returns application can know what device supports, > >> this also inconsistent with how other flow rules work, we don't have API > >> to get capability but detect them via flow create/validate. > >> Can there be a case API returns a flow rule negotiated, but it fails > >> when tried to create the flow rule, isn't this confusing for application > >> > >> > >> I think if we continue this approach there can be multiple enable and > >> capability learning APIs for various flow rules or flow rule groups, and > >> this can make flow API much more harder to use for applications. > > > > See my explanations above. This API is not about flows. Period. > > > >> > >> > >> > >>>> > >>>>> Just to avoid back and forth. We will call off this patch and remove > >>>>> rte_eth_rx_metadata_negotiate() > >>>>> PMD callback from cnxk driver. Keep it as old behavior, so we don't > >>>>> need to care > >>>>> about rte_eth_rx_metadata_negotiate(). > >>>>> > >>>> > >>>> When you remove 'rx_metadata_negotiate' callback, what will be the PMD > >>>> behavior? I assume PMD will do the required preparations as if all Rx > >>>> metadata is enabled. > >>>> And what is the performance impact, is removing callback improve the > >>>> performance? > >>>> > >>>> > >>>>> [1] > >>>>> The only reason is, typically testpmd will be used performance > >>>>> benchmarking as an industry standard. It is difficult to tell/educate > >>>>> the QA or customers > >>>>> that, "BTW if you need to get better performance add more flag to > >>>>> testpmd command line". > >>>>> To make that worst, only some PMD needs to give the additional > >>>>> parameter to get better number. > >>>>> And also, testpmd usage will be treated as application modeling. > >>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>> > >>>>>>>>> > >>>>>>>>>> > >>>>>>>>>>>> To make that worst, only some PMD needs to give the additional > >>>>>>>>>>>> parameter to get better number. > >>>>>>>>>>>> And also, testpmd usage will be treated as application modeling. > >>>>>>>>>>>> > >>>>>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the > >>>>>>>>>>>> situation with sfc driver? > >>>>>>>>>>>> Keeping it as negotiated and not use the feature, will impact > >>>>>>>>>>>> the per > >>>>>>>>>>>> core performance of sfc or > >>>>>>>>>>>> is it just PCI bandwidth thing which really dont show any > >>>>>>>>>>>> difference in testpmd? > >>>>>>>>>>> > >>>>>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, > >>>>>>>>>>> it is better to negotiate nothing by default. But it is always > >>>>>>>>>>> painful to change defaults. You need to explain that now you > >>>>>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel > >>>>>>>>>>> offloads. > >>>>>>>>>>> Yes, it will be required on sfc and cnxk only. > >>>>>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. > >>>>>>>>>> > >>>>>>>>>> If we change testpmd defaults to "do nothing", > >>>>>>>>>> then we should disable MBUF_FAST_FREE as well. > >>>>>>>>> > >>>>>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, > >>>>>>>>> !MBUF_FAST_FREE is doing more work. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>> > >>>>>> > >>>> > >>>> > >> > >> > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 11:41 ` Thomas Monjalon @ 2023-02-02 11:55 ` Ivan Malov 2023-02-02 12:03 ` Thomas Monjalon 0 siblings, 1 reply; 73+ messages in thread From: Ivan Malov @ 2023-02-02 11:55 UTC (permalink / raw) To: Thomas Monjalon Cc: Ferruh Yigit, Jerin Jacob, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand [-- Attachment #1: Type: text/plain, Size: 13671 bytes --] On Thu, 2 Feb 2023, Thomas Monjalon wrote: > OK we are progressing on this topic :) Indeed we are. > > 02/02/2023 11:48, Ivan Malov: >> I apologise, there was a typo in the previous mail: "PMD does >> not need this API". Should read as "TESTPMD does not need it". > > testpmd needs all ethdev API, > because its purpose is to test the whole all ethdev API. Touché. > > Maybe the use of this function is misplaced in testpmd. > It should be a specific command. So.. indeed. A specific command which, as I said, is invoked explicitly by the person operating testpmd. > By the way, what is the driver default if negotiation is not done? The answer is in the question. It's the driver's default. If the driver believes it shall NOT deliver metadata for the sake of improved performance, default = all disabled. If this delivery is a don't care to performance, then the driver might want to enable everything by default. This decision is made by a PMD maintainer, I take it. > > >> On Thu, 2 Feb 2023, Ivan Malov wrote: >>> On Thu, 2 Feb 2023, Ferruh Yigit wrote: >>> >>>> On 2/2/2023 8:50 AM, Ivan Malov wrote: >>>>> On Thu, 2 Feb 2023, Ferruh Yigit wrote: >>>>> >>>>>> On 2/1/2023 3:22 PM, Jerin Jacob wrote: >>>>>>> On Wed, Feb 1, 2023 at 8:20 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>>>> wrote: >>>>>>>> >>>>>>>> On 2/1/2023 1:48 PM, Jerin Jacob wrote: >>>>>>>>> On Wed, Feb 1, 2023 at 5:06 PM Ferruh Yigit <ferruh.yigit@amd.com> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On 2/1/2023 11:15 AM, Jerin Jacob wrote: >>>>>>>>>>> On Wed, Feb 1, 2023 at 4:35 PM Thomas Monjalon >>>>>>>>>>> <thomas@monjalon.net> wrote: >>>>>>>>>>>> >>>>>>>>>>>> 01/02/2023 11:58, Andrew Rybchenko: >>>>>>>>>>>>> On 2/1/23 13:48, Jerin Jacob wrote: >>>>>>>>>>>>>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>>>>>>>>>>>>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>>>>>>>>>>>>> Frankly speaking I don't understand why default value is so >>>>>>>>>>>>>>> important if we have a way to change it. Reasons should be >>>>>>>>>>>>>>> really strong to change existing defaults. >>>>>>>>>>>>>> >>>>>>>>>>>>>> The only reason is, typically testpmd will be used performance >>>>>>>>>>>>>> benchmarking as an industry standard. It is difficult to >>>>>>>>>>>>>> tell/educate >>>>>>>>>>>>>> the QA or customers >>>>>>>>>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>>>>>>>>> testpmd command line". >>>>>>>>>>>> >>>>>>>>>>>> I disagree. >>>>>>>>>>>> When you do performance benchmark, you tune settings accordingly. >>>>>>>>>>> >>>>>>>>>>> IMO, We tune the system resources like queue depth not the disabling >>>>>>>>>>> features for raw performance. >>>>>>>>>>> queue depth etc people know to tune so it is obvious. What is not >>>>>>>>>>> obvious is, testpmd only >>>>>>>>>>> negotiated some features by default.I am not using that feature, >>>>>>>>>>> hence >>>>>>>>>>> I need to explicitly >>>>>>>>>>> disable it. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> When 'rte_eth_rx_metadata_negotiate()' API is NOT used at all, and I >>>>>>>>>> believe that is the case for almost all applications since API is a >>>>>>>>>> relatively new one, PMD default behavior should be to enable Rx >>>>>>>>>> metadata >>>>>>>>>> flow rules, in case user requests them later. >>>>>>>>>> >>>>>>>>>> So, enabling all in application is same with not calling the API >>>>>>>>>> at all. >>>>>>>>>> >>>>>>>>>> In this perspective, disabling Rx metadata is additional >>>>>>>>>> optimization/tuning that application can do if it is sure that Rx >>>>>>>>>> metadata flow rules won't be used at all. >>>>>>>>>> And API is more meaningful when it is used to disable Rx metadata. >>>>>>>>>> >>>>>>>>>> I think it is reasonable to enable all Rx metadata by default in >>>>>>>>>> testpmd >>>>>>>>>> with a capability to disable it when wanted. >>>>>>>>>> >>>>>>>>>> OR >>>>>>>>>> >>>>>>>>>> May be we don't call 'rte_eth_rx_metadata_negotiate()' API by >>>>>>>>>> default in >>>>>>>>>> testpmd, it is only called when it is requested explicitly from user, >>>>>>>>>> enable or disable. >>>>>>>>> >>>>>>>>> Second option looks good to me. >>>>>>>>> When >>>>>>>>> 1) user request for action which is needed negotiate(), >>>>>>>>> AND >>>>>>>>> 2) rte_eth_rx_metadata_negotiate() != ENOSUP >>>>>>>>> then, testpmd print a warning that need to enable >>>>>>>>> rte_eth_rx_metadata_negotiate(). >>>>>>>>> >>>>>>>> >>>>>>>> We are not suggesting same thing. >>>>>>>> >>>>>>>> What you described above assumes PMD disabled Rx metadata flow rule >>>>>>>> support by default, and it needs to be enabled explicitly by >>>>>>>> 'rte_eth_rx_metadata_negotiate()' API. This API becomes mandatory for >>>>>>>> functionality. >>>>>>>> >>>>>>>> As far as I understand PMD wants to disable this flow rule by default >>>>>>>> because of performance concerns. But this creates inconsistency between >>>>>>>> PMDs, because rest of them will enable this flow rule by default (if it >>>>>>>> is supported) and be ready to use it when proper flow rule created. >>>>>>>> >>>>>>>> With this approach some PMDs will need >>>>>>>> 'rte_eth_rx_metadata_negotiate()' >>>>>>>> to enable Rx metadata flow rules, some won't. This can be confusing for >>>>>>>> applications that *some* PMDs require double enabling with specific API >>>>>>>> call. >>>>>>>> >>>>>>>> >>>>>>>> Instead what I was trying to suggest is reverse, >>>>>>>> all PMDs enable the Rx metadata flow rule by default, and don't require >>>>>>>> double enabling. >>>>>>>> But if application knows that it won't use Rx metadata flow rule, it >>>>>>>> can >>>>>>>> disable it to optimize the performance. >>>>>>>> This makes 'rte_eth_rx_metadata_negotiate()' functionally optional, and >>>>>>>> for testpmd context it can be called via a command on demand by user >>>>>>>> for >>>>>>>> optimization purpose. >>>>>>> >>>>>>> This won't solve concern I have outlined earlier[1]. >>>>>>> >>>>>> >>>>>> Yes, it won't. >>>>>> >>>>>>> I think, The part of the problem there is no enough adaption of >>>>>>> rte_eth_rx_metadata_negotiate(), >>>>>>> >>>>>>> The view is total different from PMD maintainer PoV vs testpmd >>>>>>> application PoV. >>>>>>> >>>>>> >>>>>> Agree, >>>>>> and I assume it is different for user application too, which may >>>>>> prioritize consistency and portability. >>>>>> >>>>>> Overall, I am not fan of the 'rte_eth_rx_metadata_negotiate()' API, I >>>>>> think it is confusing. >>>>> >>>>> Forgive me, in which way is it confusing? >>>>> >>>> >>>> All other flow rules enabled by creating flow rule, but this one >>> >>> Hold on.. Did you just say "flow rules"? But this API is *not* about >>> flow rules. I suggest you please re-read description of the API. >>> It reads: "Negotiate the NIC's ability to deliver specific >>> kinds of metadata to the PMD". Nothing about flows there. >>> >>> Why is it decoupled from flow library this way? Because there is >>> a drastic difference between generating and plumbing metadata >>> INSIDE the NIC's flow engine, on the one hand, and delivering >>> these data from the NIC to the host driver, on the other. >>> >>> Let me explain. Say, one creates the following flow rules: >>> >>> (a) flow create 0 transfer group 0 pattern [A] / end \ >>> actions mark id XXX jump group 1 / end >>> (b) flow create 0 transfer group 0 pattern [B] / end \ >>> actions mark id YYY jump group 1 / end >>> >>> (c) flow create 0 transfer group 1 pattern mark id is XXX / end \ >>> actions represented_port ethdev_id 1 / end >>> (d) flow create 0 transfer group 1 pattern mark id is YYY / end \ >>> actions drop / end >>> >>> In this example, metadata of type "MARK" is used to partition >>> flow group (table) 1 into multiple lookup sections. So the >>> mark value is GENERATED by the flow engine and then it is >>> CONSUMED by this very flow engine. The application may >>> NOT necessarily want to receive the mark with mbufs... >>> >>> And it is only when the application wants these metadata >>> DELIVERED to it that it has to call the negotiate API. >>> >>> The short of it, nothing prevents the driver from accepting >>> flow create requests that leverage some meta items/actions. >>> Drivers do not need the negotiate API to *configure flow*. >>> They only need this API in order to let the application >>> choose whether metadata will be DELIVERED (!) or not. >>> >>>> requires an API to enable it, so I believe it is inconsistent in that way. >>> >>> Please see above. Everything is consistent as *flow library* >>> and *negotiate metadata delivery* API are totally decoupled. >>> >>>> >>>> From application perspective, assume that it doesn't know NIC details, >>>> should it call this API or not? Without API call should application >>>> assume Rx metadata flow rules are enabled or disabled? >>> >>> Frankly, applications like testpmd need never call this API. >>> Simply because seeing, for example, MARK values in mbufs is >>> useless to it. This API is needed by other applications. >>> For example, OvS has partial MARK+RSS offload. It adds >>> flows that distribute packets across multiple queues >>> and set some MARK values for them. OvS is interested >>> in getting this values with mbufs since they affect >>> further lookups in software... So, OvS, knowing it >>> wants these metadata DELIVERED (!), should invoke >>> this metadata negotiate API to ensure that. >>> >>>> >>>> >>>> As I understand intention is to get hint from application if it will >>>> require Rx metadata flow rules so that PMD can optimize better, but if >>> >>> No, nothing about flow rules. Just delivery of metadata with mbufs. >>> >>>> PMD doesn't enable Rx metadata flow rules when this API call is missing >>> >>> Again, PMD shall not make decisions on whether to enable or disable >>> support for some FLOW primitives based on interactions via this API. >>> This API exists solely to let PMD configure delivery of metadata, >>> i.e. not the way it is generated in the first instance. >>> >>>> than it becomes a mandatory API to configure the device. But I think it >>>> should be optional for optimization. >>>> >>>> Also if application not sure to use this flow rule or not, it will by >>>> default enable all in any case, this will reduce the benefit. As done in >>>> testpmd. >>> >>> Please see above. PMD does not need this API, I take it. >>> >>>> >>>> >>>> API works in both ways, it request to enable some Rx metadata flow rule, >>>> but based on what PMD returns application can know what device supports, >>>> this also inconsistent with how other flow rules work, we don't have API >>>> to get capability but detect them via flow create/validate. >>>> Can there be a case API returns a flow rule negotiated, but it fails >>>> when tried to create the flow rule, isn't this confusing for application >>>> >>>> >>>> I think if we continue this approach there can be multiple enable and >>>> capability learning APIs for various flow rules or flow rule groups, and >>>> this can make flow API much more harder to use for applications. >>> >>> See my explanations above. This API is not about flows. Period. >>> >>>> >>>> >>>> >>>>>> >>>>>>> Just to avoid back and forth. We will call off this patch and remove >>>>>>> rte_eth_rx_metadata_negotiate() >>>>>>> PMD callback from cnxk driver. Keep it as old behavior, so we don't >>>>>>> need to care >>>>>>> about rte_eth_rx_metadata_negotiate(). >>>>>>> >>>>>> >>>>>> When you remove 'rx_metadata_negotiate' callback, what will be the PMD >>>>>> behavior? I assume PMD will do the required preparations as if all Rx >>>>>> metadata is enabled. >>>>>> And what is the performance impact, is removing callback improve the >>>>>> performance? >>>>>> >>>>>> >>>>>>> [1] >>>>>>> The only reason is, typically testpmd will be used performance >>>>>>> benchmarking as an industry standard. It is difficult to tell/educate >>>>>>> the QA or customers >>>>>>> that, "BTW if you need to get better performance add more flag to >>>>>>> testpmd command line". >>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>> parameter to get better number. >>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>>> To make that worst, only some PMD needs to give the additional >>>>>>>>>>>>>> parameter to get better number. >>>>>>>>>>>>>> And also, testpmd usage will be treated as application modeling. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Since this feature only used on sfc and cnxk driver, What is the >>>>>>>>>>>>>> situation with sfc driver? >>>>>>>>>>>>>> Keeping it as negotiated and not use the feature, will impact >>>>>>>>>>>>>> the per >>>>>>>>>>>>>> core performance of sfc or >>>>>>>>>>>>>> is it just PCI bandwidth thing which really dont show any >>>>>>>>>>>>>> difference in testpmd? >>>>>>>>>>>>> >>>>>>>>>>>>> Yes, sfc could run faster if no Rx metadata are negotiated. So, >>>>>>>>>>>>> it is better to negotiate nothing by default. But it is always >>>>>>>>>>>>> painful to change defaults. You need to explain that now you >>>>>>>>>>>>> need to negotiate Rx metadata to use mark, flag and tunnel >>>>>>>>>>>>> offloads. >>>>>>>>>>>>> Yes, it will be required on sfc and cnxk only. >>>>>>>>>>>>> As an sfc maintainer I don't mind to change testpmd defaults. >>>>>>>>>>>> >>>>>>>>>>>> If we change testpmd defaults to "do nothing", >>>>>>>>>>>> then we should disable MBUF_FAST_FREE as well. >>>>>>>>>>> >>>>>>>>>>> if you see MBUF_FAST_FREE, it does nothing. Actually, >>>>>>>>>>> !MBUF_FAST_FREE is doing more work. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>> >>>> >>> >> > > > > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 11:55 ` Ivan Malov @ 2023-02-02 12:03 ` Thomas Monjalon 2023-02-02 12:21 ` Andrew Rybchenko 0 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-02-02 12:03 UTC (permalink / raw) To: Ivan Malov Cc: Ferruh Yigit, Jerin Jacob, Andrew Rybchenko, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand 02/02/2023 12:55, Ivan Malov: > On Thu, 2 Feb 2023, Thomas Monjalon wrote: > > > OK we are progressing on this topic :) > > Indeed we are. > > > > > 02/02/2023 11:48, Ivan Malov: > >> I apologise, there was a typo in the previous mail: "PMD does > >> not need this API". Should read as "TESTPMD does not need it". > > > > testpmd needs all ethdev API, > > because its purpose is to test the whole all ethdev API. > > Touché. > > > > > Maybe the use of this function is misplaced in testpmd. > > It should be a specific command. > > So.. indeed. A specific command which, as I said, is > invoked explicitly by the person operating testpmd. > > > By the way, what is the driver default if negotiation is not done? > > The answer is in the question. It's the driver's default. > If the driver believes it shall NOT deliver metadata for > the sake of improved performance, default = all disabled. > If this delivery is a don't care to performance, then > the driver might want to enable everything by default. > > This decision is made by a PMD maintainer, I take it. I think it is better to have the same default for all drivers. What others think? ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-02 12:03 ` Thomas Monjalon @ 2023-02-02 12:21 ` Andrew Rybchenko 0 siblings, 0 replies; 73+ messages in thread From: Andrew Rybchenko @ 2023-02-02 12:21 UTC (permalink / raw) To: Thomas Monjalon, Ivan Malov Cc: Ferruh Yigit, Jerin Jacob, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand On 2/2/23 15:03, Thomas Monjalon wrote: > 02/02/2023 12:55, Ivan Malov: >> On Thu, 2 Feb 2023, Thomas Monjalon wrote: >> >>> OK we are progressing on this topic :) >> >> Indeed we are. >> >>> >>> 02/02/2023 11:48, Ivan Malov: >>>> I apologise, there was a typo in the previous mail: "PMD does >>>> not need this API". Should read as "TESTPMD does not need it". >>> >>> testpmd needs all ethdev API, >>> because its purpose is to test the whole all ethdev API. >> >> Touché. >> >>> >>> Maybe the use of this function is misplaced in testpmd. >>> It should be a specific command. >> >> So.. indeed. A specific command which, as I said, is >> invoked explicitly by the person operating testpmd. >> >>> By the way, what is the driver default if negotiation is not done? >> >> The answer is in the question. It's the driver's default. >> If the driver believes it shall NOT deliver metadata for >> the sake of improved performance, default = all disabled. >> If this delivery is a don't care to performance, then >> the driver might want to enable everything by default. >> >> This decision is made by a PMD maintainer, I take it. > > I think it is better to have the same default for all drivers. > What others think? Of course, it would be better since it would simplify porting apps from one NIC to another. The problem is that some NICs do not require negotiation since corresponding data is always available. If so, the same default should be to provide all Rx metadata by default. However, it would decrease performance for NIC NICs with default settings. (Similar situation is with Rx checksum offload. Some NICs always calculate Rx checksum and always provide results, however, it is not a good reason to require it for all NICs.) ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-02-01 11:04 ` Thomas Monjalon 2023-02-01 11:15 ` Jerin Jacob @ 2023-02-01 11:20 ` Ivan Malov 1 sibling, 0 replies; 73+ messages in thread From: Ivan Malov @ 2023-02-01 11:20 UTC (permalink / raw) To: Thomas Monjalon Cc: Jerin Jacob, Andrew Rybchenko, Ferruh Yigit, Ori Kam, Nithin Kumar Dabilpuram, Aman Singh, Yuying Zhang, dev, Hanumanth Reddy Pothula, Slava Ovsiienko, Jerin Jacob Kollanukkaran, david.marchand Hi Thomas, On Wed, 1 Feb 2023, Thomas Monjalon wrote: > 01/02/2023 11:58, Andrew Rybchenko: >> On 2/1/23 13:48, Jerin Jacob wrote: >>> On Wed, Feb 1, 2023 at 2:59 PM Andrew Rybchenko >>> <andrew.rybchenko@oktetlabs.ru> wrote: >>>> Frankly speaking I don't understand why default value is so >>>> important if we have a way to change it. Reasons should be >>>> really strong to change existing defaults. >>> >>> The only reason is, typically testpmd will be used performance >>> benchmarking as an industry standard. It is difficult to tell/educate >>> the QA or customers >>> that, "BTW if you need to get better performance add more flag to >>> testpmd command line". > > I disagree. > When you do performance benchmark, you tune settings accordingly. > >>> To make that worst, only some PMD needs to give the additional >>> parameter to get better number. >>> And also, testpmd usage will be treated as application modeling. >>> >>> Since this feature only used on sfc and cnxk driver, What is the >>> situation with sfc driver? >>> Keeping it as negotiated and not use the feature, will impact the per >>> core performance of sfc or >>> is it just PCI bandwidth thing which really dont show any difference in testpmd? >> >> Yes, sfc could run faster if no Rx metadata are negotiated. So, >> it is better to negotiate nothing by default. But it is always >> painful to change defaults. You need to explain that now you >> need to negotiate Rx metadata to use mark, flag and tunnel offloads. >> Yes, it will be required on sfc and cnxk only. >> As an sfc maintainer I don't mind to change testpmd defaults. > > If we change testpmd defaults to "do nothing", > then we should disable MBUF_FAST_FREE as well. No. These are completely different. MBUF_FAST_FREE is an optimisation technique, it's in the offload namespace. Whilst "negotiate metadata" does not offload anything. It just tells the PMD to enable *delivery* of some data *when it is present*. And whether it will be present or not, - this is decided by flow actions. And, flow actions, in turn, belong in the domain of decisions made by a specific person operating the application. So no need to remove FAST_FREE. > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 9:30 ` [EXT] " Hanumanth Reddy Pothula 2023-01-25 12:55 ` Thomas Monjalon @ 2023-01-25 13:17 ` Ferruh Yigit 2023-01-25 13:21 ` Ferruh Yigit 2023-01-25 13:21 ` Ferruh Yigit 2 siblings, 1 reply; 73+ messages in thread From: Ferruh Yigit @ 2023-01-25 13:17 UTC (permalink / raw) To: Hanumanth Reddy Pothula, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, Thomas Monjalon Cc: dev, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram On 1/25/2023 9:30 AM, Hanumanth Reddy Pothula wrote: > ++ Ivan Malov and Andrew Rybchenko > >> -----Original Message----- >> From: Ferruh Yigit <ferruh.yigit@amd.com> >> Sent: Tuesday, January 24, 2023 11:34 PM >> To: Hanumanth Reddy Pothula <hpothula@marvell.com>; Aman Singh >> <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com> >> Cc: dev@dpdk.org; andrew.rybchenko@oktetlabs.ru; >> viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; >> Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> >> Subject: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process >> Rx metadata negotiation >> >> External Email >> >> ---------------------------------------------------------------------- >> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: >>> Presently, Rx metadata is sent to PMD by default, leading to a >>> performance drop as processing for the same in Rx path takes extra >>> cycles. >>> >>> Hence, add new testpmd command, >>> 'enable port <port_id> nic_to_pmd_rx_metadata' >>> >>> This command helps in sending Rx metadata to PMD and thereby Rx >>> metadata flow command requests are processed. >>> >>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> >> >> Hi Hanumanth, >> >> I agree with Thomas for the patch. >> >> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be >> enabled, but at this stage if there is no flow rule for Rx metadata why it is >> consuming extra cycles? >> >> Can you update driver code to process Rx metadata when it is enabled by >> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least >> one flow rule for it? > > #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. > We thought it was added so that when that metadata is not needed, application need not call this > thereby saving cycles/bandwidth. > Purpose looks like to 'negotiate', so it is both ways: a) To learn Rx Meta capability of HW b) To configure Rx Meta feature for HW So it is both to help application to learn what flow rule is supported and to help driver to improve performance. Before this API application assumed all Rx metadata flow rules are supported, so why enabling all causing performance drop, that was the default without this API. But other-way around can be true, to disable some offloads can improve driver performance. Looking again, > #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is > configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. > > #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have > an option to enable it. In this case, testpmd is by default calling this negotiation. > > We can update the driver if the purpose of this API is clear. Hi Hanumanth, After looking the history of the API again, you may be right. One of the previous version commit log describes the intention better [1], because of negative performance impact of enabling Rx metadata offload by default and difficulty to switch configuration dynamically, there is a desire to learn application intention before configuration. Although I have some concerns with this API [2] it is already there as stable API. So it sounds reasonable to make this configurable for a test application, indeed intention of the API is to get this configuration from application and operate based on it. Next question is what should be the default value, I am not sure about it, there are only a few drivers impacted from this overall. For the Thomas' point, it helps to test the feature of its impact if it is enabled by default. Will it work to enable them all by default and add capability to disable it in testpmd, which helps to run performance tests also to verify the impact of the API? Thanks, ferruh [1] https://inbox.dpdk.org/dev/20210902142359.28138-2-ivan.malov@oktetlabs.ru/ [2] API does two things: a) Learn Rx Meta capability of HW b) Configure Rx Meta feature for HW Functionality (a) conflicts with rest of the flow rules that capability checked via `rte_flow_validate()` API. Functionality (b) conflicts with configuring flow actions, this configuration should be controlled by flow rule not with a specific API, although I understand the reasoning behind the API. RSS_HASH offload seems given example in the discussions but it is still controlled via offload flag, there is no specific API to configure RSS hash functionality, same could be done here. [/2] ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 13:17 ` Ferruh Yigit @ 2023-01-25 13:21 ` Ferruh Yigit 0 siblings, 0 replies; 73+ messages in thread From: Ferruh Yigit @ 2023-01-25 13:21 UTC (permalink / raw) To: Hanumanth Reddy Pothula, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko, Thomas Monjalon Cc: dev, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram On 1/25/2023 1:17 PM, Ferruh Yigit wrote: > On 1/25/2023 9:30 AM, Hanumanth Reddy Pothula wrote: >> ++ Ivan Malov and Andrew Rybchenko >> >>> -----Original Message----- >>> From: Ferruh Yigit <ferruh.yigit@amd.com> >>> Sent: Tuesday, January 24, 2023 11:34 PM >>> To: Hanumanth Reddy Pothula <hpothula@marvell.com>; Aman Singh >>> <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com> >>> Cc: dev@dpdk.org; andrew.rybchenko@oktetlabs.ru; >>> viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; >>> Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> >>> Subject: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process >>> Rx metadata negotiation >>> >>> External Email >>> >>> ---------------------------------------------------------------------- >>> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: >>>> Presently, Rx metadata is sent to PMD by default, leading to a >>>> performance drop as processing for the same in Rx path takes extra >>>> cycles. >>>> >>>> Hence, add new testpmd command, >>>> 'enable port <port_id> nic_to_pmd_rx_metadata' >>>> >>>> This command helps in sending Rx metadata to PMD and thereby Rx >>>> metadata flow command requests are processed. >>>> >>>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> >>> >>> Hi Hanumanth, >>> >>> I agree with Thomas for the patch. >>> >>> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be >>> enabled, but at this stage if there is no flow rule for Rx metadata why it is >>> consuming extra cycles? >>> >>> Can you update driver code to process Rx metadata when it is enabled by >>> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least >>> one flow rule for it? >> >> #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. >> We thought it was added so that when that metadata is not needed, application need not call this >> thereby saving cycles/bandwidth. >> > > Purpose looks like to 'negotiate', so it is both ways: > a) To learn Rx Meta capability of HW > b) To configure Rx Meta feature for HW > > So it is both to help application to learn what flow rule is supported > and to help driver to improve performance. > > Before this API application assumed all Rx metadata flow rules are > supported, so why enabling all causing performance drop, that was the > default without this API. > > But other-way around can be true, to disable some offloads can improve > driver performance. > > Looking again, > please ignore this email, it has unfinished draft reply by mistake, I will send a new one. > >> #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is >> configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. >> >> #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have >> an option to enable it. In this case, testpmd is by default calling this negotiation. >> >> We can update the driver if the purpose of this API is clear. > > > Hi Hanumanth, > > After looking the history of the API again, you may be right. > > One of the previous version commit log describes the intention better > [1], because of negative performance impact of enabling Rx metadata > offload by default and difficulty to switch configuration dynamically, > there is a desire to learn application intention before configuration. > > Although I have some concerns with this API [2] it is already there as > stable API. > > So it sounds reasonable to make this configurable for a test > application, indeed intention of the API is to get this configuration > from application and operate based on it. > > Next question is what should be the default value, I am not sure about > it, there are only a few drivers impacted from this overall. > For the Thomas' point, it helps to test the feature of its impact if it > is enabled by default. > > Will it work to enable them all by default and add capability to disable > it in testpmd, which helps to run performance tests also to verify the > impact of the API? > > Thanks, > ferruh > > > > [1] > https://inbox.dpdk.org/dev/20210902142359.28138-2-ivan.malov@oktetlabs.ru/ > > > [2] > API does two things: > a) Learn Rx Meta capability of HW > b) Configure Rx Meta feature for HW > > Functionality (a) conflicts with rest of the flow rules that capability > checked via `rte_flow_validate()` API. > > Functionality (b) conflicts with configuring flow actions, this > configuration should be controlled by flow rule not with a specific API, > although I understand the reasoning behind the API. > > RSS_HASH offload seems given example in the discussions but it is still > controlled via offload flag, there is no specific API to configure RSS > hash functionality, same could be done here. > [/2] ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation 2023-01-25 9:30 ` [EXT] " Hanumanth Reddy Pothula 2023-01-25 12:55 ` Thomas Monjalon 2023-01-25 13:17 ` Ferruh Yigit @ 2023-01-25 13:21 ` Ferruh Yigit 2 siblings, 0 replies; 73+ messages in thread From: Ferruh Yigit @ 2023-01-25 13:21 UTC (permalink / raw) To: Hanumanth Reddy Pothula, Aman Singh, Yuying Zhang, Ivan Malov, Andrew Rybchenko Cc: dev, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram On 1/25/2023 9:30 AM, Hanumanth Reddy Pothula wrote: > ++ Ivan Malov and Andrew Rybchenko > >> -----Original Message----- >> From: Ferruh Yigit <ferruh.yigit@amd.com> >> Sent: Tuesday, January 24, 2023 11:34 PM >> To: Hanumanth Reddy Pothula <hpothula@marvell.com>; Aman Singh >> <aman.deep.singh@intel.com>; Yuying Zhang <yuying.zhang@intel.com> >> Cc: dev@dpdk.org; andrew.rybchenko@oktetlabs.ru; >> viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; >> Nithin Kumar Dabilpuram <ndabilpuram@marvell.com> >> Subject: [EXT] Re: [PATCH v5 2/2] app/testpmd: add command to process >> Rx metadata negotiation >> >> External Email >> >> ---------------------------------------------------------------------- >> On 12/21/2022 2:07 AM, Hanumanth Pothula wrote: >>> Presently, Rx metadata is sent to PMD by default, leading to a >>> performance drop as processing for the same in Rx path takes extra >>> cycles. >>> >>> Hence, add new testpmd command, >>> 'enable port <port_id> nic_to_pmd_rx_metadata' >>> >>> This command helps in sending Rx metadata to PMD and thereby Rx >>> metadata flow command requests are processed. >>> >>> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> >> >> Hi Hanumanth, >> >> I agree with Thomas for the patch. >> >> 'eth_rx_metadata_negotiate_mp()' requests all Rx metadata offloads to be >> enabled, but at this stage if there is no flow rule for Rx metadata why it is >> consuming extra cycles? >> >> Can you update driver code to process Rx metadata when it is enabled by >> application (via 'rte_eth_rx_metadata_negotiate()') AND there is at least >> one flow rule for it? > > #1 What is the purpose of rte_eth_rx_metadata_negotiate() API if it is always called by testpmd. > We thought it was added so that when that metadata is not needed, application need not call this > thereby saving cycles/bandwidth. > > #2 We use this API similar to Rx/Tx offload flags so that we can set things up before device is > configured. We thought that is the purpose of having this negotiate API and avoid depleting offload flags. > > #3 Generally any new offloads added to DPDK would be in disabled state in testpmd and we would have > an option to enable it. In this case, testpmd is by default calling this negotiation. > > We can update the driver if the purpose of this API is clear. Hi Hanumanth, After looking the history of the API again, you may be right. One of the previous version commit log describes the intention better [1], because of negative performance impact of enabling Rx metadata offload by default and difficulty to switch configuration dynamically, there is a desire to learn application intention before configuration. Although I have some concerns with this API [2] it is already there as stable API. So it sounds reasonable to make this configurable for a test application, indeed intention of the API is to get this configuration from application and operate based on it. Next question is what should be the default value, I am not sure about it, there are only a few drivers impacted from this overall. For the Thomas' point, it helps to test the feature of its impact if it is enabled by default. Will it work to enable them all by default and add capability to disable it in testpmd, which helps to run performance tests also to verify the impact of the API? Thanks, ferruh [1] https://inbox.dpdk.org/dev/20210902142359.28138-2-ivan.malov@oktetlabs.ru/ [2] API does two things: a) Learn Rx Meta capability of HW b) Configure Rx Meta feature for HW Functionality (a) conflicts with rest of the flow rules that capability checked via `rte_flow_validate()` API. Functionality (b) conflicts with configuring flow actions, this configuration should be controlled by flow rule not with a specific API, although I understand the reasoning behind the API. RSS_HASH offload seems given example in the discussions but it is still controlled via offload flag, there is no specific API to configure RSS hash functionality, same could be done here. [/2] ^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula @ 2023-01-16 10:43 ` Hanumanth Reddy Pothula 2023-01-18 10:29 ` Thomas Monjalon 2 siblings, 0 replies; 73+ messages in thread From: Hanumanth Reddy Pothula @ 2023-01-16 10:43 UTC (permalink / raw) To: Hanumanth Reddy Pothula, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko Cc: dev, viacheslavo, Jerin Jacob Kollanukkaran, Nithin Kumar Dabilpuram Ping > -----Original Message----- > From: Hanumanth Pothula <hpothula@marvell.com> > Sent: Wednesday, December 21, 2022 7:37 AM > To: Thomas Monjalon <thomas@monjalon.net>; Ferruh Yigit > <ferruh.yigit@amd.com>; Andrew Rybchenko > <andrew.rybchenko@oktetlabs.ru> > Cc: dev@dpdk.org; viacheslavo@nvidia.com; Jerin Jacob Kollanukkaran > <jerinj@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpuram@marvell.com>; Hanumanth Reddy Pothula > <hpothula@marvell.com> > Subject: [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset > > Presently, on device reset, ethdev configuration state, dev_configured, is > not reset. > > On device reset, reset ethdev configuration state to make sure device > reconfiguration happens cleanly. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > --- > v5: > - Move nic-to-pmd-rx-metadata declaration to struct rte_port. > v4: > - As per spec rte_eth_rx_metadata_negotiate() is processed only when > dev_configured is set. Hence can't enable automatically when a flow > command requests metadata. > - Add new testpmd command to allow NIC to PMD Rx metadata > negotiation. > v3: > - Updated run_app.rst with the new command line argument, > nic-to-pmd-rx-metadata. > - Updated commit text. > v2: > - taken cared alignment issues > - renamed command line argument from rx-metadata to nic-to-pmd-rx- > metadata > - renamed variable name from rx-metadata to nic_to_pmd_rx_metadata > --- > lib/ethdev/rte_ethdev.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index > 5d5e18db1e..18c59044bc 100644 > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -1629,6 +1629,8 @@ rte_eth_dev_reset(uint16_t port_id) > port_id, rte_strerror(-ret)); > } > ret = dev->dev_ops->dev_reset(dev); > + if (!ret) > + dev->data->dev_configured = 0; > > return eth_err(port_id, ret); > } > -- > 2.25.1 ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula 2023-01-16 10:43 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Reddy Pothula @ 2023-01-18 10:29 ` Thomas Monjalon 2023-01-24 18:14 ` Ferruh Yigit 2 siblings, 1 reply; 73+ messages in thread From: Thomas Monjalon @ 2023-01-18 10:29 UTC (permalink / raw) To: Hanumanth Pothula Cc: Ferruh Yigit, Andrew Rybchenko, dev, viacheslavo, jerinj, ndabilpuram 21/12/2022 03:07, Hanumanth Pothula: > Presently, on device reset, ethdev configuration state, > dev_configured, is not reset. > > On device reset, reset ethdev configuration state to make > sure device reconfiguration happens cleanly. > > Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> A "Fixes" line is missing to show the root cause and help backports. > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -1629,6 +1629,8 @@ rte_eth_dev_reset(uint16_t port_id) > port_id, rte_strerror(-ret)); > } > ret = dev->dev_ops->dev_reset(dev); > + if (!ret) Should be if (ret == 0) > + dev->data->dev_configured = 0; ^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset 2023-01-18 10:29 ` Thomas Monjalon @ 2023-01-24 18:14 ` Ferruh Yigit 0 siblings, 0 replies; 73+ messages in thread From: Ferruh Yigit @ 2023-01-24 18:14 UTC (permalink / raw) To: Thomas Monjalon, Hanumanth Pothula Cc: Andrew Rybchenko, dev, viacheslavo, jerinj, ndabilpuram On 1/18/2023 10:29 AM, Thomas Monjalon wrote: > 21/12/2022 03:07, Hanumanth Pothula: >> Presently, on device reset, ethdev configuration state, >> dev_configured, is not reset. >> >> On device reset, reset ethdev configuration state to make >> sure device reconfiguration happens cleanly. >> >> Signed-off-by: Hanumanth Pothula <hpothula@marvell.com> > > A "Fixes" line is missing to show the root cause and help backports. > It should be following, that is when 'dev_configured' flag is introduced but not updated in 'rte_eth_dev_reset()': Fixes: 02edbfab1e7d ("ethdev: add dev configured flag") Cc: stable@dpdk.org Cc: lihuisong@huawei.com @Hanumanth, can you please send a new version with above fixes line and below syntax fix? >> --- a/lib/ethdev/rte_ethdev.c >> +++ b/lib/ethdev/rte_ethdev.c >> @@ -1629,6 +1629,8 @@ rte_eth_dev_reset(uint16_t port_id) >> port_id, rte_strerror(-ret)); >> } >> ret = dev->dev_ops->dev_reset(dev); >> + if (!ret) > > Should be if (ret == 0) > >> + dev->data->dev_configured = 0; > > > ^ permalink raw reply [flat|nested] 73+ messages in thread
end of thread, other threads:[~2023-02-02 12:21 UTC | newest] Thread overview: 73+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-08-01 4:41 [PATCH] app/testpmd: add command line argument 'rx-metadata' Hanumanth Pothula 2022-08-01 13:11 ` Hanumanth Pothula 2022-08-01 13:13 ` Hanumanth Pothula 2022-08-01 19:41 ` Ivan Malov 2022-08-02 16:45 ` [PATCH] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 1/2] version: 22.11-rc0 Hanumanth Pothula 2022-08-02 16:45 ` [PATCH v2 2/2] app/testpmd: add command line argument 'nic-to-pmd-rx-metadata' Hanumanth Pothula 2022-08-02 17:51 ` [PATCH v2 1/1] " Hanumanth Pothula 2022-08-30 12:36 ` Hanumanth Reddy Pothula 2022-09-01 8:03 ` Singh, Aman Deep 2022-10-04 14:48 ` Andrew Rybchenko 2022-10-06 18:35 ` [PATCH v3 1/1] app/testpmd: control passing Rx metadata to PMD Hanumanth Pothula 2022-10-17 8:32 ` Andrew Rybchenko 2022-10-27 7:34 ` Thomas Monjalon 2022-10-27 12:54 ` Thomas Monjalon 2022-12-02 16:14 ` [EXT] " Hanumanth Reddy Pothula 2022-12-02 19:41 ` Thomas Monjalon 2022-12-05 7:59 ` Hanumanth Reddy Pothula 2022-12-05 8:28 ` Thomas Monjalon 2022-12-05 9:43 ` Slava Ovsiienko 2022-12-20 20:02 ` [PATCH v4 1/2] ethdev: control Rx metadata negotiation Hanumanth Pothula 2022-12-20 20:02 ` [PATCH v4 2/2] app/testpmd: add command to process " Hanumanth Pothula 2022-12-20 21:23 ` Stephen Hemminger 2022-12-21 2:07 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Pothula 2022-12-21 2:07 ` [PATCH v5 2/2] app/testpmd: add command to process Rx metadata negotiation Hanumanth Pothula 2023-01-18 10:32 ` Thomas Monjalon 2023-01-19 10:33 ` [EXT] " Hanumanth Reddy Pothula 2023-01-25 12:51 ` Thomas Monjalon 2023-01-24 18:04 ` Ferruh Yigit 2023-01-25 9:30 ` [EXT] " Hanumanth Reddy Pothula 2023-01-25 12:55 ` Thomas Monjalon 2023-01-25 13:55 ` Ferruh Yigit 2023-01-25 13:59 ` Thomas Monjalon 2023-01-25 14:42 ` Nithin Kumar Dabilpuram 2023-01-26 11:03 ` Thomas Monjalon 2023-01-27 5:02 ` Nithin Kumar Dabilpuram 2023-01-27 8:54 ` Thomas Monjalon 2023-01-27 10:42 ` Nithin Kumar Dabilpuram 2023-01-27 15:01 ` Thomas Monjalon 2023-01-31 16:17 ` Jerin Jacob 2023-01-31 23:03 ` Thomas Monjalon 2023-02-01 6:10 ` Ivan Malov 2023-02-01 7:16 ` Andrew Rybchenko 2023-02-01 8:53 ` Jerin Jacob 2023-02-01 9:00 ` Ori Kam 2023-02-01 9:05 ` Thomas Monjalon 2023-02-01 9:07 ` Andrew Rybchenko 2023-02-01 9:14 ` Jerin Jacob 2023-02-01 9:29 ` Andrew Rybchenko 2023-02-01 10:48 ` Jerin Jacob 2023-02-01 10:58 ` Andrew Rybchenko 2023-02-01 11:04 ` Thomas Monjalon 2023-02-01 11:15 ` Jerin Jacob 2023-02-01 11:35 ` Ferruh Yigit 2023-02-01 13:48 ` Jerin Jacob 2023-02-01 14:50 ` Ferruh Yigit 2023-02-01 15:22 ` Jerin Jacob 2023-02-02 8:43 ` Ferruh Yigit 2023-02-02 8:50 ` Ivan Malov 2023-02-02 9:17 ` Ferruh Yigit 2023-02-02 10:41 ` Ivan Malov 2023-02-02 10:48 ` Ivan Malov 2023-02-02 11:41 ` Thomas Monjalon 2023-02-02 11:55 ` Ivan Malov 2023-02-02 12:03 ` Thomas Monjalon 2023-02-02 12:21 ` Andrew Rybchenko 2023-02-01 11:20 ` Ivan Malov 2023-01-25 13:17 ` Ferruh Yigit 2023-01-25 13:21 ` Ferruh Yigit 2023-01-25 13:21 ` Ferruh Yigit 2023-01-16 10:43 ` [PATCH v5 1/2] ethdev: fix ethdev configuration state on reset Hanumanth Reddy Pothula 2023-01-18 10:29 ` Thomas Monjalon 2023-01-24 18:14 ` Ferruh Yigit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).