From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 ; Mon, 23 Jan 2023 14:01:35 +0100 (CET) Received: by mail-vs1-f48.google.com with SMTP id j185so12704098vsc.13 for ; 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 Date: Mon, 23 Jan 2023 18:31:07 +0530 Message-ID: Subject: Re: [PATCH v7 1/6] eal: trace: add trace point emit for blob To: Ankur Dwivedi 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Mon, Jan 23, 2023 at 2:35 PM Ankur Dwivedi 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 Acked-by: Jerin Jacob > --- > 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 > #include > +#include > #include > > #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 >