DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/2] eventdev: add port usage hints
@ 2021-09-09 12:54 Harry van Haaren
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API Harry van Haaren
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 2/2] examples/eventdev_pipeline: use port config hints Harry van Haaren
  0 siblings, 2 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-09-09 12:54 UTC (permalink / raw)
  To: dev; +Cc: pravin.pathak, timothy.mcdaniel, Harry van Haaren

These 2 patches are a suggestion to add a hint to the
struct rte_event_port_conf.event_port_cfg.

The usage of these hints is to allow an application to
identify/communicate to the PMD what ports will primarily
serve what purpose.

E.g, some ports are "mainly producers" in that they are
usually polling Ethdev RXQs (or other event sources..)
and enqueue the resulting events to the eventdev instance.
Similarly there are usages for "worker" (mainly forwards
events) and "consumer" (mainly consumes events without re-enq).

Note that these flags are *hints* only, and *functionally*
any combination of (NEW/FWD/RELEASE) is still allowed by
any port. The reason to add these is to allow a PMD to allocate
internal resource more efficiently.

Note that this implementation does not change the ABI,
as it gives a purpose to existing bits in an existing field.

Regards, -Harry


Harry van Haaren (2):
  lib/eventdev: add usage hints to port configure API
  examples/eventdev_pipeline: use port config hints

 .../pipeline_worker_generic.c                 |  2 ++
 .../eventdev_pipeline/pipeline_worker_tx.c    |  2 ++
 lib/eventdev/rte_eventdev.h                   | 23 +++++++++++++++++++
 3 files changed, 27 insertions(+)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API
  2021-09-09 12:54 [dpdk-dev] [PATCH 0/2] eventdev: add port usage hints Harry van Haaren
@ 2021-09-09 12:54 ` Harry van Haaren
  2021-09-16  4:59   ` Jerin Jacob
  2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 2/2] examples/eventdev_pipeline: use port config hints Harry van Haaren
  1 sibling, 2 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-09-09 12:54 UTC (permalink / raw)
  To: dev; +Cc: pravin.pathak, timothy.mcdaniel, Harry van Haaren

This commit introduces 3 flags to the port configuration flags.
These flags allow the application to indicate what type of work
is expected to be performed by an eventdev port.

The three new flags are
- RTE_EVENT_PORT_CFG_HINT_PRODUCER (mostly RTE_EVENT_OP_NEW events)
- RTE_EVENT_PORT_CFG_HINT_CONSUMER (mostly RTE_EVENT_OP_RELEASE events)
- RTE_EVENT_PORT_CFG_HINT_WORKER   (mostly RTE_EVENT_OP_FORWARD events)

These flags are only hints, and the PMDs must operate under the
assumption that any port can enqueue an event with any type of op.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 lib/eventdev/rte_eventdev.h | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
index a9c496fb62..159b580938 100644
--- a/lib/eventdev/rte_eventdev.h
+++ b/lib/eventdev/rte_eventdev.h
@@ -709,6 +709,29 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
  *
  *  @see rte_event_port_setup(), rte_event_port_link()
  */
+#define RTE_EVENT_PORT_CFG_HINT_PRODUCER       (1ULL << 2)
+/**< Hint that this event port will primarily enqueue events to the system.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to enqueue NEW events. Note that this flag is only a hint.
+ *
+ *  @see rte_event_port_setup()
+ */
+#define RTE_EVENT_PORT_CFG_HINT_CONSUMER       (1ULL << 3)
+/**< Hint that this event port will primarily dequeue events from the system.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to consume events, and not enqueue FORWARD or RELEASE events.
+ * Note that this flag is only a hint.
+ *
+ *  @see rte_event_port_setup()
+ */
+#define RTE_EVENT_PORT_CFG_HINT_WORKER         (1ULL << 4)
+/**< Hint that this event port will primarily events to the system.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to FORWARD events, and not enqueue NEW or RELEASE events
+ * often. Note that this flag is only a hint.
+ *
+ *  @see rte_event_port_setup()
+ */
 
 /** Event port configuration structure */
 struct rte_event_port_conf {
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH 2/2] examples/eventdev_pipeline: use port config hints
  2021-09-09 12:54 [dpdk-dev] [PATCH 0/2] eventdev: add port usage hints Harry van Haaren
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API Harry van Haaren
@ 2021-09-09 12:54 ` Harry van Haaren
  1 sibling, 0 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-09-09 12:54 UTC (permalink / raw)
  To: dev; +Cc: pravin.pathak, timothy.mcdaniel, Harry van Haaren

This commit adds the per-port hints added to the eventdev API, indicating
which eventdev ports will be used for producing, forwarding, or consuming
events from the system.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 examples/eventdev_pipeline/pipeline_worker_generic.c | 2 ++
 examples/eventdev_pipeline/pipeline_worker_tx.c      | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/examples/eventdev_pipeline/pipeline_worker_generic.c b/examples/eventdev_pipeline/pipeline_worker_generic.c
index f70ab0cc9e..8f43d1f71e 100644
--- a/examples/eventdev_pipeline/pipeline_worker_generic.c
+++ b/examples/eventdev_pipeline/pipeline_worker_generic.c
@@ -139,6 +139,7 @@ setup_eventdev_generic(struct worker_data *worker_data)
 			.dequeue_depth = cdata.worker_cq_depth,
 			.enqueue_depth = 64,
 			.new_event_threshold = 4096,
+			.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_WORKER,
 	};
 	struct rte_event_queue_conf wkr_q_conf = {
 			.schedule_type = cdata.queue_type,
@@ -419,6 +420,7 @@ init_adapters(uint16_t nb_ports)
 		.dequeue_depth = cdata.worker_cq_depth,
 		.enqueue_depth = 64,
 		.new_event_threshold = 4096,
+		.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_PRODUCER,
 	};
 
 	if (adptr_p_conf.new_event_threshold > dev_info.max_num_events)
diff --git a/examples/eventdev_pipeline/pipeline_worker_tx.c b/examples/eventdev_pipeline/pipeline_worker_tx.c
index ca6cd200ca..ad17451a04 100644
--- a/examples/eventdev_pipeline/pipeline_worker_tx.c
+++ b/examples/eventdev_pipeline/pipeline_worker_tx.c
@@ -446,6 +446,7 @@ setup_eventdev_worker_tx_enq(struct worker_data *worker_data)
 			.dequeue_depth = cdata.worker_cq_depth,
 			.enqueue_depth = 64,
 			.new_event_threshold = 4096,
+			.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_WORKER,
 	};
 	struct rte_event_queue_conf wkr_q_conf = {
 			.schedule_type = cdata.queue_type,
@@ -747,6 +748,7 @@ init_adapters(uint16_t nb_ports)
 		.dequeue_depth = cdata.worker_cq_depth,
 		.enqueue_depth = 64,
 		.new_event_threshold = 4096,
+		.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_PRODUCER,
 	};
 
 	init_ports(nb_ports);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API Harry van Haaren
@ 2021-09-16  4:59   ` Jerin Jacob
  2021-09-16 11:53     ` Van Haaren, Harry
  2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
  1 sibling, 1 reply; 12+ messages in thread
From: Jerin Jacob @ 2021-09-16  4:59 UTC (permalink / raw)
  To: Harry van Haaren; +Cc: dpdk-dev, pravin.pathak, McDaniel, Timothy

On Thu, Sep 9, 2021 at 6:24 PM Harry van Haaren
<harry.van.haaren@intel.com> wrote:
>
> This commit introduces 3 flags to the port configuration flags.
> These flags allow the application to indicate what type of work
> is expected to be performed by an eventdev port.
>
> The three new flags are
> - RTE_EVENT_PORT_CFG_HINT_PRODUCER (mostly RTE_EVENT_OP_NEW events)
> - RTE_EVENT_PORT_CFG_HINT_CONSUMER (mostly RTE_EVENT_OP_RELEASE events)
> - RTE_EVENT_PORT_CFG_HINT_WORKER   (mostly RTE_EVENT_OP_FORWARD events)
>
> These flags are only hints, and the PMDs must operate under the
> assumption that any port can enqueue an event with any type of op.

This change looks good to me.

+ @Mattias Rönnblom  @Erik Gabriel Carrillo  @Gujjar, Abhinandan S
@Pavan Nikhilesh  @Hemant Agrawal @Nipun Gupta  @Liang Ma @McDaniel,
Timothy
# Please change subject to evendev: ....
# Please submit the driver changes as well and updated performance
gain with the scheme.
# Please find below one comment



>
> Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
> ---
>  lib/eventdev/rte_eventdev.h | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
>
> diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> index a9c496fb62..159b580938 100644
> --- a/lib/eventdev/rte_eventdev.h
> +++ b/lib/eventdev/rte_eventdev.h
> @@ -709,6 +709,29 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
>   *
>   *  @see rte_event_port_setup(), rte_event_port_link()
>   */
> +#define RTE_EVENT_PORT_CFG_HINT_PRODUCER       (1ULL << 2)
> +/**< Hint that this event port will primarily enqueue events to the system.
> + * A PMD can optimize its internal workings by assuming that this port is
> + * primarily going to enqueue NEW events. Note that this flag is only a hint.

IMO, We can explicitly add the following line in each comment.

PMDs must operate under the assumption that any port can enqueue an
event with any type of op.

> + *
> + *  @see rte_event_port_setup()
> + */
> +#define RTE_EVENT_PORT_CFG_HINT_CONSUMER       (1ULL << 3)
> +/**< Hint that this event port will primarily dequeue events from the system.
> + * A PMD can optimize its internal workings by assuming that this port is
> + * primarily going to consume events, and not enqueue FORWARD or RELEASE events.
> + * Note that this flag is only a hint.
> + *
> + *  @see rte_event_port_setup()
> + */
> +#define RTE_EVENT_PORT_CFG_HINT_WORKER         (1ULL << 4)
> +/**< Hint that this event port will primarily events to the system.
> + * A PMD can optimize its internal workings by assuming that this port is
> + * primarily going to FORWARD events, and not enqueue NEW or RELEASE events
> + * often. Note that this flag is only a hint.
> + *
> + *  @see rte_event_port_setup()
> + */
>
>  /** Event port configuration structure */
>  struct rte_event_port_conf {
> --
> 2.30.2
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API
  2021-09-16  4:59   ` Jerin Jacob
@ 2021-09-16 11:53     ` Van Haaren, Harry
  0 siblings, 0 replies; 12+ messages in thread
From: Van Haaren, Harry @ 2021-09-16 11:53 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: dpdk-dev, Pathak, Pravin, McDaniel, Timothy,
	Mattias Rönnblom, Carrillo, Erik G, Gujjar, Abhinandan S,
	Pavan Nikhilesh Bhagavatula, hemant.agrawal, Nipun Gupta,
	Liang Ma

> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Thursday, September 16, 2021 5:59 AM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>
> Cc: dpdk-dev <dev@dpdk.org>; Pathak, Pravin <pravin.pathak@intel.com>;
> McDaniel, Timothy <timothy.mcdaniel@intel.com>
> Subject: Re: [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port
> configure API
> 
> On Thu, Sep 9, 2021 at 6:24 PM Harry van Haaren
> <harry.van.haaren@intel.com> wrote:
> >
> > This commit introduces 3 flags to the port configuration flags.
> > These flags allow the application to indicate what type of work
> > is expected to be performed by an eventdev port.
> >
> > The three new flags are
> > - RTE_EVENT_PORT_CFG_HINT_PRODUCER (mostly RTE_EVENT_OP_NEW
> events)
> > - RTE_EVENT_PORT_CFG_HINT_CONSUMER (mostly RTE_EVENT_OP_RELEASE
> events)
> > - RTE_EVENT_PORT_CFG_HINT_WORKER   (mostly RTE_EVENT_OP_FORWARD
> events)
> >
> > These flags are only hints, and the PMDs must operate under the
> > assumption that any port can enqueue an event with any type of op.
> 
> This change looks good to me.
> 
> + @Mattias Rönnblom  @Erik Gabriel Carrillo  @Gujjar, Abhinandan S
> @Pavan Nikhilesh  @Hemant Agrawal @Nipun Gupta  @Liang Ma @McDaniel,
> Timothy

Thanks for review Jerin. I didn't see some these folks on CC, so +CC a few.
Any concerns folks about adding hints for producer/worker/consumer?

> # Please change subject to evendev: ....

Yes, will do.

> # Please submit the driver changes as well and updated performance
> gain with the scheme.

Yes, that makes sense. I'll work with DLB driver maintainers to get these
changes up ASAP.

> # Please find below one comment

<snip details>

> > Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
> > ---
> >  lib/eventdev/rte_eventdev.h | 23 +++++++++++++++++++++++
> >  1 file changed, 23 insertions(+)
> >
> > diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
> > index a9c496fb62..159b580938 100644
> > --- a/lib/eventdev/rte_eventdev.h
> > +++ b/lib/eventdev/rte_eventdev.h
> > @@ -709,6 +709,29 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t
> queue_id, uint32_t attr_id,
> >   *
> >   *  @see rte_event_port_setup(), rte_event_port_link()
> >   */
> > +#define RTE_EVENT_PORT_CFG_HINT_PRODUCER       (1ULL << 2)
> > +/**< Hint that this event port will primarily enqueue events to the system.
> > + * A PMD can optimize its internal workings by assuming that this port is
> > + * primarily going to enqueue NEW events. Note that this flag is only a hint.
> 
> IMO, We can explicitly add the following line in each comment.
> 
> PMDs must operate under the assumption that any port can enqueue an
> event with any type of op.

Yes - good clarification to make it very clear each time.

<snip remaining patch>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 1/4] eventdev: add usage hints to port configure API
  2021-09-09 12:54 ` [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API Harry van Haaren
  2021-09-16  4:59   ` Jerin Jacob
@ 2021-10-14 14:51   ` Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 2/4] examples/eventdev_pipeline: use port config hints Harry van Haaren
                       ` (2 more replies)
  1 sibling, 3 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-10-14 14:51 UTC (permalink / raw)
  To: dev; +Cc: jerinj, pravin.pathak, rashmi.shetty, Harry van Haaren

This commit introduces 3 flags to the port configuration flags.
These flags allow the application to indicate what type of work
is expected to be performed by an eventdev port.

The three new flags are
- RTE_EVENT_PORT_CFG_HINT_PRODUCER (mostly RTE_EVENT_OP_NEW events)
- RTE_EVENT_PORT_CFG_HINT_CONSUMER (mostly RTE_EVENT_OP_RELEASE events)
- RTE_EVENT_PORT_CFG_HINT_WORKER   (mostly RTE_EVENT_OP_FORWARD events)

These flags are only hints, and the PMDs must operate under the
assumption that any port can enqueue an event with any type of op.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>

---

v2:
- Add note about PMD assumptions to all hints (Jerin)
- Fixup title to eventdev: (Jerin)
- Improve wording/readability of worker hint description.

---
 lib/eventdev/rte_eventdev.h | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
index a9c496fb62..c20d0b0c86 100644
--- a/lib/eventdev/rte_eventdev.h
+++ b/lib/eventdev/rte_eventdev.h
@@ -709,6 +709,38 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
  *
  *  @see rte_event_port_setup(), rte_event_port_link()
  */
+#define RTE_EVENT_PORT_CFG_HINT_PRODUCER       (1ULL << 2)
+/**< Hint that this event port will primarily enqueue events to the system.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to enqueue NEW events.
+ *
+ * Note that this flag is only a hint, so PMDs must operate under the
+ * assumption that any port can enqueue an event with any type of op.
+ *
+ *  @see rte_event_port_setup()
+ */
+#define RTE_EVENT_PORT_CFG_HINT_CONSUMER       (1ULL << 3)
+/**< Hint that this event port will primarily dequeue events from the system.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to consume events, and not enqueue FORWARD or RELEASE
+ * events.
+ *
+ * Note that this flag is only a hint, so PMDs must operate under the
+ * assumption that any port can enqueue an event with any type of op.
+ *
+ *  @see rte_event_port_setup()
+ */
+#define RTE_EVENT_PORT_CFG_HINT_WORKER         (1ULL << 4)
+/**< Hint that this event port will primarily pass existing events through.
+ * A PMD can optimize its internal workings by assuming that this port is
+ * primarily going to FORWARD events, and not enqueue NEW or RELEASE events
+ * often.
+ *
+ * Note that this flag is only a hint, so PMDs must operate under the
+ * assumption that any port can enqueue an event with any type of op.
+ *
+ *  @see rte_event_port_setup()
+ */
 
 /** Event port configuration structure */
 struct rte_event_port_conf {
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 2/4] examples/eventdev_pipeline: use port config hints
  2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
@ 2021-10-14 14:51     ` Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 3/4] test-eventdev: add event port hints for perf mode Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags Harry van Haaren
  2 siblings, 0 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-10-14 14:51 UTC (permalink / raw)
  To: dev; +Cc: jerinj, pravin.pathak, rashmi.shetty, Harry van Haaren

This commit adds the per-port hints added to the eventdev API, indicating
which eventdev ports will be used for producing, forwarding, or consuming
events from the system.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 examples/eventdev_pipeline/pipeline_worker_generic.c | 2 ++
 examples/eventdev_pipeline/pipeline_worker_tx.c      | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/examples/eventdev_pipeline/pipeline_worker_generic.c b/examples/eventdev_pipeline/pipeline_worker_generic.c
index 5ed0dc73ec..873ba13dfc 100644
--- a/examples/eventdev_pipeline/pipeline_worker_generic.c
+++ b/examples/eventdev_pipeline/pipeline_worker_generic.c
@@ -139,6 +139,7 @@ setup_eventdev_generic(struct worker_data *worker_data)
 			.dequeue_depth = cdata.worker_cq_depth,
 			.enqueue_depth = 64,
 			.new_event_threshold = 4096,
+			.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_WORKER,
 	};
 	struct rte_event_queue_conf wkr_q_conf = {
 			.schedule_type = cdata.queue_type,
@@ -416,6 +417,7 @@ init_adapters(uint16_t nb_ports)
 		.dequeue_depth = cdata.worker_cq_depth,
 		.enqueue_depth = 64,
 		.new_event_threshold = 4096,
+		.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_PRODUCER,
 	};
 
 	if (adptr_p_conf.new_event_threshold > dev_info.max_num_events)
diff --git a/examples/eventdev_pipeline/pipeline_worker_tx.c b/examples/eventdev_pipeline/pipeline_worker_tx.c
index ab8c6d6a0d..d760e2f6da 100644
--- a/examples/eventdev_pipeline/pipeline_worker_tx.c
+++ b/examples/eventdev_pipeline/pipeline_worker_tx.c
@@ -446,6 +446,7 @@ setup_eventdev_worker_tx_enq(struct worker_data *worker_data)
 			.dequeue_depth = cdata.worker_cq_depth,
 			.enqueue_depth = 64,
 			.new_event_threshold = 4096,
+			.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_WORKER,
 	};
 	struct rte_event_queue_conf wkr_q_conf = {
 			.schedule_type = cdata.queue_type,
@@ -744,6 +745,7 @@ init_adapters(uint16_t nb_ports)
 		.dequeue_depth = cdata.worker_cq_depth,
 		.enqueue_depth = 64,
 		.new_event_threshold = 4096,
+		.event_port_cfg = RTE_EVENT_PORT_CFG_HINT_PRODUCER,
 	};
 
 	init_ports(nb_ports);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 3/4] test-eventdev: add event port hints for perf mode
  2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 2/4] examples/eventdev_pipeline: use port config hints Harry van Haaren
@ 2021-10-14 14:51     ` Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags Harry van Haaren
  2 siblings, 0 replies; 12+ messages in thread
From: Harry van Haaren @ 2021-10-14 14:51 UTC (permalink / raw)
  To: dev; +Cc: jerinj, pravin.pathak, rashmi.shetty, Harry van Haaren

This commit adds producer, worker and consumer port hints for the
test-eventdev application performance tests.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
 app/test-eventdev/test_perf_common.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c
index cc100650c2..766ea22a27 100644
--- a/app/test-eventdev/test_perf_common.c
+++ b/app/test-eventdev/test_perf_common.c
@@ -480,7 +480,10 @@ perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,
 		w->processed_pkts = 0;
 		w->latency = 0;
 
-		ret = rte_event_port_setup(opt->dev_id, port, port_conf);
+		struct rte_event_port_conf conf = *port_conf;
+		conf.event_port_cfg |= RTE_EVENT_PORT_CFG_HINT_WORKER;
+
+		ret = rte_event_port_setup(opt->dev_id, port, &conf);
 		if (ret) {
 			evt_err("failed to setup port %d", port);
 			return ret;
@@ -500,7 +503,10 @@ perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,
 			p->t = t;
 		}
 
-		ret = perf_event_rx_adapter_setup(opt, stride, *port_conf);
+		struct rte_event_port_conf conf = *port_conf;
+		conf.event_port_cfg |= RTE_EVENT_PORT_CFG_HINT_PRODUCER;
+
+		ret = perf_event_rx_adapter_setup(opt, stride, conf);
 		if (ret)
 			return ret;
 	} else if (opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) {
@@ -525,8 +531,12 @@ perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt,
 			p->queue_id = prod * stride;
 			p->t = t;
 
-			ret = rte_event_port_setup(opt->dev_id, port,
-					port_conf);
+			struct rte_event_port_conf conf = *port_conf;
+			conf.event_port_cfg |=
+				RTE_EVENT_PORT_CFG_HINT_PRODUCER |
+				RTE_EVENT_PORT_CFG_HINT_CONSUMER;
+
+			ret = rte_event_port_setup(opt->dev_id, port, &conf);
 			if (ret) {
 				evt_err("failed to setup port %d", port);
 				return ret;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags
  2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 2/4] examples/eventdev_pipeline: use port config hints Harry van Haaren
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 3/4] test-eventdev: add event port hints for perf mode Harry van Haaren
@ 2021-10-14 14:51     ` Harry van Haaren
  2021-10-20 13:18       ` Jerin Jacob
  2 siblings, 1 reply; 12+ messages in thread
From: Harry van Haaren @ 2021-10-14 14:51 UTC (permalink / raw)
  To: dev; +Cc: jerinj, pravin.pathak, rashmi.shetty, Pathak

From: "Pathak, Pravin" <pravin.pathak@intel.com>

This commit implements the changes required for using suggested
port type hint feature. Each port uses different credit quanta
based on port type specified using port configuration flags.

Each port has separate quanta defined in dlb2_priv.h
Producer and consumer ports will need larger quanta value to reduce number
of credit calls they make. Workers can use small quanta as they mostly
work out of locally cached credits and don't request/return credits often.

Signed-off-by: Pathak, Pravin <pravin.pathak@intel.com>
---
 drivers/event/dlb2/dlb2.c       | 61 ++++++++++++++++++++++++++++++---
 drivers/event/dlb2/dlb2_priv.h  | 12 +++++--
 drivers/event/dlb2/pf/dlb2_pf.c |  1 +
 3 files changed, 67 insertions(+), 7 deletions(-)

diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c
index 252bbd8d5e..f77f00c0bc 100644
--- a/drivers/event/dlb2/dlb2.c
+++ b/drivers/event/dlb2/dlb2.c
@@ -355,6 +355,26 @@ set_sw_credit_quanta(const char *key __rte_unused,
 	return 0;
 }
 
+static int
+set_hw_credit_quanta(const char *key __rte_unused,
+	const char *value,
+	void *opaque)
+{
+	int *hw_credit_quanta = opaque;
+	int ret;
+
+	if (value == NULL || opaque == NULL) {
+		DLB2_LOG_ERR("NULL pointer\n");
+		return -EINVAL;
+	}
+
+	ret = dlb2_string_to_int(hw_credit_quanta, value);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
 static int
 set_default_depth_thresh(const char *key __rte_unused,
 	const char *value,
@@ -769,7 +789,7 @@ dlb2_eventdev_configure(const struct rte_eventdev *dev)
 		if (rsrcs->num_ldb_queues)
 			rsrcs->num_ldb_credits = config->nb_events_limit;
 		if (rsrcs->num_dir_ports)
-			rsrcs->num_dir_credits = config->nb_events_limit / 4;
+			rsrcs->num_dir_credits = config->nb_events_limit / 2;
 		if (dlb2->num_dir_credits_override != -1)
 			rsrcs->num_dir_credits = dlb2->num_dir_credits_override;
 	}
@@ -1693,6 +1713,7 @@ dlb2_eventdev_port_setup(struct rte_eventdev *dev,
 	struct dlb2_eventdev *dlb2;
 	struct dlb2_eventdev_port *ev_port;
 	int ret;
+	uint32_t hw_credit_quanta, sw_credit_quanta;
 
 	if (dev == NULL || port_conf == NULL) {
 		DLB2_LOG_ERR("Null parameter\n");
@@ -1753,9 +1774,25 @@ dlb2_eventdev_port_setup(struct rte_eventdev *dev,
 		  RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL);
 	ev_port->outstanding_releases = 0;
 	ev_port->inflight_credits = 0;
-	ev_port->credit_update_quanta = dlb2->sw_credit_quanta;
 	ev_port->dlb2 = dlb2; /* reverse link */
 
+	/* Default for worker ports */
+	sw_credit_quanta = dlb2->sw_credit_quanta;
+	hw_credit_quanta = dlb2->hw_credit_quanta;
+
+	if (port_conf->event_port_cfg & RTE_EVENT_PORT_CFG_HINT_PRODUCER) {
+		/* Producer type ports. Mostly enqueue */
+		sw_credit_quanta = DLB2_SW_CREDIT_P_QUANTA_DEFAULT;
+		hw_credit_quanta = DLB2_SW_CREDIT_P_BATCH_SZ;
+	}
+	if (port_conf->event_port_cfg & RTE_EVENT_PORT_CFG_HINT_CONSUMER) {
+		/* Consumer type ports. Mostly dequeue */
+		sw_credit_quanta = DLB2_SW_CREDIT_C_QUANTA_DEFAULT;
+		hw_credit_quanta = DLB2_SW_CREDIT_C_BATCH_SZ;
+	}
+	ev_port->credit_update_quanta = sw_credit_quanta;
+	ev_port->qm_port.hw_credit_quanta = hw_credit_quanta;
+
 	/* Tear down pre-existing port->queue links */
 	if (dlb2->run_state == DLB2_RUN_STATE_STOPPED)
 		dlb2_port_link_teardown(dlb2, &dlb2->ev_ports[ev_port_id]);
@@ -2378,7 +2415,8 @@ dlb2_port_credits_get(struct dlb2_port *qm_port,
 		      enum dlb2_hw_queue_types type)
 {
 	uint32_t credits = *qm_port->credit_pool[type];
-	uint32_t batch_size = DLB2_SW_CREDIT_BATCH_SZ;
+	/* By default hw_credit_quanta is DLB2_SW_CREDIT_BATCH_SZ */
+	uint32_t batch_size = qm_port->hw_credit_quanta;
 
 	if (unlikely(credits < batch_size))
 		batch_size = credits;
@@ -3112,7 +3150,7 @@ dlb2_event_release(struct dlb2_eventdev *dlb2,
 static inline void
 dlb2_port_credits_inc(struct dlb2_port *qm_port, int num)
 {
-	uint32_t batch_size = DLB2_SW_CREDIT_BATCH_SZ;
+	uint32_t batch_size = qm_port->hw_credit_quanta;
 
 	/* increment port credits, and return to pool if exceeds threshold */
 	if (!qm_port->is_directed) {
@@ -4446,6 +4484,7 @@ dlb2_primary_eventdev_probe(struct rte_eventdev *dev,
 	dlb2->qm_instance.cos_id = dlb2_args->cos_id;
 	dlb2->poll_interval = dlb2_args->poll_interval;
 	dlb2->sw_credit_quanta = dlb2_args->sw_credit_quanta;
+	dlb2->hw_credit_quanta = dlb2_args->hw_credit_quanta;
 	dlb2->default_depth_thresh = dlb2_args->default_depth_thresh;
 	dlb2->vector_opts_enabled = dlb2_args->vector_opts_enabled;
 
@@ -4550,6 +4589,7 @@ dlb2_parse_params(const char *params,
 					     DLB2_COS_ARG,
 					     DLB2_POLL_INTERVAL_ARG,
 					     DLB2_SW_CREDIT_QUANTA_ARG,
+					     DLB2_HW_CREDIT_QUANTA_ARG,
 					     DLB2_DEPTH_THRESH_ARG,
 					     DLB2_VECTOR_OPTS_ENAB_ARG,
 					     NULL };
@@ -4649,7 +4689,18 @@ dlb2_parse_params(const char *params,
 						 set_sw_credit_quanta,
 						 &dlb2_args->sw_credit_quanta);
 			if (ret != 0) {
-				DLB2_LOG_ERR("%s: Error parsing sw xredit quanta parameter",
+				DLB2_LOG_ERR("%s: Error parsing sw credit quanta parameter",
+					     name);
+				rte_kvargs_free(kvlist);
+				return ret;
+			}
+
+			ret = rte_kvargs_process(kvlist,
+						 DLB2_HW_CREDIT_QUANTA_ARG,
+						 set_hw_credit_quanta,
+						 &dlb2_args->hw_credit_quanta);
+			if (ret != 0) {
+				DLB2_LOG_ERR("%s: Error parsing hw credit quanta parameter",
 					     name);
 				rte_kvargs_free(kvlist);
 				return ret;
diff --git a/drivers/event/dlb2/dlb2_priv.h b/drivers/event/dlb2/dlb2_priv.h
index bb87072da0..5132c52115 100644
--- a/drivers/event/dlb2/dlb2_priv.h
+++ b/drivers/event/dlb2/dlb2_priv.h
@@ -24,7 +24,9 @@
 
 /* Default values for command line devargs */
 #define DLB2_POLL_INTERVAL_DEFAULT 1000
-#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32
+#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32 /* Defaut = Worker */
+#define DLB2_SW_CREDIT_P_QUANTA_DEFAULT 256 /* Producer */
+#define DLB2_SW_CREDIT_C_QUANTA_DEFAULT 256 /* Consumer */
 #define DLB2_DEPTH_THRESH_DEFAULT 256
 
 /*  command line arg strings */
@@ -36,6 +38,7 @@
 #define DLB2_COS_ARG "cos"
 #define DLB2_POLL_INTERVAL_ARG "poll_interval"
 #define DLB2_SW_CREDIT_QUANTA_ARG "sw_credit_quanta"
+#define DLB2_HW_CREDIT_QUANTA_ARG "hw_credit_quanta"
 #define DLB2_DEPTH_THRESH_ARG "default_depth_thresh"
 #define DLB2_VECTOR_OPTS_ENAB_ARG "vector_opts_enable"
 
@@ -72,7 +75,9 @@
 #define DLB2_MIN_DEQUEUE_TIMEOUT_NS 1
 /* Note: "- 1" here to support the timeout range check in eventdev_autotest */
 #define DLB2_MAX_DEQUEUE_TIMEOUT_NS (UINT32_MAX - 1)
-#define DLB2_SW_CREDIT_BATCH_SZ 32
+#define DLB2_SW_CREDIT_BATCH_SZ 32 /* Default - Worker */
+#define DLB2_SW_CREDIT_P_BATCH_SZ 256 /* Producer */
+#define DLB2_SW_CREDIT_C_BATCH_SZ 256 /* Consumer */
 #define DLB2_NUM_SN_GROUPS 2
 #define DLB2_MAX_LDB_SN_ALLOC 1024
 #define DLB2_MAX_QUEUE_DEPTH_THRESHOLD 8191
@@ -367,6 +372,7 @@ struct dlb2_port {
 	struct dlb2_eventdev *dlb2; /* back ptr */
 	struct dlb2_eventdev_port *ev_port; /* back ptr */
 	bool use_scalar; /* force usage of scalar code */
+	uint16_t hw_credit_quanta;
 };
 
 /* Per-process per-port mmio and memory pointers */
@@ -587,6 +593,7 @@ struct dlb2_eventdev {
 	enum dlb2_cq_poll_modes poll_mode;
 	int poll_interval;
 	int sw_credit_quanta;
+	int hw_credit_quanta;
 	int default_depth_thresh;
 	uint8_t revision;
 	uint8_t version;
@@ -622,6 +629,7 @@ struct dlb2_devargs {
 	enum dlb2_cos cos_id;
 	int poll_interval;
 	int sw_credit_quanta;
+	int hw_credit_quanta;
 	int default_depth_thresh;
 	bool vector_opts_enabled;
 };
diff --git a/drivers/event/dlb2/pf/dlb2_pf.c b/drivers/event/dlb2/pf/dlb2_pf.c
index e9da89d650..dba6f3d5f7 100644
--- a/drivers/event/dlb2/pf/dlb2_pf.c
+++ b/drivers/event/dlb2/pf/dlb2_pf.c
@@ -618,6 +618,7 @@ dlb2_eventdev_pci_init(struct rte_eventdev *eventdev)
 		.cos_id = DLB2_COS_DEFAULT,
 		.poll_interval = DLB2_POLL_INTERVAL_DEFAULT,
 		.sw_credit_quanta = DLB2_SW_CREDIT_QUANTA_DEFAULT,
+		.hw_credit_quanta = DLB2_SW_CREDIT_BATCH_SZ,
 		.default_depth_thresh = DLB2_DEPTH_THRESH_DEFAULT
 	};
 	struct dlb2_eventdev *dlb2;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags
  2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags Harry van Haaren
@ 2021-10-20 13:18       ` Jerin Jacob
  2021-10-20 14:08         ` Van Haaren, Harry
  0 siblings, 1 reply; 12+ messages in thread
From: Jerin Jacob @ 2021-10-20 13:18 UTC (permalink / raw)
  To: Harry van Haaren
  Cc: dpdk-dev, Jerin Jacob, pravin.pathak, Rashmi Shetty, Pathak

On Thu, Oct 14, 2021 at 8:22 PM Harry van Haaren
<harry.van.haaren@intel.com> wrote:
>
> From: "Pathak, Pravin" <pravin.pathak@intel.com>

There are the following issues

1) WARNING:FROM_SIGN_OFF_MISMATCH: From:/Signed-off-by: email name
mismatch: 'From: "Pathak, Pravin" <pravin.pathak@intel.com>' !=
'Signed-off-by: Pravin Pathak <pravin.pathak@intel.com>'
2)
Headline too long:
        event/dlb2: optimize credit allocations using port hint flags
Wrong tag:
        Signed-off-by: Pathak, Pravin <pravin.pathak@intel.com>

Invalid patch(es) found - checked 4 patches
check-git-log failed

### event/dlb2: optimize credit allocations using port hint flags

WARNING:TYPO_SPELLING: 'Defaut' may be misspelled - perhaps 'Default'?
#156: FILE: drivers/event/dlb2/dlb2_priv.h:27:
+#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32 /* Defaut = Worker */
                                             ^^^^^^
I can fix item 2 on merge.

Regarding the author name(1). Can I change to Pravin Pathak
<pravin.pathak@intel.com> ?

Appreciate a quick reply.


>
> This commit implements the changes required for using suggested
> port type hint feature. Each port uses different credit quanta
> based on port type specified using port configuration flags.
>
> Each port has separate quanta defined in dlb2_priv.h
> Producer and consumer ports will need larger quanta value to reduce number
> of credit calls they make. Workers can use small quanta as they mostly
> work out of locally cached credits and don't request/return credits often.
>
> Signed-off-by: Pathak, Pravin <pravin.pathak@intel.com>
> ---
>  drivers/event/dlb2/dlb2.c       | 61 ++++++++++++++++++++++++++++++---
>  drivers/event/dlb2/dlb2_priv.h  | 12 +++++--
>  drivers/event/dlb2/pf/dlb2_pf.c |  1 +
>  3 files changed, 67 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c
> index 252bbd8d5e..f77f00c0bc 100644
> --- a/drivers/event/dlb2/dlb2.c
> +++ b/drivers/event/dlb2/dlb2.c
> @@ -355,6 +355,26 @@ set_sw_credit_quanta(const char *key __rte_unused,
>         return 0;
>  }
>
> +static int
> +set_hw_credit_quanta(const char *key __rte_unused,
> +       const char *value,
> +       void *opaque)
> +{
> +       int *hw_credit_quanta = opaque;
> +       int ret;
> +
> +       if (value == NULL || opaque == NULL) {
> +               DLB2_LOG_ERR("NULL pointer\n");
> +               return -EINVAL;
> +       }
> +
> +       ret = dlb2_string_to_int(hw_credit_quanta, value);
> +       if (ret < 0)
> +               return ret;
> +
> +       return 0;
> +}
> +
>  static int
>  set_default_depth_thresh(const char *key __rte_unused,
>         const char *value,
> @@ -769,7 +789,7 @@ dlb2_eventdev_configure(const struct rte_eventdev *dev)
>                 if (rsrcs->num_ldb_queues)
>                         rsrcs->num_ldb_credits = config->nb_events_limit;
>                 if (rsrcs->num_dir_ports)
> -                       rsrcs->num_dir_credits = config->nb_events_limit / 4;
> +                       rsrcs->num_dir_credits = config->nb_events_limit / 2;
>                 if (dlb2->num_dir_credits_override != -1)
>                         rsrcs->num_dir_credits = dlb2->num_dir_credits_override;
>         }
> @@ -1693,6 +1713,7 @@ dlb2_eventdev_port_setup(struct rte_eventdev *dev,
>         struct dlb2_eventdev *dlb2;
>         struct dlb2_eventdev_port *ev_port;
>         int ret;
> +       uint32_t hw_credit_quanta, sw_credit_quanta;
>
>         if (dev == NULL || port_conf == NULL) {
>                 DLB2_LOG_ERR("Null parameter\n");
> @@ -1753,9 +1774,25 @@ dlb2_eventdev_port_setup(struct rte_eventdev *dev,
>                   RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL);
>         ev_port->outstanding_releases = 0;
>         ev_port->inflight_credits = 0;
> -       ev_port->credit_update_quanta = dlb2->sw_credit_quanta;
>         ev_port->dlb2 = dlb2; /* reverse link */
>
> +       /* Default for worker ports */
> +       sw_credit_quanta = dlb2->sw_credit_quanta;
> +       hw_credit_quanta = dlb2->hw_credit_quanta;
> +
> +       if (port_conf->event_port_cfg & RTE_EVENT_PORT_CFG_HINT_PRODUCER) {
> +               /* Producer type ports. Mostly enqueue */
> +               sw_credit_quanta = DLB2_SW_CREDIT_P_QUANTA_DEFAULT;
> +               hw_credit_quanta = DLB2_SW_CREDIT_P_BATCH_SZ;
> +       }
> +       if (port_conf->event_port_cfg & RTE_EVENT_PORT_CFG_HINT_CONSUMER) {
> +               /* Consumer type ports. Mostly dequeue */
> +               sw_credit_quanta = DLB2_SW_CREDIT_C_QUANTA_DEFAULT;
> +               hw_credit_quanta = DLB2_SW_CREDIT_C_BATCH_SZ;
> +       }
> +       ev_port->credit_update_quanta = sw_credit_quanta;
> +       ev_port->qm_port.hw_credit_quanta = hw_credit_quanta;
> +
>         /* Tear down pre-existing port->queue links */
>         if (dlb2->run_state == DLB2_RUN_STATE_STOPPED)
>                 dlb2_port_link_teardown(dlb2, &dlb2->ev_ports[ev_port_id]);
> @@ -2378,7 +2415,8 @@ dlb2_port_credits_get(struct dlb2_port *qm_port,
>                       enum dlb2_hw_queue_types type)
>  {
>         uint32_t credits = *qm_port->credit_pool[type];
> -       uint32_t batch_size = DLB2_SW_CREDIT_BATCH_SZ;
> +       /* By default hw_credit_quanta is DLB2_SW_CREDIT_BATCH_SZ */
> +       uint32_t batch_size = qm_port->hw_credit_quanta;
>
>         if (unlikely(credits < batch_size))
>                 batch_size = credits;
> @@ -3112,7 +3150,7 @@ dlb2_event_release(struct dlb2_eventdev *dlb2,
>  static inline void
>  dlb2_port_credits_inc(struct dlb2_port *qm_port, int num)
>  {
> -       uint32_t batch_size = DLB2_SW_CREDIT_BATCH_SZ;
> +       uint32_t batch_size = qm_port->hw_credit_quanta;
>
>         /* increment port credits, and return to pool if exceeds threshold */
>         if (!qm_port->is_directed) {
> @@ -4446,6 +4484,7 @@ dlb2_primary_eventdev_probe(struct rte_eventdev *dev,
>         dlb2->qm_instance.cos_id = dlb2_args->cos_id;
>         dlb2->poll_interval = dlb2_args->poll_interval;
>         dlb2->sw_credit_quanta = dlb2_args->sw_credit_quanta;
> +       dlb2->hw_credit_quanta = dlb2_args->hw_credit_quanta;
>         dlb2->default_depth_thresh = dlb2_args->default_depth_thresh;
>         dlb2->vector_opts_enabled = dlb2_args->vector_opts_enabled;
>
> @@ -4550,6 +4589,7 @@ dlb2_parse_params(const char *params,
>                                              DLB2_COS_ARG,
>                                              DLB2_POLL_INTERVAL_ARG,
>                                              DLB2_SW_CREDIT_QUANTA_ARG,
> +                                            DLB2_HW_CREDIT_QUANTA_ARG,
>                                              DLB2_DEPTH_THRESH_ARG,
>                                              DLB2_VECTOR_OPTS_ENAB_ARG,
>                                              NULL };
> @@ -4649,7 +4689,18 @@ dlb2_parse_params(const char *params,
>                                                  set_sw_credit_quanta,
>                                                  &dlb2_args->sw_credit_quanta);
>                         if (ret != 0) {
> -                               DLB2_LOG_ERR("%s: Error parsing sw xredit quanta parameter",
> +                               DLB2_LOG_ERR("%s: Error parsing sw credit quanta parameter",
> +                                            name);
> +                               rte_kvargs_free(kvlist);
> +                               return ret;
> +                       }
> +
> +                       ret = rte_kvargs_process(kvlist,
> +                                                DLB2_HW_CREDIT_QUANTA_ARG,
> +                                                set_hw_credit_quanta,
> +                                                &dlb2_args->hw_credit_quanta);
> +                       if (ret != 0) {
> +                               DLB2_LOG_ERR("%s: Error parsing hw credit quanta parameter",
>                                              name);
>                                 rte_kvargs_free(kvlist);
>                                 return ret;
> diff --git a/drivers/event/dlb2/dlb2_priv.h b/drivers/event/dlb2/dlb2_priv.h
> index bb87072da0..5132c52115 100644
> --- a/drivers/event/dlb2/dlb2_priv.h
> +++ b/drivers/event/dlb2/dlb2_priv.h
> @@ -24,7 +24,9 @@
>
>  /* Default values for command line devargs */
>  #define DLB2_POLL_INTERVAL_DEFAULT 1000
> -#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32
> +#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32 /* Defaut = Worker */
> +#define DLB2_SW_CREDIT_P_QUANTA_DEFAULT 256 /* Producer */
> +#define DLB2_SW_CREDIT_C_QUANTA_DEFAULT 256 /* Consumer */
>  #define DLB2_DEPTH_THRESH_DEFAULT 256
>
>  /*  command line arg strings */
> @@ -36,6 +38,7 @@
>  #define DLB2_COS_ARG "cos"
>  #define DLB2_POLL_INTERVAL_ARG "poll_interval"
>  #define DLB2_SW_CREDIT_QUANTA_ARG "sw_credit_quanta"
> +#define DLB2_HW_CREDIT_QUANTA_ARG "hw_credit_quanta"
>  #define DLB2_DEPTH_THRESH_ARG "default_depth_thresh"
>  #define DLB2_VECTOR_OPTS_ENAB_ARG "vector_opts_enable"
>
> @@ -72,7 +75,9 @@
>  #define DLB2_MIN_DEQUEUE_TIMEOUT_NS 1
>  /* Note: "- 1" here to support the timeout range check in eventdev_autotest */
>  #define DLB2_MAX_DEQUEUE_TIMEOUT_NS (UINT32_MAX - 1)
> -#define DLB2_SW_CREDIT_BATCH_SZ 32
> +#define DLB2_SW_CREDIT_BATCH_SZ 32 /* Default - Worker */
> +#define DLB2_SW_CREDIT_P_BATCH_SZ 256 /* Producer */
> +#define DLB2_SW_CREDIT_C_BATCH_SZ 256 /* Consumer */
>  #define DLB2_NUM_SN_GROUPS 2
>  #define DLB2_MAX_LDB_SN_ALLOC 1024
>  #define DLB2_MAX_QUEUE_DEPTH_THRESHOLD 8191
> @@ -367,6 +372,7 @@ struct dlb2_port {
>         struct dlb2_eventdev *dlb2; /* back ptr */
>         struct dlb2_eventdev_port *ev_port; /* back ptr */
>         bool use_scalar; /* force usage of scalar code */
> +       uint16_t hw_credit_quanta;
>  };
>
>  /* Per-process per-port mmio and memory pointers */
> @@ -587,6 +593,7 @@ struct dlb2_eventdev {
>         enum dlb2_cq_poll_modes poll_mode;
>         int poll_interval;
>         int sw_credit_quanta;
> +       int hw_credit_quanta;
>         int default_depth_thresh;
>         uint8_t revision;
>         uint8_t version;
> @@ -622,6 +629,7 @@ struct dlb2_devargs {
>         enum dlb2_cos cos_id;
>         int poll_interval;
>         int sw_credit_quanta;
> +       int hw_credit_quanta;
>         int default_depth_thresh;
>         bool vector_opts_enabled;
>  };
> diff --git a/drivers/event/dlb2/pf/dlb2_pf.c b/drivers/event/dlb2/pf/dlb2_pf.c
> index e9da89d650..dba6f3d5f7 100644
> --- a/drivers/event/dlb2/pf/dlb2_pf.c
> +++ b/drivers/event/dlb2/pf/dlb2_pf.c
> @@ -618,6 +618,7 @@ dlb2_eventdev_pci_init(struct rte_eventdev *eventdev)
>                 .cos_id = DLB2_COS_DEFAULT,
>                 .poll_interval = DLB2_POLL_INTERVAL_DEFAULT,
>                 .sw_credit_quanta = DLB2_SW_CREDIT_QUANTA_DEFAULT,
> +               .hw_credit_quanta = DLB2_SW_CREDIT_BATCH_SZ,
>                 .default_depth_thresh = DLB2_DEPTH_THRESH_DEFAULT
>         };
>         struct dlb2_eventdev *dlb2;
> --
> 2.30.2
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags
  2021-10-20 13:18       ` Jerin Jacob
@ 2021-10-20 14:08         ` Van Haaren, Harry
  2021-10-20 16:21           ` Jerin Jacob
  0 siblings, 1 reply; 12+ messages in thread
From: Van Haaren, Harry @ 2021-10-20 14:08 UTC (permalink / raw)
  To: Jerin Jacob; +Cc: dpdk-dev, Jerin Jacob, Pathak, Pravin, Shetty, Rashmi, Pathak

Hi Jerin,

> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Wednesday, October 20, 2021 2:19 PM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>
> Cc: dpdk-dev <dev@dpdk.org>; Jerin Jacob <jerinj@marvell.com>; Pathak, Pravin
> <pravin.pathak@intel.com>; Shetty, Rashmi <rashmi.shetty@intel.com>;
> Pathak@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations
> using port hint flags
> 
> On Thu, Oct 14, 2021 at 8:22 PM Harry van Haaren
> <harry.van.haaren@intel.com> wrote:
> >
> > From: "Pathak, Pravin" <pravin.pathak@intel.com>
> 
> There are the following issues
> 
> 1) WARNING:FROM_SIGN_OFF_MISMATCH: From:/Signed-off-by: email name
> mismatch: 'From: "Pathak, Pravin" <pravin.pathak@intel.com>' !=
> 'Signed-off-by: Pravin Pathak <pravin.pathak@intel.com>'

Signed off by line is correct, the "From" line is incorrect.

> 2)
> Headline too long:
>         event/dlb2: optimize credit allocations using port hint flags

Suggest this headline (which brings under the 60 chars?)

event/dlb2: optimize credit allocations with port hints


> Wrong tag:
>         Signed-off-by: Pathak, Pravin <pravin.pathak@intel.com>
> 
> Invalid patch(es) found - checked 4 patches
> check-git-log failed
> 
> ### event/dlb2: optimize credit allocations using port hint flags
> 
> WARNING:TYPO_SPELLING: 'Defaut' may be misspelled - perhaps 'Default'?
> #156: FILE: drivers/event/dlb2/dlb2_priv.h:27:
> +#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32 /* Defaut = Worker */
>                                              ^^^^^^
> I can fix item 2 on merge.
> 
> Regarding the author name(1). Can I change to Pravin Pathak
> <pravin.pathak@intel.com> ?

Yes, thanks.

> Appreciate a quick reply.

Thanks for review & response.

<snip patch contents>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags
  2021-10-20 14:08         ` Van Haaren, Harry
@ 2021-10-20 16:21           ` Jerin Jacob
  0 siblings, 0 replies; 12+ messages in thread
From: Jerin Jacob @ 2021-10-20 16:21 UTC (permalink / raw)
  To: Van Haaren, Harry
  Cc: dpdk-dev, Jerin Jacob, Pathak, Pravin, Shetty, Rashmi, Pathak

On Wed, Oct 20, 2021 at 7:38 PM Van Haaren, Harry
<harry.van.haaren@intel.com> wrote:
>
> Hi Jerin,
>
> > -----Original Message-----
> > From: Jerin Jacob <jerinjacobk@gmail.com>
> > Sent: Wednesday, October 20, 2021 2:19 PM
> > To: Van Haaren, Harry <harry.van.haaren@intel.com>
> > Cc: dpdk-dev <dev@dpdk.org>; Jerin Jacob <jerinj@marvell.com>; Pathak, Pravin
> > <pravin.pathak@intel.com>; Shetty, Rashmi <rashmi.shetty@intel.com>;
> > Pathak@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations
> > using port hint flags
> >
> > On Thu, Oct 14, 2021 at 8:22 PM Harry van Haaren
> > <harry.van.haaren@intel.com> wrote:
> > >
> > > From: "Pathak, Pravin" <pravin.pathak@intel.com>
> >
> > There are the following issues
> >
> > 1) WARNING:FROM_SIGN_OFF_MISMATCH: From:/Signed-off-by: email name
> > mismatch: 'From: "Pathak, Pravin" <pravin.pathak@intel.com>' !=
> > 'Signed-off-by: Pravin Pathak <pravin.pathak@intel.com>'
>
> Signed off by line is correct, the "From" line is incorrect.
>
> > 2)
> > Headline too long:
> >         event/dlb2: optimize credit allocations using port hint flags
>
> Suggest this headline (which brings under the 60 chars?)
>
> event/dlb2: optimize credit allocations with port hints
>
>
> > Wrong tag:
> >         Signed-off-by: Pathak, Pravin <pravin.pathak@intel.com>
> >
> > Invalid patch(es) found - checked 4 patches
> > check-git-log failed
> >
> > ### event/dlb2: optimize credit allocations using port hint flags
> >
> > WARNING:TYPO_SPELLING: 'Defaut' may be misspelled - perhaps 'Default'?
> > #156: FILE: drivers/event/dlb2/dlb2_priv.h:27:
> > +#define DLB2_SW_CREDIT_QUANTA_DEFAULT 32 /* Defaut = Worker */
> >                                              ^^^^^^
> > I can fix item 2 on merge.
> >
> > Regarding the author name(1). Can I change to Pravin Pathak
> > <pravin.pathak@intel.com> ?
>
> Yes, thanks.
>
> > Appreciate a quick reply.
>
> Thanks for review & response.

Added Acked-by: Jerin Jacob <jerinj@marvell.com> to 1,2,3 patches in the series.

Applied to dpdk-next-eventdev/for-main. Thanks.



>
> <snip patch contents>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-10-20 16:21 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-09 12:54 [dpdk-dev] [PATCH 0/2] eventdev: add port usage hints Harry van Haaren
2021-09-09 12:54 ` [dpdk-dev] [PATCH 1/2] lib/eventdev: add usage hints to port configure API Harry van Haaren
2021-09-16  4:59   ` Jerin Jacob
2021-09-16 11:53     ` Van Haaren, Harry
2021-10-14 14:51   ` [dpdk-dev] [PATCH v2 1/4] eventdev: " Harry van Haaren
2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 2/4] examples/eventdev_pipeline: use port config hints Harry van Haaren
2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 3/4] test-eventdev: add event port hints for perf mode Harry van Haaren
2021-10-14 14:51     ` [dpdk-dev] [PATCH v2 4/4] event/dlb2: optimize credit allocations using port hint flags Harry van Haaren
2021-10-20 13:18       ` Jerin Jacob
2021-10-20 14:08         ` Van Haaren, Harry
2021-10-20 16:21           ` Jerin Jacob
2021-09-09 12:54 ` [dpdk-dev] [PATCH 2/2] examples/eventdev_pipeline: use port config hints Harry van Haaren

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).