From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id D99744246A;
	Mon, 23 Jan 2023 14:01:35 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 87EF3400EF;
	Mon, 23 Jan 2023 14:01:35 +0100 (CET)
Received: from mail-vs1-f48.google.com (mail-vs1-f48.google.com
 [209.85.217.48]) by mails.dpdk.org (Postfix) with ESMTP id 0FB67400D4
 for <dev@dpdk.org>; Mon, 23 Jan 2023 14:01:35 +0100 (CET)
Received: by mail-vs1-f48.google.com with SMTP id j185so12704098vsc.13
 for <dev@dpdk.org>; Mon, 23 Jan 2023 05:01:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=9aLwYDTmuXgmGNoUjXYJQVz2vUKzGikZjIy4jGTCcA0=;
 b=Zt3jWttzw/IxsedBvfE5Qc5c5O4xd1RUTJJ9BquiwHJtwBFC9aEugMroWVu9KFdYb8
 RFXhFFqEtqbx0M0sjULF2LGQJh6UaY3DTQgs50iGsdcjsXVnJb8+jjWJsU4nylfLs7Eh
 RrwNfaJEie3JkwWehsvxdRaBHi4ro4hheQ6lJJL/h0VvDDvuXFQ7Blb+sl0va2QpKodH
 0YTVyEkaecF7ojlnM7dAVzBfBDfqT0GJlzSI7VihTGNLdyeZrxosOOw4WD2JKJlfkwSD
 eeIPwFHQBzRokZYMrkIfgFIwclnC6jAi/PurwaZS+gW+hh39d4h5x4kpFAhAigOqF8eX
 jfJg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=9aLwYDTmuXgmGNoUjXYJQVz2vUKzGikZjIy4jGTCcA0=;
 b=vXdmny4Vi7HIlwr9mxuSXTJqpYR9zqYfzPeKwYmAbP4jAUNxQNq4Wv3nYXQQTUmm+w
 iEGroMKzuvVsGrVRxHiJi5ZbKmkaa4gJL9xnSCx9x5Sver6LozaZ8OmfHd4SM29JxXJr
 YwmSgbK3JniaJSIJqCQksvjuAHDaUBIxVVbRsKDe+A9qPDs2a29AW+ftqbtd/81ZL64g
 KfBzT6Ity1jlUZgcwZ/GB3kQeyuz4mKFIZDCnlDoEco0vK3fBe5xlpl8rP/hrHcu9Frg
 K9lMN03blMNQDxXKWdpAQSRRgasMEzlNNxg7AlQlQOutzS4S1rVWIvH4UsPyVh5QcV9j
 WEwA==
X-Gm-Message-State: AFqh2kpXQrbTwlucGmjlVFhfQBCmY/yoYILQMJZu2gViYhkTVIukIOqK
 brp1fkP44iWI+gMS/g6Mf27XPUN68zMTaaWzFu4=
X-Google-Smtp-Source: AMrXdXuzl/BnAPSiUixfw9OInh6NrF56KuNrlG9wVx1MHjnVhA58dOUbCjMBP8Tw3JRZbONjd5Ap518vr2JKDwsfXss=
X-Received: by 2002:a05:6102:1173:b0:3d0:bfd2:3a12 with SMTP id
 k19-20020a056102117300b003d0bfd23a12mr3229276vsg.52.1674478894305; Mon, 23
 Jan 2023 05:01:34 -0800 (PST)
MIME-Version: 1.0
References: <20230120084059.2926575-1-adwivedi@marvell.com>
 <20230123090229.3392071-1-adwivedi@marvell.com>
 <20230123090229.3392071-2-adwivedi@marvell.com>
In-Reply-To: <20230123090229.3392071-2-adwivedi@marvell.com>
From: Jerin Jacob <jerinjacobk@gmail.com>
Date: Mon, 23 Jan 2023 18:31:07 +0530
Message-ID: <CALBAE1PNoQ-jjSsQv-uFQV-cSGvWT6J_JxCbgD379cbOap8MDw@mail.gmail.com>
Subject: Re: [PATCH v7 1/6] eal: trace: add trace point emit for blob
To: Ankur Dwivedi <adwivedi@marvell.com>
Cc: dev@dpdk.org, thomas@monjalon.net, david.marchand@redhat.com, 
 mdr@ashroe.eu, orika@nvidia.com, ferruh.yigit@amd.com, chas3@att.com, 
 humin29@huawei.com, linville@tuxdriver.com, ciara.loftus@intel.com, 
 qi.z.zhang@intel.com, mw@semihalf.com, mk@semihalf.com, shaibran@amazon.com, 
 evgenys@amazon.com, igorch@amazon.com, chandu@amd.com, irusskikh@marvell.com, 
 shepard.siegel@atomicrules.com, ed.czeck@atomicrules.com, 
 john.miller@atomicrules.com, ajit.khaparde@broadcom.com, 
 somnath.kotur@broadcom.com, jerinj@marvell.com, mczekaj@marvell.com, 
 sthotton@marvell.com, srinivasan@marvell.com, hkalra@marvell.com, 
 rahul.lakkireddy@chelsio.com, johndale@cisco.com, hyonkim@cisco.com, 
 liudongdong3@huawei.com, yisen.zhuang@huawei.com, xuanziyang2@huawei.com, 
 cloud.wangxiaoyun@huawei.com, zhouguoyang@huawei.com, simei.su@intel.com, 
 wenjun1.wu@intel.com, qiming.yang@intel.com, Yuying.Zhang@intel.com, 
 beilei.xing@intel.com, xiao.w.wang@intel.com, jingjing.wu@intel.com, 
 junfeng.guo@intel.com, rosen.xu@intel.com, ndabilpuram@marvell.com, 
 kirankumark@marvell.com, skori@marvell.com, skoteshwar@marvell.com, 
 lironh@marvell.com, zr@semihalf.com, radhac@marvell.com, vburru@marvell.com, 
 sedara@marvell.com, matan@nvidia.com, viacheslavo@nvidia.com, 
 longli@microsoft.com, spinler@cesnet.cz, chaoyong.he@corigine.com, 
 niklas.soderlund@corigine.com, hemant.agrawal@nxp.com, 
 sachin.saxena@oss.nxp.com, g.singh@nxp.com, apeksha.gupta@nxp.com, 
 sachin.saxena@nxp.com, aboyer@pensando.io, rmody@marvell.com, 
 shshaikh@marvell.com, dsinghrawat@marvell.com, andrew.rybchenko@oktetlabs.ru, 
 jiawenwu@trustnetic.com, jianwang@trustnetic.com, jbehrens@vmware.com, 
 maxime.coquelin@redhat.com, chenbo.xia@intel.com, 
 steven.webster@windriver.com, matt.peters@windriver.com, 
 bruce.richardson@intel.com, mtetsuyah@gmail.com, grive@u256.net, 
 jasvinder.singh@intel.com, cristian.dumitrescu@intel.com, jgrajcia@cisco.com, 
 mb@smartsharesystems.com
Content-Type: text/plain; charset="UTF-8"
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

On Mon, Jan 23, 2023 at 2:35 PM Ankur Dwivedi <adwivedi@marvell.com> wrote:
>
> Adds a trace point emit function for capturing a blob. The blob
> captures the length passed by the application followed by the array.
>
> The maximum blob bytes which can be captured is bounded by
> RTE_TRACE_BLOB_LEN_MAX macro. The value for max blob length macro is
> 64 bytes. If the length is less than 64 the remaining trailing bytes
> are set to zero.
>
> This patch also adds test case for emit blob tracepoint function.
>
> Signed-off-by: Ankur Dwivedi <adwivedi@marvell.com>


Acked-by: Jerin Jacob <jerinj@marvell.com>


> ---
>  app/test/test_trace.c                      | 11 ++++++++
>  doc/guides/prog_guide/trace_lib.rst        | 12 +++++++++
>  lib/eal/common/eal_common_trace_points.c   |  2 ++
>  lib/eal/include/rte_eal_trace.h            |  6 +++++
>  lib/eal/include/rte_trace_point.h          | 31 ++++++++++++++++++++++
>  lib/eal/include/rte_trace_point_register.h |  9 +++++++
>  lib/eal/version.map                        |  3 +++
>  7 files changed, 74 insertions(+)
>
> diff --git a/app/test/test_trace.c b/app/test/test_trace.c
> index 6bedf14024..ad4a394a29 100644
> --- a/app/test/test_trace.c
> +++ b/app/test/test_trace.c
> @@ -4,6 +4,7 @@
>
>  #include <rte_eal_trace.h>
>  #include <rte_lcore.h>
> +#include <rte_random.h>
>  #include <rte_trace.h>
>
>  #include "test.h"
> @@ -177,7 +178,12 @@ test_fp_trace_points(void)
>  static int
>  test_generic_trace_points(void)
>  {
> +       uint8_t arr[RTE_TRACE_BLOB_LEN_MAX];
>         int tmp;
> +       int i;
> +
> +       for (i = 0; i < RTE_TRACE_BLOB_LEN_MAX; i++)
> +               arr[i] = i;
>
>         rte_eal_trace_generic_void();
>         rte_eal_trace_generic_u64(0x10000000000000);
> @@ -195,6 +201,11 @@ test_generic_trace_points(void)
>         rte_eal_trace_generic_ptr(&tmp);
>         rte_eal_trace_generic_str("my string");
>         rte_eal_trace_generic_size_t(sizeof(void *));
> +       rte_eal_trace_generic_blob(arr, 0);
> +       rte_eal_trace_generic_blob(arr, 17);
> +       rte_eal_trace_generic_blob(arr, RTE_TRACE_BLOB_LEN_MAX);
> +       rte_eal_trace_generic_blob(arr, rte_rand() %
> +                                       RTE_TRACE_BLOB_LEN_MAX);
>         RTE_EAL_TRACE_GENERIC_FUNC;
>
>         return TEST_SUCCESS;
> diff --git a/doc/guides/prog_guide/trace_lib.rst b/doc/guides/prog_guide/trace_lib.rst
> index 9a8f38073d..3e0ea5835c 100644
> --- a/doc/guides/prog_guide/trace_lib.rst
> +++ b/doc/guides/prog_guide/trace_lib.rst
> @@ -352,3 +352,15 @@ event ID.
>  The ``packet.header`` and ``packet.context`` will be written in the slow path
>  at the time of trace memory creation. The ``trace.header`` and trace payload
>  will be emitted when the tracepoint function is invoked.
> +
> +Limitations
> +-----------
> +
> +- The ``rte_trace_point_emit_blob()`` function can capture a maximum blob of
> +  length ``RTE_TRACE_BLOB_LEN_MAX`` bytes. The application can call
> +  ``rte_trace_point_emit_blob()`` multiple times with length less than or equal to
> +  ``RTE_TRACE_BLOB_LEN_MAX``, if it needs to capture more than ``RTE_TRACE_BLOB_LEN_MAX``
> +  bytes.
> +- If the length passed to the ``rte_trace_point_emit_blob()`` is less than
> +  ``RTE_TRACE_BLOB_LEN_MAX``, then the trailing ``(RTE_TRACE_BLOB_LEN_MAX - len)``
> +  bytes in the trace are set to zero.
> diff --git a/lib/eal/common/eal_common_trace_points.c b/lib/eal/common/eal_common_trace_points.c
> index 0b0b254615..051f89809c 100644
> --- a/lib/eal/common/eal_common_trace_points.c
> +++ b/lib/eal/common/eal_common_trace_points.c
> @@ -40,6 +40,8 @@ RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_size_t,
>         lib.eal.generic.size_t)
>  RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_func,
>         lib.eal.generic.func)
> +RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_blob,
> +       lib.eal.generic.blob)
>
>  RTE_TRACE_POINT_REGISTER(rte_eal_trace_alarm_set,
>         lib.eal.alarm.set)
> diff --git a/lib/eal/include/rte_eal_trace.h b/lib/eal/include/rte_eal_trace.h
> index 5ef4398230..e0b836eb2f 100644
> --- a/lib/eal/include/rte_eal_trace.h
> +++ b/lib/eal/include/rte_eal_trace.h
> @@ -143,6 +143,12 @@ RTE_TRACE_POINT(
>         rte_trace_point_emit_string(func);
>  )
>
> +RTE_TRACE_POINT(
> +       rte_eal_trace_generic_blob,
> +       RTE_TRACE_POINT_ARGS(void *in, uint8_t len),
> +       rte_trace_point_emit_blob(in, len);
> +)
> +
>  #define RTE_EAL_TRACE_GENERIC_FUNC rte_eal_trace_generic_func(__func__)
>
>  /* Interrupt */
> diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h
> index 0f8700974f..4d6b5700dd 100644
> --- a/lib/eal/include/rte_trace_point.h
> +++ b/lib/eal/include/rte_trace_point.h
> @@ -144,6 +144,16 @@ _tp _args \
>  #define rte_trace_point_emit_ptr(val)
>  /** Tracepoint function payload for string datatype */
>  #define rte_trace_point_emit_string(val)
> +/**
> + * Tracepoint function to capture a blob.
> + *
> + * @param val
> + *   Pointer to the array to be captured.
> + * @param len
> + *   Length to be captured. The maximum supported length is
> + *   RTE_TRACE_BLOB_LEN_MAX bytes.
> + */
> +#define rte_trace_point_emit_blob(val, len)
>
>  #endif /* __DOXYGEN__ */
>
> @@ -152,6 +162,9 @@ _tp _args \
>  /** @internal Macro to define event header size. */
>  #define __RTE_TRACE_EVENT_HEADER_SZ sizeof(uint64_t)
>
> +/** Macro to define maximum emit length of blob. */
> +#define RTE_TRACE_BLOB_LEN_MAX 64
> +
>  /**
>   * Enable recording events of the given tracepoint in the trace buffer.
>   *
> @@ -374,12 +387,30 @@ do { \
>         mem = RTE_PTR_ADD(mem, __RTE_TRACE_EMIT_STRING_LEN_MAX); \
>  } while (0)
>
> +#define rte_trace_point_emit_blob(in, len) \
> +do { \
> +       if (unlikely(in == NULL)) \
> +               return; \
> +       if (len > RTE_TRACE_BLOB_LEN_MAX) \
> +               len = RTE_TRACE_BLOB_LEN_MAX; \
> +       __rte_trace_point_emit(len, uint8_t); \
> +       memcpy(mem, in, len); \
> +       memset(RTE_PTR_ADD(mem, len), 0, RTE_TRACE_BLOB_LEN_MAX - len); \
> +       mem = RTE_PTR_ADD(mem, RTE_TRACE_BLOB_LEN_MAX); \
> +} while (0)
> +
>  #else
>
>  #define __rte_trace_point_emit_header_generic(t) RTE_SET_USED(t)
>  #define __rte_trace_point_emit_header_fp(t) RTE_SET_USED(t)
>  #define __rte_trace_point_emit(in, type) RTE_SET_USED(in)
>  #define rte_trace_point_emit_string(in) RTE_SET_USED(in)
> +#define rte_trace_point_emit_blob(in, len) \
> +do { \
> +       RTE_SET_USED(in); \
> +       RTE_SET_USED(len); \
> +} while (0)
> +
>
>  #endif /* ALLOW_EXPERIMENTAL_API */
>  #endif /* _RTE_TRACE_POINT_REGISTER_H_ */
> diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h
> index a32f4d731b..a9682d3f22 100644
> --- a/lib/eal/include/rte_trace_point_register.h
> +++ b/lib/eal/include/rte_trace_point_register.h
> @@ -47,6 +47,15 @@ do { \
>                 RTE_STR(in)"[32]", "string_bounded_t"); \
>  } while (0)
>
> +#define rte_trace_point_emit_blob(in, len) \
> +do { \
> +       RTE_SET_USED(in); \
> +       __rte_trace_point_emit(len, uint8_t); \
> +       __rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \
> +               RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \
> +               RTE_STR(uint8_t)); \
> +} while (0)
> +
>  #ifdef __cplusplus
>  }
>  #endif
> diff --git a/lib/eal/version.map b/lib/eal/version.map
> index 7ad12a7dc9..67be24686a 100644
> --- a/lib/eal/version.map
> +++ b/lib/eal/version.map
> @@ -440,6 +440,9 @@ EXPERIMENTAL {
>         rte_thread_detach;
>         rte_thread_equal;
>         rte_thread_join;
> +
> +       # added in 23.03
> +       __rte_eal_trace_generic_blob;
>  };
>
>  INTERNAL {
> --
> 2.25.1
>