From: Xiaoyu Min <jackmin@nvidia.com>
To: Ori Kam <orika@nvidia.com>, Thomas Monjalon <thomas@monjalon.net>,
"Ferruh Yigit" <ferruh.yigit@intel.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Cc: <dev@dpdk.org>
Subject: [RFC 2/2] ethdev: queue-based flow aged report
Date: Thu, 7 Apr 2022 13:30:47 +0800 [thread overview]
Message-ID: <9b673505092754dca22df7939cc009930864b45c.1649308627.git.jackmin@nvidia.com> (raw)
In-Reply-To: <cover.1649308627.git.jackmin@nvidia.com>
When application use queue-based flow management and operate the same
flow on the same queue, e.g create/destroy/query, API for querying aged
flows should also with queue id parameter just like other queue-based
flow APIs.
By this way, PMD can work in more optimized way since resources are
isolated by queue and needn't synchronize.
If application do use queue-based flow management but configure port
without RTE_FLOW_PORT_FLAG_STRICT_QUEUE, which means application operate
the same flow on different queues, the queue id parameter will
be ignored.
Signed-off-by: Xiaoyu Min <jackmin@nvidia.com>
---
doc/guides/prog_guide/rte_flow.rst | 4 +++
lib/ethdev/rte_flow.h | 44 ++++++++++++++++++++++++++++++
lib/ethdev/rte_flow_driver.h | 7 +++++
3 files changed, 55 insertions(+)
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 588914b231..d540152d74 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -2963,6 +2963,10 @@ Set ageing timeout configuration to a flow.
Event RTE_ETH_EVENT_FLOW_AGED will be reported if
timeout passed without any matching on the flow.
+If queue-based flow rule management is used, when this
+even is triggered, the ret_param is set to corresponding
+flow queue.
+
.. _table_rte_flow_action_age:
.. table:: AGE
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 578dd837f5..9394fb6965 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -2810,6 +2810,7 @@ enum rte_flow_action_type {
* See function rte_flow_get_aged_flows
* see enum RTE_ETH_EVENT_FLOW_AGED
* See struct rte_flow_query_age
+ * See function rte_flow_get_q_aged_flows
*/
RTE_FLOW_ACTION_TYPE_AGE,
@@ -2935,6 +2936,11 @@ struct rte_flow_action_queue {
*
* The flow context and the flow handle will be reported by the
* rte_flow_get_aged_flows API.
+ *
+ * If queue-based flow rule management is used and port configured with
+ * flag RTE_FLOW_PORT_FLAG_STRICT_QUEUE, RTE_ETH_EVENT_FLOW_AGED event
+ * is triggered with ret_param set to the corresponding flow queue when
+ * a flow queue detects new aged-out flows.
*/
struct rte_flow_action_age {
uint32_t timeout:24; /**< Time in seconds. */
@@ -5629,6 +5635,44 @@ rte_flow_async_action_handle_update(uint16_t port_id,
const void *update,
void *user_data,
struct rte_flow_error *error);
+
+/**
+ * Get aged-out flows of a given port on the given flow queue.
+ *
+ * RTE_ETH_EVENT_FLOW_AGED event will be triggered with ret_param set to
+ * corresponding flow queue when at least one new aged out flow was detected
+ * after the last call to rte_flow_get_q_aged_flows to this flow queue.
+ * If application configure port attribute without RTE_FLOW_PORT_FLAG_STRICT_QUEUE
+ * the @p queue_id will be ignored.
+ * This function can be called to get the aged flows asynchronously from the
+ * event callback or synchronously regardless the event.
+ *
+ * @param port_id
+ * Port identifier of Ethernet device.
+ * @param queue_id
+ * Flow queue to query. Ignored when RTE_FLOW_PORT_FLAG_STRICT_QUEUE not set.
+ * @param[in, out] contexts
+ * The address of an array of pointers to the aged-out flows contexts.
+ * @param[in] nb_contexts
+ * The length of context array pointers.
+ * @param[out] error
+ * Perform verbose error reporting if not NULL. Initialized in case of
+ * error only.
+ *
+ * @return
+ * if nb_contexts is 0, return the amount of all aged contexts.
+ * if nb_contexts is not 0 , return the amount of aged flows reported
+ * in the context array, otherwise negative errno value.
+ *
+ * @see rte_flow_action_age
+ * @see RTE_ETH_EVENT_FLOW_AGED
+ * @see rte_flow_port_flag
+ */
+
+__rte_experimental
+int
+rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,
+ uint32_t nb_contexts, struct rte_flow_error *error);
#ifdef __cplusplus
}
#endif
diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h
index 2bff732d6a..f617af13f6 100644
--- a/lib/ethdev/rte_flow_driver.h
+++ b/lib/ethdev/rte_flow_driver.h
@@ -260,6 +260,13 @@ struct rte_flow_ops {
const void *update,
void *user_data,
struct rte_flow_error *error);
+ /** See rte_flow_get_q_aged_flows() */
+ int (*get_q_aged_flows)
+ (uint16_t port_id,
+ uint32_t queue_id,
+ void **contexts,
+ uint32_t nb_contexts,
+ struct rte_flow_error *error);
};
/**
--
2.35.1
next prev parent reply other threads:[~2022-04-07 5:31 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-07 5:30 [RFC 0/2] " Xiaoyu Min
2022-04-07 5:30 ` [RFC 1/2] ethdev: port flags for pre-configuration flow hints Xiaoyu Min
2022-04-07 11:27 ` Ori Kam
2022-04-07 13:01 ` Jack Min
2022-04-07 15:04 ` Stephen Hemminger
2022-04-08 2:35 ` Jack Min
2022-05-30 16:46 ` Thomas Monjalon
2022-05-31 10:47 ` Jack Min
2022-04-07 5:30 ` Xiaoyu Min [this message]
2022-05-30 16:42 ` [RFC 2/2] ethdev: queue-based flow aged report Thomas Monjalon
2022-05-31 11:06 ` Jack Min
2022-05-31 12:57 ` Thomas Monjalon
2022-06-01 7:39 ` [RFC 0/2] " Xiaoyu Min
2022-06-01 7:39 ` [RFC v2 1/2] ethdev: port flags for pre-configuration flow hints Xiaoyu Min
2022-06-01 9:03 ` Ori Kam
2022-06-01 18:20 ` Andrew Rybchenko
2022-06-02 5:50 ` Ori Kam
2022-06-02 9:38 ` Jack Min
2022-06-01 7:39 ` [RFC v2 2/2] ethdev: queue-based flow aged report Xiaoyu Min
2022-06-01 18:21 ` Andrew Rybchenko
2022-06-02 6:10 ` Ori Kam
2022-06-02 10:23 ` Jack Min
2022-06-06 9:47 ` Ori Kam
2022-06-02 9:39 ` Jack Min
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=9b673505092754dca22df7939cc009930864b45c.1649308627.git.jackmin@nvidia.com \
--to=jackmin@nvidia.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=orika@nvidia.com \
--cc=thomas@monjalon.net \
/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).