* Re: [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload @ 2019-10-31 16:53 Pavan Nikhilesh Bhagavatula 0 siblings, 0 replies; 3+ messages in thread From: Pavan Nikhilesh Bhagavatula @ 2019-10-31 16:53 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, ferruh.yigit, arybchenko, Jerin Jacob Kollanukkaran, Harry van Haaren >29/10/2019 16:37, pbhagavatula@marvell.com: >> From: Pavan Nikhilesh <pbhagavatula@marvell.com> >> >> Since pipeline_generic uses `rte_mbuf::hash::rss` add the new Rx >offload >> flag `DEV_RX_OFFLOAD_RSS_HASH` to inform PMD to copy the RSS >hash result >> into the mbuf. >> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com> >> --- >> examples/eventdev_pipeline/main.c | 128 ----------------- >> .../pipeline_worker_generic.c | 132 ++++++++++++++++++ >> .../eventdev_pipeline/pipeline_worker_tx.c | 128 >+++++++++++++++++ >> 3 files changed, 260 insertions(+), 128 deletions(-) > >Please split the patch. >Moving code should be always separate. > Sure, I will split the patch in the next version. Thanks > ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH v14 0/6] ethdev: add new Rx offload flags @ 2019-10-29 5:03 pbhagavatula 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 0/7] " pbhagavatula 0 siblings, 1 reply; 3+ messages in thread From: pbhagavatula @ 2019-10-29 5:03 UTC (permalink / raw) To: ferruh.yigit, arybchenko, jerinj; +Cc: dev, Pavan Nikhilesh From: Pavan Nikhilesh <pbhagavatula@marvell.com> Add new Rx offload flags `DEV_RX_OFFLOAD_RSS_HASH` These flags can be used to enable/disable PMD writes to rte_mbuf fields `hash.rss` and also `ol_flags:PKT_RX_RSS` and `ol_flags:PKT_RX_FDIR`. Add new packet type set function `rte_eth_dev_set_supported_ptypes`, allows application to inform PMDs about the packet types it is interested in. Based on ptypes requested by application PMDs can optimize the Rx path. For example, if a given PMD doesn't support any packet types that the application is interested in then the application can disable[1] writes to `mbuf.packet_type` done by the PMD and use a software ptype parser. [1] rte_eth_dev_set_supported_ptypes(*port_id*, RTE_PTYPE_UNKNOWN, NULL, 0); v14 Changes: ----------- - Remove log from drives - Add log in rte_eth_dev_configure when certain offloads are requested to be disabled and PMD cannot honor the request. - Make changes to default offloads in net/sfc.(Andrew) v13 Changes: ----------- - Remove DEV_RX_OFFLOAD_FLOW_MARK from this patchset to allow foreward progress will be sent as a seperate patch. - Use set_supported function only for l2fwd and testpmd. - Add info log in drivers which expose the DEV_RX_OFFLOAD_RSS_HASH indicating that disabling DEV_RX_OFFLOAD_RSS_HASH is not supported. - Few documentation changes. v12 Changes: ----------- - Rebase onto next-net. v11 Changes: ----------- - Use RTE_DIM to get array size. - Since we are using a list of MASKs to validate ptype_mask return -EINVAL if any unknown mask is set. - Rebase to TOT. v10 Changes: ----------- - Modify ptype_mask validation in set_supported_ptypes.(Andrew) v9 Changes: ---------- - Add ptype_mask validation in set_supported_ptypes.(Andrew) - Make description more verbose. v8 Changes: ---------- - Make description more verbose. - Set RTE_PTYPE_UNKNOWN in set_ptypes array when either get ot set ptypes is not supported by ethernet device. v7 Changes: ---------- - Fix unused variable in net/octeontx2 v6 Changes: ---------- - Add additional checks for set supported ptypes.(Andrew) - Clarify `rte_eth_dev_set_supported_ptypes` documentation. - Remove DEV_RX_OFFLOAD_FLOW_MARK emulation from net/octeontx2. v5 Changes: ---------- - Fix typos. v4 Changes: ---------- - Set the last element in set_ptype array as RTE_PTYPE_UNKNOWN to mark the end of array. - Fix invalid set ptype function call in examples. - Remove setting rte_eth_dev_set_supported_ptypes to UNKNOWN in l3fwd-power. v3 Changes: ---------- - Add missing release notes. (Andrew) - Re-word various descriptions. - Fix ptype set logic. v2 Changes: ---------- - Update release notes. (Andrew) - Redo commit logs. (Andrew) - Disable ptype parsing for unsupported examples. (Jerin) - Disable RSS write only in generic mode eventdev_pipeline. (Jerin) - Modify set_supported_ptypes function to return successfuly set mask instead of failure. - Dropped set_supported_ptypes to drivers by handling in library layer, interested PMD can add it in. Pavan Nikhilesh (7): ethdev: add set ptype function ethdev: add mbuf RSS update as an offload ethdev: log offloads that can't be disabled by PMD drivers/net: update Rx RSS hash offload capabilities examples/eventdev_pipeline: add new Rx RSS hash offload examples/l2fwd: disable ptype parsing app/testpmd: add command to set supported ptype mask app/test-pmd/cmdline.c | 80 +++++++++++ app/test-pmd/testpmd.c | 6 + doc/guides/nics/features.rst | 9 +- doc/guides/rel_notes/release_19_11.rst | 15 ++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 + drivers/net/bnxt/bnxt_ethdev.c | 8 +- drivers/net/cxgbe/cxgbe.h | 3 +- drivers/net/cxgbe/cxgbe_ethdev.c | 5 + drivers/net/dpaa/dpaa_ethdev.c | 3 +- drivers/net/dpaa2/dpaa2_ethdev.c | 1 + drivers/net/e1000/igb_ethdev.c | 6 + drivers/net/e1000/igb_rxtx.c | 3 +- drivers/net/enic/enic_ethdev.c | 5 + drivers/net/enic/enic_res.c | 3 +- drivers/net/fm10k/fm10k_ethdev.c | 6 +- drivers/net/hinic/hinic_pmd_ethdev.c | 6 +- drivers/net/i40e/i40e_ethdev.c | 6 +- drivers/net/iavf/iavf_ethdev.c | 6 +- drivers/net/ice/ice_ethdev.c | 6 +- drivers/net/ixgbe/ixgbe_ethdev.c | 7 + drivers/net/ixgbe/ixgbe_rxtx.c | 3 +- drivers/net/liquidio/lio_ethdev.c | 7 +- drivers/net/mlx4/mlx4.c | 3 + drivers/net/mlx4/mlx4_rxq.c | 3 +- drivers/net/mlx5/mlx5_ethdev.c | 4 + drivers/net/mlx5/mlx5_rxq.c | 3 +- drivers/net/netvsc/hn_ethdev.c | 3 + drivers/net/netvsc/hn_rndis.c | 3 +- drivers/net/nfp/nfp_net.c | 6 +- drivers/net/octeontx2/otx2_ethdev.c | 3 +- drivers/net/octeontx2/otx2_ethdev.h | 15 +- drivers/net/qede/qede_ethdev.c | 6 +- drivers/net/sfc/sfc_ef10_essb_rx.c | 3 +- drivers/net/sfc/sfc_ef10_rx.c | 3 +- drivers/net/sfc/sfc_rx.c | 6 +- drivers/net/thunderx/nicvf_ethdev.c | 3 + drivers/net/thunderx/nicvf_ethdev.h | 3 +- drivers/net/vmxnet3/vmxnet3_ethdev.c | 6 +- examples/eventdev_pipeline/main.c | 128 ----------------- .../pipeline_worker_generic.c | 132 ++++++++++++++++++ .../eventdev_pipeline/pipeline_worker_tx.c | 128 +++++++++++++++++ examples/l2fwd/Makefile | 1 + examples/l2fwd/main.c | 2 + examples/l2fwd/meson.build | 1 + lib/librte_ethdev/rte_ethdev.c | 120 +++++++++++++++- lib/librte_ethdev/rte_ethdev.h | 38 +++++ lib/librte_ethdev/rte_ethdev_core.h | 19 +++ lib/librte_ethdev/rte_ethdev_version.map | 1 + 48 files changed, 683 insertions(+), 161 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH v15 0/7] ethdev: add new Rx offload flags 2019-10-29 5:03 [dpdk-dev] [PATCH v14 0/6] ethdev: add new Rx offload flags pbhagavatula @ 2019-10-29 15:37 ` pbhagavatula 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload pbhagavatula 0 siblings, 1 reply; 3+ messages in thread From: pbhagavatula @ 2019-10-29 15:37 UTC (permalink / raw) To: ferruh.yigit, arybchenko, jerinj; +Cc: dev, Pavan Nikhilesh From: Pavan Nikhilesh <pbhagavatula@marvell.com> Add new Rx offload flags `DEV_RX_OFFLOAD_RSS_HASH` These flags can be used to enable/disable PMD writes to rte_mbuf fields `hash.rss` and also `ol_flags:PKT_RX_RSS` and `ol_flags:PKT_RX_FDIR`. Add new packet type set function `rte_eth_dev_set_supported_ptypes`, allows application to inform PMDs about the packet types it is interested in. Based on ptypes requested by application PMDs can optimize the Rx path. For example, if a given PMD doesn't support any packet types that the application is interested in then the application can disable[1] writes to `mbuf.packet_type` done by the PMD and use a software ptype parser. [1] rte_eth_dev_set_supported_ptypes(*port_id*, RTE_PTYPE_UNKNOWN, NULL, 0); v15 Changes: ----------- - Fix sfc RSS_HASH offload check. - Fix ethdev RSS_HASH offload check when mq_mode is configured with MQ_RX_NONE. - Extend offload validation to return error in the case where application has requested an offload to be enabled and PMD couldn't honor it. v14 Changes: ----------- - Remove log from drives - Add log in rte_eth_dev_configure when certain offloads are requested to be disabled and PMD cannot honor the request. - Make changes to default offloads in net/sfc.(Andrew) v13 Changes: ----------- - Remove DEV_RX_OFFLOAD_FLOW_MARK from this patchset to allow foreward progress will be sent as a seperate patch. - Use set_supported function only for l2fwd and testpmd. - Add info log in drivers which expose the DEV_RX_OFFLOAD_RSS_HASH indicating that disabling DEV_RX_OFFLOAD_RSS_HASH is not supported. - Few documentation changes. v12 Changes: ----------- - Rebase onto next-net. v11 Changes: ----------- - Use RTE_DIM to get array size. - Since we are using a list of MASKs to validate ptype_mask return -EINVAL if any unknown mask is set. - Rebase to TOT. v10 Changes: ----------- - Modify ptype_mask validation in set_supported_ptypes.(Andrew) v9 Changes: ---------- - Add ptype_mask validation in set_supported_ptypes.(Andrew) - Make description more verbose. v8 Changes: ---------- - Make description more verbose. - Set RTE_PTYPE_UNKNOWN in set_ptypes array when either get ot set ptypes is not supported by ethernet device. v7 Changes: ---------- - Fix unused variable in net/octeontx2 v6 Changes: ---------- - Add additional checks for set supported ptypes.(Andrew) - Clarify `rte_eth_dev_set_supported_ptypes` documentation. - Remove DEV_RX_OFFLOAD_FLOW_MARK emulation from net/octeontx2. v5 Changes: ---------- - Fix typos. v4 Changes: ---------- - Set the last element in set_ptype array as RTE_PTYPE_UNKNOWN to mark the end of array. - Fix invalid set ptype function call in examples. - Remove setting rte_eth_dev_set_supported_ptypes to UNKNOWN in l3fwd-power. v3 Changes: ---------- - Add missing release notes. (Andrew) - Re-word various descriptions. - Fix ptype set logic. v2 Changes: ---------- - Update release notes. (Andrew) - Redo commit logs. (Andrew) - Disable ptype parsing for unsupported examples. (Jerin) - Disable RSS write only in generic mode eventdev_pipeline. (Jerin) - Modify set_supported_ptypes function to return successfuly set mask instead of failure. - Dropped set_supported_ptypes to drivers by handling in library layer, interested PMD can add it in. Pavan Nikhilesh (7): ethdev: add set ptype function ethdev: add mbuf RSS update as an offload ethdev: add validation to offloads set by PMD drivers/net: update Rx RSS hash offload capabilities examples/eventdev_pipeline: add new Rx RSS hash offload examples/l2fwd: disable ptype parsing app/testpmd: add command to set supported ptype mask app/test-pmd/cmdline.c | 80 +++++++++ app/test-pmd/testpmd.c | 6 + doc/guides/nics/features.rst | 9 +- doc/guides/rel_notes/release_19_11.rst | 15 ++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 + drivers/net/bnxt/bnxt_ethdev.c | 8 +- drivers/net/cxgbe/cxgbe.h | 3 +- drivers/net/cxgbe/cxgbe_ethdev.c | 5 + drivers/net/dpaa/dpaa_ethdev.c | 3 +- drivers/net/dpaa2/dpaa2_ethdev.c | 1 + drivers/net/e1000/igb_ethdev.c | 6 + drivers/net/e1000/igb_rxtx.c | 3 +- drivers/net/enic/enic_ethdev.c | 5 + drivers/net/enic/enic_res.c | 3 +- drivers/net/fm10k/fm10k_ethdev.c | 6 +- drivers/net/hinic/hinic_pmd_ethdev.c | 6 +- drivers/net/i40e/i40e_ethdev.c | 6 +- drivers/net/iavf/iavf_ethdev.c | 6 +- drivers/net/ice/ice_ethdev.c | 6 +- drivers/net/ixgbe/ixgbe_ethdev.c | 7 + drivers/net/ixgbe/ixgbe_rxtx.c | 3 +- drivers/net/liquidio/lio_ethdev.c | 7 +- drivers/net/mlx4/mlx4.c | 3 + drivers/net/mlx4/mlx4_rxq.c | 3 +- drivers/net/mlx5/mlx5_ethdev.c | 4 + drivers/net/mlx5/mlx5_rxq.c | 3 +- drivers/net/netvsc/hn_ethdev.c | 3 + drivers/net/netvsc/hn_rndis.c | 3 +- drivers/net/nfp/nfp_net.c | 6 +- drivers/net/octeontx2/otx2_ethdev.c | 3 +- drivers/net/octeontx2/otx2_ethdev.h | 15 +- drivers/net/qede/qede_ethdev.c | 6 +- drivers/net/sfc/sfc_ef10_essb_rx.c | 3 +- drivers/net/sfc/sfc_ef10_rx.c | 3 +- drivers/net/sfc/sfc_rx.c | 7 +- drivers/net/thunderx/nicvf_ethdev.c | 3 + drivers/net/thunderx/nicvf_ethdev.h | 3 +- drivers/net/vmxnet3/vmxnet3_ethdev.c | 6 +- examples/eventdev_pipeline/main.c | 128 -------------- .../pipeline_worker_generic.c | 132 +++++++++++++++ .../eventdev_pipeline/pipeline_worker_tx.c | 128 ++++++++++++++ examples/l2fwd/Makefile | 1 + examples/l2fwd/main.c | 2 + examples/l2fwd/meson.build | 1 + lib/librte_ethdev/rte_ethdev.c | 158 +++++++++++++++++- lib/librte_ethdev/rte_ethdev.h | 38 +++++ lib/librte_ethdev/rte_ethdev_core.h | 19 +++ lib/librte_ethdev/rte_ethdev_version.map | 1 + 48 files changed, 722 insertions(+), 161 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 0/7] " pbhagavatula @ 2019-10-29 15:37 ` pbhagavatula 2019-10-31 14:05 ` Thomas Monjalon 0 siblings, 1 reply; 3+ messages in thread From: pbhagavatula @ 2019-10-29 15:37 UTC (permalink / raw) To: ferruh.yigit, arybchenko, jerinj, Harry van Haaren; +Cc: dev, Pavan Nikhilesh From: Pavan Nikhilesh <pbhagavatula@marvell.com> Since pipeline_generic uses `rte_mbuf::hash::rss` add the new Rx offload flag `DEV_RX_OFFLOAD_RSS_HASH` to inform PMD to copy the RSS hash result into the mbuf. Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com> --- examples/eventdev_pipeline/main.c | 128 ----------------- .../pipeline_worker_generic.c | 132 ++++++++++++++++++ .../eventdev_pipeline/pipeline_worker_tx.c | 128 +++++++++++++++++ 3 files changed, 260 insertions(+), 128 deletions(-) diff --git a/examples/eventdev_pipeline/main.c b/examples/eventdev_pipeline/main.c index f77830282..d3ff1bbe4 100644 --- a/examples/eventdev_pipeline/main.c +++ b/examples/eventdev_pipeline/main.c @@ -242,133 +242,6 @@ parse_app_args(int argc, char **argv) } } -/* - * Initializes a given port using global settings and with the RX buffers - * coming from the mbuf_pool passed as a parameter. - */ -static inline int -port_init(uint8_t port, struct rte_mempool *mbuf_pool) -{ - struct rte_eth_rxconf rx_conf; - static const struct rte_eth_conf port_conf_default = { - .rxmode = { - .mq_mode = ETH_MQ_RX_RSS, - .max_rx_pkt_len = RTE_ETHER_MAX_LEN, - }, - .rx_adv_conf = { - .rss_conf = { - .rss_hf = ETH_RSS_IP | - ETH_RSS_TCP | - ETH_RSS_UDP, - } - } - }; - const uint16_t rx_rings = 1, tx_rings = 1; - const uint16_t rx_ring_size = 512, tx_ring_size = 512; - struct rte_eth_conf port_conf = port_conf_default; - int retval; - uint16_t q; - struct rte_eth_dev_info dev_info; - struct rte_eth_txconf txconf; - - if (!rte_eth_dev_is_valid_port(port)) - return -1; - - retval = rte_eth_dev_info_get(port, &dev_info); - if (retval != 0) { - printf("Error during getting device (port %u) info: %s\n", - port, strerror(-retval)); - return retval; - } - - if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) - port_conf.txmode.offloads |= - DEV_TX_OFFLOAD_MBUF_FAST_FREE; - rx_conf = dev_info.default_rxconf; - rx_conf.offloads = port_conf.rxmode.offloads; - - port_conf.rx_adv_conf.rss_conf.rss_hf &= - dev_info.flow_type_rss_offloads; - if (port_conf.rx_adv_conf.rss_conf.rss_hf != - port_conf_default.rx_adv_conf.rss_conf.rss_hf) { - printf("Port %u modified RSS hash function based on hardware support," - "requested:%#"PRIx64" configured:%#"PRIx64"\n", - port, - port_conf_default.rx_adv_conf.rss_conf.rss_hf, - port_conf.rx_adv_conf.rss_conf.rss_hf); - } - - /* Configure the Ethernet device. */ - retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf); - if (retval != 0) - return retval; - - /* Allocate and set up 1 RX queue per Ethernet port. */ - for (q = 0; q < rx_rings; q++) { - retval = rte_eth_rx_queue_setup(port, q, rx_ring_size, - rte_eth_dev_socket_id(port), &rx_conf, - mbuf_pool); - if (retval < 0) - return retval; - } - - txconf = dev_info.default_txconf; - txconf.offloads = port_conf_default.txmode.offloads; - /* Allocate and set up 1 TX queue per Ethernet port. */ - for (q = 0; q < tx_rings; q++) { - retval = rte_eth_tx_queue_setup(port, q, tx_ring_size, - rte_eth_dev_socket_id(port), &txconf); - if (retval < 0) - return retval; - } - - /* Display the port MAC address. */ - struct rte_ether_addr addr; - retval = rte_eth_macaddr_get(port, &addr); - if (retval != 0) { - printf("Failed to get MAC address (port %u): %s\n", - port, rte_strerror(-retval)); - return retval; - } - - printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8 - " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n", - (unsigned int)port, - addr.addr_bytes[0], addr.addr_bytes[1], - addr.addr_bytes[2], addr.addr_bytes[3], - addr.addr_bytes[4], addr.addr_bytes[5]); - - /* Enable RX in promiscuous mode for the Ethernet device. */ - retval = rte_eth_promiscuous_enable(port); - if (retval != 0) - return retval; - - return 0; -} - -static int -init_ports(uint16_t num_ports) -{ - uint16_t portid; - - if (!cdata.num_mbuf) - cdata.num_mbuf = 16384 * num_ports; - - struct rte_mempool *mp = rte_pktmbuf_pool_create("packet_pool", - /* mbufs */ cdata.num_mbuf, - /* cache_size */ 512, - /* priv_size*/ 0, - /* data_room_size */ RTE_MBUF_DEFAULT_BUF_SIZE, - rte_socket_id()); - - RTE_ETH_FOREACH_DEV(portid) - if (port_init(portid, mp) != 0) - rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu16 "\n", - portid); - - return 0; -} - static void do_capability_setup(uint8_t eventdev_id) { @@ -515,7 +388,6 @@ main(int argc, char **argv) if (dev_id < 0) rte_exit(EXIT_FAILURE, "Error setting up eventdev\n"); - init_ports(num_ports); fdata->cap.adptr_setup(num_ports); /* Start the Ethernet port. */ diff --git a/examples/eventdev_pipeline/pipeline_worker_generic.c b/examples/eventdev_pipeline/pipeline_worker_generic.c index 766c8e958..42ff4eeb9 100644 --- a/examples/eventdev_pipeline/pipeline_worker_generic.c +++ b/examples/eventdev_pipeline/pipeline_worker_generic.c @@ -271,6 +271,137 @@ setup_eventdev_generic(struct worker_data *worker_data) return dev_id; } +/* + * Initializes a given port using global settings and with the RX buffers + * coming from the mbuf_pool passed as a parameter. + */ +static inline int +port_init(uint8_t port, struct rte_mempool *mbuf_pool) +{ + struct rte_eth_rxconf rx_conf; + static const struct rte_eth_conf port_conf_default = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = RTE_ETHER_MAX_LEN, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_hf = ETH_RSS_IP | + ETH_RSS_TCP | + ETH_RSS_UDP, + } + } + }; + const uint16_t rx_rings = 1, tx_rings = 1; + const uint16_t rx_ring_size = 512, tx_ring_size = 512; + struct rte_eth_conf port_conf = port_conf_default; + int retval; + uint16_t q; + struct rte_eth_dev_info dev_info; + struct rte_eth_txconf txconf; + + if (!rte_eth_dev_is_valid_port(port)) + return -1; + + retval = rte_eth_dev_info_get(port, &dev_info); + if (retval != 0) { + printf("Error during getting device (port %u) info: %s\n", + port, strerror(-retval)); + return retval; + } + + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + port_conf.txmode.offloads |= + DEV_TX_OFFLOAD_MBUF_FAST_FREE; + + if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_RSS_HASH) + port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH; + + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + port_conf.rx_adv_conf.rss_conf.rss_hf &= + dev_info.flow_type_rss_offloads; + if (port_conf.rx_adv_conf.rss_conf.rss_hf != + port_conf_default.rx_adv_conf.rss_conf.rss_hf) { + printf("Port %u modified RSS hash function based on hardware support," + "requested:%#"PRIx64" configured:%#"PRIx64"\n", + port, + port_conf_default.rx_adv_conf.rss_conf.rss_hf, + port_conf.rx_adv_conf.rss_conf.rss_hf); + } + + /* Configure the Ethernet device. */ + retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf); + if (retval != 0) + return retval; + + /* Allocate and set up 1 RX queue per Ethernet port. */ + for (q = 0; q < rx_rings; q++) { + retval = rte_eth_rx_queue_setup(port, q, rx_ring_size, + rte_eth_dev_socket_id(port), &rx_conf, + mbuf_pool); + if (retval < 0) + return retval; + } + + txconf = dev_info.default_txconf; + txconf.offloads = port_conf_default.txmode.offloads; + /* Allocate and set up 1 TX queue per Ethernet port. */ + for (q = 0; q < tx_rings; q++) { + retval = rte_eth_tx_queue_setup(port, q, tx_ring_size, + rte_eth_dev_socket_id(port), &txconf); + if (retval < 0) + return retval; + } + + /* Display the port MAC address. */ + struct rte_ether_addr addr; + retval = rte_eth_macaddr_get(port, &addr); + if (retval != 0) { + printf("Failed to get MAC address (port %u): %s\n", + port, rte_strerror(-retval)); + return retval; + } + + printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8 + " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n", + (unsigned int)port, + addr.addr_bytes[0], addr.addr_bytes[1], + addr.addr_bytes[2], addr.addr_bytes[3], + addr.addr_bytes[4], addr.addr_bytes[5]); + + /* Enable RX in promiscuous mode for the Ethernet device. */ + retval = rte_eth_promiscuous_enable(port); + if (retval != 0) + return retval; + + return 0; +} + +static int +init_ports(uint16_t num_ports) +{ + uint16_t portid; + + if (!cdata.num_mbuf) + cdata.num_mbuf = 16384 * num_ports; + + struct rte_mempool *mp = rte_pktmbuf_pool_create("packet_pool", + /* mbufs */ cdata.num_mbuf, + /* cache_size */ 512, + /* priv_size*/ 0, + /* data_room_size */ RTE_MBUF_DEFAULT_BUF_SIZE, + rte_socket_id()); + + RTE_ETH_FOREACH_DEV(portid) + if (port_init(portid, mp) != 0) + rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu16 "\n", + portid); + + return 0; +} + static void init_adapters(uint16_t nb_ports) { @@ -297,6 +428,7 @@ init_adapters(uint16_t nb_ports) adptr_p_conf.enqueue_depth = dev_info.max_event_port_enqueue_depth; + init_ports(nb_ports); /* Create one adapter for all the ethernet ports. */ ret = rte_event_eth_rx_adapter_create(cdata.rx_adapter_id, evdev_id, &adptr_p_conf); diff --git a/examples/eventdev_pipeline/pipeline_worker_tx.c b/examples/eventdev_pipeline/pipeline_worker_tx.c index a0f40c27c..55bb2f762 100644 --- a/examples/eventdev_pipeline/pipeline_worker_tx.c +++ b/examples/eventdev_pipeline/pipeline_worker_tx.c @@ -603,6 +603,133 @@ service_rx_adapter(void *arg) return 0; } +/* + * Initializes a given port using global settings and with the RX buffers + * coming from the mbuf_pool passed as a parameter. + */ +static inline int +port_init(uint8_t port, struct rte_mempool *mbuf_pool) +{ + struct rte_eth_rxconf rx_conf; + static const struct rte_eth_conf port_conf_default = { + .rxmode = { + .mq_mode = ETH_MQ_RX_RSS, + .max_rx_pkt_len = RTE_ETHER_MAX_LEN, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_hf = ETH_RSS_IP | + ETH_RSS_TCP | + ETH_RSS_UDP, + } + } + }; + const uint16_t rx_rings = 1, tx_rings = 1; + const uint16_t rx_ring_size = 512, tx_ring_size = 512; + struct rte_eth_conf port_conf = port_conf_default; + int retval; + uint16_t q; + struct rte_eth_dev_info dev_info; + struct rte_eth_txconf txconf; + + if (!rte_eth_dev_is_valid_port(port)) + return -1; + + retval = rte_eth_dev_info_get(port, &dev_info); + if (retval != 0) { + printf("Error during getting device (port %u) info: %s\n", + port, strerror(-retval)); + return retval; + } + + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + port_conf.txmode.offloads |= + DEV_TX_OFFLOAD_MBUF_FAST_FREE; + rx_conf = dev_info.default_rxconf; + rx_conf.offloads = port_conf.rxmode.offloads; + + port_conf.rx_adv_conf.rss_conf.rss_hf &= + dev_info.flow_type_rss_offloads; + if (port_conf.rx_adv_conf.rss_conf.rss_hf != + port_conf_default.rx_adv_conf.rss_conf.rss_hf) { + printf("Port %u modified RSS hash function based on hardware support," + "requested:%#"PRIx64" configured:%#"PRIx64"\n", + port, + port_conf_default.rx_adv_conf.rss_conf.rss_hf, + port_conf.rx_adv_conf.rss_conf.rss_hf); + } + + /* Configure the Ethernet device. */ + retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf); + if (retval != 0) + return retval; + + /* Allocate and set up 1 RX queue per Ethernet port. */ + for (q = 0; q < rx_rings; q++) { + retval = rte_eth_rx_queue_setup(port, q, rx_ring_size, + rte_eth_dev_socket_id(port), &rx_conf, + mbuf_pool); + if (retval < 0) + return retval; + } + + txconf = dev_info.default_txconf; + txconf.offloads = port_conf_default.txmode.offloads; + /* Allocate and set up 1 TX queue per Ethernet port. */ + for (q = 0; q < tx_rings; q++) { + retval = rte_eth_tx_queue_setup(port, q, tx_ring_size, + rte_eth_dev_socket_id(port), &txconf); + if (retval < 0) + return retval; + } + + /* Display the port MAC address. */ + struct rte_ether_addr addr; + retval = rte_eth_macaddr_get(port, &addr); + if (retval != 0) { + printf("Failed to get MAC address (port %u): %s\n", + port, rte_strerror(-retval)); + return retval; + } + + printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8 + " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n", + (unsigned int)port, + addr.addr_bytes[0], addr.addr_bytes[1], + addr.addr_bytes[2], addr.addr_bytes[3], + addr.addr_bytes[4], addr.addr_bytes[5]); + + /* Enable RX in promiscuous mode for the Ethernet device. */ + retval = rte_eth_promiscuous_enable(port); + if (retval != 0) + return retval; + + return 0; +} + +static int +init_ports(uint16_t num_ports) +{ + uint16_t portid; + + if (!cdata.num_mbuf) + cdata.num_mbuf = 16384 * num_ports; + + struct rte_mempool *mp = rte_pktmbuf_pool_create("packet_pool", + /* mbufs */ cdata.num_mbuf, + /* cache_size */ 512, + /* priv_size*/ 0, + /* data_room_size */ RTE_MBUF_DEFAULT_BUF_SIZE, + rte_socket_id()); + + RTE_ETH_FOREACH_DEV(portid) + if (port_init(portid, mp) != 0) + rte_exit(EXIT_FAILURE, "Cannot init port %"PRIu16 "\n", + portid); + + return 0; +} + static void init_adapters(uint16_t nb_ports) { @@ -621,6 +748,7 @@ init_adapters(uint16_t nb_ports) .new_event_threshold = 4096, }; + init_ports(nb_ports); if (adptr_p_conf.new_event_threshold > dev_info.max_num_events) adptr_p_conf.new_event_threshold = dev_info.max_num_events; if (adptr_p_conf.dequeue_depth > dev_info.max_event_port_dequeue_depth) -- 2.17.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload pbhagavatula @ 2019-10-31 14:05 ` Thomas Monjalon 0 siblings, 0 replies; 3+ messages in thread From: Thomas Monjalon @ 2019-10-31 14:05 UTC (permalink / raw) To: pbhagavatula; +Cc: dev, ferruh.yigit, arybchenko, jerinj, Harry van Haaren 29/10/2019 16:37, pbhagavatula@marvell.com: > From: Pavan Nikhilesh <pbhagavatula@marvell.com> > > Since pipeline_generic uses `rte_mbuf::hash::rss` add the new Rx offload > flag `DEV_RX_OFFLOAD_RSS_HASH` to inform PMD to copy the RSS hash result > into the mbuf. > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com> > --- > examples/eventdev_pipeline/main.c | 128 ----------------- > .../pipeline_worker_generic.c | 132 ++++++++++++++++++ > .../eventdev_pipeline/pipeline_worker_tx.c | 128 +++++++++++++++++ > 3 files changed, 260 insertions(+), 128 deletions(-) Please split the patch. Moving code should be always separate. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-10-31 16:53 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-10-31 16:53 [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload Pavan Nikhilesh Bhagavatula -- strict thread matches above, loose matches on Subject: below -- 2019-10-29 5:03 [dpdk-dev] [PATCH v14 0/6] ethdev: add new Rx offload flags pbhagavatula 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 0/7] " pbhagavatula 2019-10-29 15:37 ` [dpdk-dev] [PATCH v15 5/7] examples/eventdev_pipeline: add new Rx RSS hash offload pbhagavatula 2019-10-31 14:05 ` Thomas Monjalon
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).