[dpdk-dev] [PATCH v3 12/15] app/eventdev: switch flow ID to dynamic mbuf field
Jerin Jacob
jerinjacobk at gmail.com
Wed Oct 28 05:54:15 CET 2020
On Wed, Oct 28, 2020 at 2:35 AM Thomas Monjalon <thomas at monjalon.net> wrote:
>
> The order test stored the flow ID in the deprecated mbuf field udata64.
> It is moved to a dynamic field in order to allow removal of udata64.
>
> Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
> ---
> app/test-eventdev/test_order_atq.c | 4 ++--
> app/test-eventdev/test_order_common.c | 21 ++++++++++++++++-----
> app/test-eventdev/test_order_common.h | 19 +++++++++++++++++++
> app/test-eventdev/test_order_queue.c | 4 ++--
> 4 files changed, 39 insertions(+), 9 deletions(-)
+ timothy.mcdaniel at intel.com
>
> diff --git a/app/test-eventdev/test_order_atq.c b/app/test-eventdev/test_order_atq.c
> index cfcb1dc4e9..b135ac4e55 100644
> --- a/app/test-eventdev/test_order_atq.c
> +++ b/app/test-eventdev/test_order_atq.c
> @@ -35,7 +35,7 @@ order_atq_worker(void *arg, const bool flow_id_cap)
> }
>
> if (!flow_id_cap)
> - ev.flow_id = ev.mbuf->udata64;
> + flow_id_copy_from_mbuf(&ev);
>
> if (ev.sub_event_type == 0) { /* stage 0 from producer */
> order_atq_process_stage_0(&ev);
> @@ -72,7 +72,7 @@ order_atq_worker_burst(void *arg, const bool flow_id_cap)
>
> for (i = 0; i < nb_rx; i++) {
> if (!flow_id_cap)
> - ev[i].flow_id = ev[i].mbuf->udata64;
> + flow_id_copy_from_mbuf(&ev[i]);
>
> if (ev[i].sub_event_type == 0) { /*stage 0 */
> order_atq_process_stage_0(&ev[i]);
> diff --git a/app/test-eventdev/test_order_common.c b/app/test-eventdev/test_order_common.c
> index dc55d93921..c5f7317440 100644
> --- a/app/test-eventdev/test_order_common.c
> +++ b/app/test-eventdev/test_order_common.c
> @@ -4,6 +4,8 @@
>
> #include "test_order_common.h"
>
> +int flow_id_dynfield_offset = -1;
See below,
> +
> int
> order_test_result(struct evt_test *test, struct evt_options *opt)
> {
> @@ -46,13 +48,10 @@ order_producer(void *arg)
> if (m == NULL)
> continue;
>
> - const uint32_t flow = (uintptr_t)m % nb_flows;
> + const flow_id_t flow = (uintptr_t)m % nb_flows;
> /* Maintain seq number per flow */
> m->seqn = producer_flow_seq[flow]++;
> - m->udata64 = flow;
> -
> - ev.flow_id = flow;
> - ev.mbuf = m;
> + flow_id_save(flow, m, &ev);
>
> while (rte_event_enqueue_burst(dev_id, port, &ev, 1) != 1) {
> if (t->err)
> @@ -139,6 +138,18 @@ order_test_setup(struct evt_test *test, struct evt_options *opt)
> {
> void *test_order;
>
> + static const struct rte_mbuf_dynfield flow_id_dynfield_desc = {
> + .name = "test_event_dynfield_flow_id",
> + .size = sizeof(flow_id_t),
> + .align = __alignof__(flow_id_t),
> + };
> + flow_id_dynfield_offset =
> + rte_mbuf_dynfield_register(&flow_id_dynfield_desc);
Since this path used in fastpath, could you move flow_id_dynfield_offset to
test_order's initial entry as that cache will be warm always.
> + if (flow_id_dynfield_offset < 0) {
> + evt_err("failed to register mbuf field");
> + return -rte_errno;
> + }
> +
> test_order = rte_zmalloc_socket(test->name, sizeof(struct test_order),
> RTE_CACHE_LINE_SIZE, opt->socket_id);
See above
The rest of the eventdev and Graph changes are fine.
More information about the dev
mailing list