From: Stephen Hemminger <stephen@networkplumber.org>
To: Wathsala Vithanage <wathsala.vithanage@arm.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
Ferruh Yigit <ferruh.yigit@amd.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
dev@dpdk.org, nd@arm.com,
Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>,
Dhruv Tripathi <dhruv.tripathi@arm.com>
Subject: Re: [RFC v3 2/2] ethdev: introduce the cache stashing hints API
Date: Tue, 3 Dec 2024 13:13:22 -0800 [thread overview]
Message-ID: <20241203131322.41f3afb3@hermes.local> (raw)
In-Reply-To: <20241021015246.304431-3-wathsala.vithanage@arm.com>
On Mon, 21 Oct 2024 01:52:46 +0000
Wathsala Vithanage <wathsala.vithanage@arm.com> wrote:
> Extend the ethdev library to enable the stashing of different data
> objects, such as the ones listed below, into CPU caches directly
> from the NIC.
>
> - Rx/Tx queue descriptors
> - Rx packets
> - Packet headers
> - packet payloads
> - Data of a packet at an offset from the start of the packet
>
> The APIs are designed in a hardware/vendor agnostic manner such that
> supporting PMDs could use any capabilities available in the underlying
> hardware for fine-grained stashing of data objects into a CPU cache
> (e.g., Steering Tags int PCIe TLP Processing Hints).
>
> The API provides an interface to query the availability of stashing
> capabilities, i.e., platform/NIC support, stashable object types, etc,
> via the rte_eth_dev_stashing_capabilities_get interface.
>
> The function pair rte_eth_dev_stashing_rx_config_set and
> rte_eth_dev_stashing_tx_config_set sets the stashing hint (the CPU,
> cache level, and data object types) on the Rx and Tx queues.
>
> PMDs that support stashing must register their implementations with the
> following eth_dev_ops callbacks, which are invoked by the ethdev
> functions listed above.
>
> - stashing_capabilities_get
> - stashing_rx_hints_set
> - stashing_tx_hints_set
>
> Signed-off-by: Wathsala Vithanage <wathsala.vithanage@arm.com>
> Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Reviewed-by: Dhruv Tripathi <dhruv.tripathi@arm.com>
>
> ---
> lib/ethdev/ethdev_driver.h | 66 +++++++++++++++
> lib/ethdev/rte_ethdev.c | 120 +++++++++++++++++++++++++++
> lib/ethdev/rte_ethdev.h | 161 +++++++++++++++++++++++++++++++++++++
> lib/ethdev/version.map | 4 +
> 4 files changed, 351 insertions(+)
>
> diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h
> index 1fd4562b40..7caaea54a8 100644
> --- a/lib/ethdev/ethdev_driver.h
> +++ b/lib/ethdev/ethdev_driver.h
> @@ -1367,6 +1367,68 @@ enum rte_eth_dev_operation {
> typedef uint64_t (*eth_get_restore_flags_t)(struct rte_eth_dev *dev,
> enum rte_eth_dev_operation op);
>
> +/**
> + * @internal
> + * Set cache stashing hints in Rx queue.
> + *
> + * @param dev
> + * Port (ethdev) handle.
> + * @param queue_id
> + * Rx queue.
> + * @param config
> + * Stashing hints configuration for the queue.
> + *
> + * @return
> + * -ENOTSUP if the device or the platform does not support cache stashing.
> + * -ENOSYS if the underlying PMD hasn't implemented cache stashing feature.
> + * -EINVAL on invalid arguments.
> + * 0 on success.
> + */
> +typedef int (*eth_stashing_rx_hints_set_t)(struct rte_eth_dev *dev, uint16_t queue_id,
> + struct rte_eth_stashing_config *config);
> +
> +/**
> + * @internal
> + * Set cache stashing hints in Tx queue.
> + *
> + * @param dev
> + * Port (ethdev) handle.
> + * @param queue_id
> + * Tx queue.
> + * @param config
> + * Stashing hints configuration for the queue.
> + *
> + * @return
> + * -ENOTSUP if the device or the platform does not support cache stashing.
> + * -ENOSYS if the underlying PMD hasn't implemented cache stashing feature.
> + * -EINVAL on invalid arguments.
> + * 0 on success.
> + */
> +typedef int (*eth_stashing_tx_hints_set_t)(struct rte_eth_dev *dev, uint16_t queue_id,
> + struct rte_eth_stashing_config *config);
> +
> +/**
> + * @internal
> + * Get cache stashing object types supported in the ethernet device.
> + * The return value indicates availability of stashing hints support
> + * in the hardware and the PMD.
> + *
> + * @param dev
> + * Port (ethdev) handle.
> + * @param objects
> + * PMD sets supported bits on return.
> + *
> + * @return
> + * -ENOTSUP if the device or the platform does not support cache stashing.
> + * -ENOSYS if the underlying PMD hasn't implemented cache stashing feature.
> + * -EINVAL on NULL values for types or hints parameters.
> + * On return, types and hints parameters will have bits set for supported
> + * object types and hints.
> + * 0 on success.
> + */
> +typedef int (*eth_stashing_capabilities_get_t)(struct rte_eth_dev *dev,
> + uint16_t *objects);
> +
> /**
> * @internal A structure containing the functions exported by an Ethernet driver.
> */
> @@ -1393,6 +1455,10 @@ struct eth_dev_ops {
> eth_mac_addr_remove_t mac_addr_remove; /**< Remove MAC address */
> eth_mac_addr_add_t mac_addr_add; /**< Add a MAC address */
> eth_mac_addr_set_t mac_addr_set; /**< Set a MAC address */
> + eth_stashing_rx_hints_set_t stashing_rx_hints_set; /**< Set Rx cache stashing*/
> + eth_stashing_tx_hints_set_t stashing_tx_hints_set; /**< Set Tx cache stashing*/
> + /** Get supported stashing hints*/
> + eth_stashing_capabilities_get_t stashing_capabilities_get;
> /** Set list of multicast addresses */
> eth_set_mc_addr_list_t set_mc_addr_list;
> mtu_set_t mtu_set; /**< Set MTU */
Since eth_dev_ops is visible in application binary, it is part of the ABI.
Therefore it can not be changed until 25.11 release.
next prev parent reply other threads:[~2024-12-03 21:13 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-15 22:11 [RFC v2] ethdev: an API for cache stashing hints Wathsala Vithanage
2024-07-17 2:27 ` Stephen Hemminger
2024-07-18 18:48 ` Wathsala Wathawana Vithanage
2024-07-20 3:05 ` Honnappa Nagarahalli
2024-07-17 10:32 ` Konstantin Ananyev
2024-07-22 11:18 ` Ferruh Yigit
2024-07-26 20:01 ` Wathsala Wathawana Vithanage
2024-09-22 21:43 ` Ferruh Yigit
2024-10-04 17:52 ` Stephen Hemminger
2024-10-04 18:46 ` Wathsala Wathawana Vithanage
2024-10-21 1:52 ` [RFC v3 0/2] An API for Stashing Packets into CPU caches Wathsala Vithanage
2024-10-21 1:52 ` [RFC v3 1/2] pci: introduce the PCIe TLP Processing Hints API Wathsala Vithanage
2024-12-03 20:54 ` Stephen Hemminger
2024-10-21 1:52 ` [RFC v3 2/2] ethdev: introduce the cache stashing hints API Wathsala Vithanage
2024-10-21 7:36 ` Morten Brørup
2024-10-24 5:49 ` Jerin Jacob
2024-10-24 6:59 ` Morten Brørup
2024-10-24 15:12 ` Wathsala Wathawana Vithanage
2024-10-24 15:04 ` Wathsala Wathawana Vithanage
2024-12-03 21:13 ` Stephen Hemminger [this message]
2024-12-05 15:40 ` David Marchand
2024-12-05 21:00 ` Stephen Hemminger
2024-10-21 7:35 ` [RFC v3 0/2] An API for Stashing Packets into CPU caches Chenbo Xia
2024-10-21 12:01 ` Wathsala Wathawana Vithanage
2024-10-22 1:12 ` Stephen Hemminger
2024-10-22 18:37 ` Wathsala Wathawana Vithanage
2024-10-22 21:23 ` Stephen Hemminger
2024-10-23 17:59 ` [RFC v2] ethdev: an API for cache stashing hints Mattias Rönnblom
2024-10-23 20:18 ` Stephen Hemminger
2024-10-24 14:59 ` Wathsala Wathawana Vithanage
2024-10-25 7:43 ` Andrew Rybchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241203131322.41f3afb3@hermes.local \
--to=stephen@networkplumber.org \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=dhruv.tripathi@arm.com \
--cc=ferruh.yigit@amd.com \
--cc=honnappa.nagarahalli@arm.com \
--cc=nd@arm.com \
--cc=thomas@monjalon.net \
--cc=wathsala.vithanage@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).