[v1,1/3] lib/ethdev: add ethdev op to get hash index
Checks
Commit Message
From: Vamsi Attunuru <vattunuru@marvell.com>
Some networking devices may use custom algos for computing
hash indices and spread the packets accordingly.
Patch adds a eth_dev op to get the hash index correspond to
the given hash value received on the given port.
Some of use cases where applications would compute hash index
from hash value upfront and it can predict the packets come to
a specific queue.
Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
---
lib/librte_ethdev/rte_ethdev.c | 13 +++++++++++++
lib/librte_ethdev/rte_ethdev.h | 20 ++++++++++++++++++++
lib/librte_ethdev/rte_ethdev_core.h | 5 +++++
lib/librte_ethdev/rte_ethdev_version.map | 3 +++
4 files changed, 41 insertions(+)
Comments
Hi,
On 9/14/19 8:52 AM, vattunuru@marvell.com wrote:
> From: Vamsi Attunuru <vattunuru@marvell.com>
>
> Some networking devices may use custom algos for computing
> hash indices and spread the packets accordingly.
>
> Patch adds a eth_dev op to get the hash index correspond to
> the given hash value received on the given port.
>
> Some of use cases where applications would compute hash index
> from hash value upfront and it can predict the packets come to
> a specific queue.
>
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
I'm sorry, but the purpose of the API and provided functionality
is unclear for me from above description.
> -----Original Message-----
> From: Andrew Rybchenko <arybchenko@solarflare.com>
> Sent: Thursday, October 3, 2019 6:31 PM
> To: Vamsi Krishna Attunuru <vattunuru@marvell.com>; dev@dpdk.org
> Cc: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; ferruh.yigit@intel.com;
> thomas@monjalon.net
> Subject: [EXT] Re: [dpdk-dev] [PATCH v1 1/3] lib/ethdev: add ethdev op to get
> hash index
>
> External Email
>
> ----------------------------------------------------------------------
> Hi,
>
> On 9/14/19 8:52 AM, vattunuru@marvell.com wrote:
> > From: Vamsi Attunuru <vattunuru@marvell.com>
> >
> > Some networking devices may use custom algos for computing hash
> > indices and spread the packets accordingly.
> >
> > Patch adds a eth_dev op to get the hash index correspond to the given
> > hash value received on the given port.
> >
> > Some of use cases where applications would compute hash index from
> > hash value upfront and it can predict the packets come to a specific
> > queue.
> >
> > Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
>
> I'm sorry, but the purpose of the API and provided functionality is unclear for
> me from above description.
@Andrew, Please see the below description, if it explains the patch clearly, will send v2.
" Some networking devices may use custom algos for computing
hash indices and spread the packets accordingly.
Patch adds a eth_dev op to get the hash index correspond to
the given hash value received in the initial packet on the given port.
Some of the applications compute hash index from the hash value
received in the initial packet and than configure the rxq to lcore
mapping to make sure the mapped lcore/rxq would receive the
upcoming traffic that has similar hash. Such applications may use
these API to get the hash index used by the PMD for spreading
those traffic."
@@ -3022,6 +3022,19 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
}
int
+rte_eth_dev_rss_hash_index_get(uint16_t port_id,
+ uint32_t hash, uint32_t *hash_idx)
+{
+ struct rte_eth_dev *dev;
+
+ RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
+ dev = &rte_eth_devices[port_id];
+ RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_index_get, -ENOTSUP);
+ return eth_err(port_id, (*dev->dev_ops->rss_hash_index_get)(dev, hash,
+ hash_idx));
+}
+
+int
rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,
struct rte_eth_udp_tunnel *udp_tunnel)
{
@@ -3262,6 +3262,26 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
struct rte_eth_rss_conf *rss_conf);
/**
+ * Get hash index of the given hash value that received in mbuf from this port.
+ *
+ * @param port_id
+ * The port identifier of the Ethernet device.
+ * @param hash
+ * The hash value used to compute hash_idx.
+ * @param hash_idx
+ * Where to store the computed hash_idx
+ * @return
+ * - (0) if successful.
+ * - (-ENODEV) if port identifier is invalid.
+ * - (-EIO) if device is removed.
+ * - (-ENOTSUP) if hardware doesn't support RSS.
+ */
+__rte_experimental
+int
+rte_eth_dev_rss_hash_index_get(uint16_t port_id,
+ uint32_t hash, uint32_t *hash_idx);
+
+ /**
* Add UDP tunneling port for a specific type of tunnel.
* The packets with this UDP port will be identified as this type of tunnel.
* Before enabling any offloading function for a tunnel, users can call this API
@@ -240,6 +240,10 @@ typedef int (*rss_hash_conf_get_t)(struct rte_eth_dev *dev,
struct rte_eth_rss_conf *rss_conf);
/**< @internal Get current RSS hash configuration of an Ethernet device */
+typedef int (*rss_hash_index_get_t)(struct rte_eth_dev *dev,
+ uint32_t hash, uint32_t *hash_idx);
+/**< @internal Get RSS hash id of given hash value */
+
typedef int (*eth_dev_led_on_t)(struct rte_eth_dev *dev);
/**< @internal Turn on SW controllable LED on an Ethernet device */
@@ -471,6 +475,7 @@ struct eth_dev_ops {
rss_hash_update_t rss_hash_update; /** Configure RSS hash protocols. */
rss_hash_conf_get_t rss_hash_conf_get; /** Get current RSS hash configuration. */
+ rss_hash_index_get_t rss_hash_index_get; /** Get RSS hash idx. */
reta_update_t reta_update; /** Update redirection table. */
reta_query_t reta_query; /** Query redirection table. */
@@ -283,4 +283,7 @@ EXPERIMENTAL {
# added in 19.08
rte_eth_read_clock;
+
+ # added in 19.11
+ rte_eth_dev_rss_hash_index_get;
};