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 EB17A43063; Mon, 14 Aug 2023 16:16:54 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 23E2A40A7F; Mon, 14 Aug 2023 16:16:54 +0200 (CEST) Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by mails.dpdk.org (Postfix) with ESMTP id EDC424021F for ; Mon, 14 Aug 2023 16:16:51 +0200 (CEST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 7FF4C5C0180; Mon, 14 Aug 2023 10:16:51 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Mon, 14 Aug 2023 10:16:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm1; t= 1692022611; x=1692109011; bh=DctqKS7NICqYqZ1IiDZvDdD1v6S/DrgF1iT 3J9JWTEE=; b=nIHNjGMXLaxfEssIh71vH4/qM6P2j2Am85luNa9wyGfzt3QCxmA PjIDFaIYR2TyYAGZpiu5GoJBDyMnkMe0yQ5+I9X8oLxNsuw2GINAwZZDt1wWwWdv LwVapCyv9HHuLfPSBJgHRF5Xc93btJJZpQXg3DTqj1IgCH35xnbmPemX55tUs2jZ wj85sHNOqtvyHAB2OjfiBk3HS3Z7S/G2HUGCSxuxIkbrJ6I3NiJaiqBJioJVUjW7 5h7fzVEx9+jcBDF1LtIomnVJAv1kdLL2pF7BbMAElufqg2zeSPcFQwq5zepyaUym sfExCAdXE2Mr3tdsg7cHOwXTiLfEAVJGxpA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1692022611; x=1692109011; bh=DctqKS7NICqYqZ1IiDZvDdD1v6S/DrgF1iT 3J9JWTEE=; b=pqzB6pmgUbiMdm0rHrTiFU0hryRzL81ehmw9rkgTcrwJl6ILS+/ FHDYlQBdIaXqzyBy6ASgNfeuaYxEZ0RdAdGIjHbie5++nQzZ6mhZyb08YM0XkDYf FKJiBmsM+Uk2pj1QAskOYbzMmw5OcZgf/SksWxFl39YtAYKa74BAfy82CrY4qqd0 3rarS3dleUB5oZzavsGPXU5Mt8VQQ6lrkU5IWTwCoccgTHWSQcHLGFxBlt49zDTg cCapfbGZNoKgQwSy1qaer3ac2Rf8MiBhAB5W8Zny3+zDbciB5PfDKYLRwtKmd/4U Kxvqb6kIFlDb4/YkV1ejpR2IeR6w4SS+bDQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedviedruddtgedgjeegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvvefufffkjghfggfgtgesthhqredttddtudenucfhrhhomhepvfhhohhm rghsucfoohhnjhgrlhhonhcuoehthhhomhgrshesmhhonhhjrghlohhnrdhnvghtqeenuc ggtffrrghtthgvrhhnpeefhfejleeuvdevtddutdeutdevhfeijeethfffueejhfetuddu vedtkedtieekffenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfh hrohhmpehthhhomhgrshesmhhonhhjrghlohhnrdhnvght X-ME-Proxy: Feedback-ID: i47234305:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 14 Aug 2023 10:16:49 -0400 (EDT) From: Thomas Monjalon To: fengchengwen Cc: dev@dpdk.org, mb@smartsharesystems.com, Kevin Laatz , Bruce Richardson , david.marchand@redhat.com Subject: Re: [PATCH v4] dmadev: add tracepoints Date: Mon, 14 Aug 2023 16:16:48 +0200 Message-ID: <2075619.usQuhbGJ8B@thomas> In-Reply-To: References: <20230412024808.41339-1-fengchengwen@huawei.com> <1737546.vCJZsxu672@thomas> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="iso-8859-1" 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 jeudi 3 ao=FBt 2023, fengchengwen: > Hi Thomas, >=20 > On 2023/7/31 20:48, Thomas Monjalon wrote: > > 10/07/2023 09:50, fengchengwen: > >> Hi Thomas, > >> > >> On 2023/7/10 14:49, Thomas Monjalon wrote: > >>> 09/07/2023 05:23, fengchengwen: > >>>> Hi Thomas, > >>>> > >>>> On 2023/7/7 18:40, Thomas Monjalon wrote: > >>>>> 26/05/2023 10:42, Chengwen Feng: > >>>>>> Add tracepoints at important APIs for tracing support. > >>>>>> > >>>>>> Signed-off-by: Chengwen Feng > >>>>>> Acked-by: Morten Br=F8rup > >>>>>> > >>>>>> --- > >>>>>> v4: Fix asan smoke fail. > >>>>>> v3: Address Morten's comment: > >>>>>> Move stats_get and vchan_status and to trace_fp.h. > >>>>>> v2: Address Morten's comment: > >>>>>> Make stats_get as fast-path trace-points. > >>>>>> Place fast-path trace-point functions behind in version.map. > >>>>> > >>>>> There are more things to fix. > >>>>> First you must export rte_dmadev_trace_fp.h as it is included by rt= e_dmadev.h. > >>>> > >>>> It was already included by rte_dmadev.h: > >>>> diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h > >>>> index e61d71959e..e792b90ef8 100644 > >>>> --- a/lib/dmadev/rte_dmadev.h > >>>> +++ b/lib/dmadev/rte_dmadev.h > >>>> @@ -796,6 +796,7 @@ struct rte_dma_sge { > >>>> }; > >>>> > >>>> #include "rte_dmadev_core.h" > >>>> +#include "rte_dmadev_trace_fp.h" > >>>> > >>>> > >>>>> Note: you could have caught this if testing the example app for DMA. > >>>>> Second, you must avoid structs and enum in this header file, > >>>> > >>>> Let me explain the #if #endif logic: > >>>> > >>>> For the function: > >>>> uint16_t > >>>> rte_dma_completed(int16_t dev_id, uint16_t vchan, const uint16_t nb_= cpls, > >>>> uint16_t *last_idx, bool *has_error) > >>>> > >>>> The common trace implementation: > >>>> RTE_TRACE_POINT_FP( > >>>> rte_dma_trace_completed, > >>>> RTE_TRACE_POINT_ARGS(int16_t dev_id, uint16_t vchan, > >>>> const uint16_t nb_cpls, uint16_t *last_idx, > >>>> bool *has_error, uint16_t ret), > >>>> rte_trace_point_emit_i16(dev_id); > >>>> rte_trace_point_emit_u16(vchan); > >>>> rte_trace_point_emit_u16(nb_cpls); > >>>> rte_trace_point_emit_ptr(idx_val); > >>>> rte_trace_point_emit_ptr(has_error); > >>>> rte_trace_point_emit_u16(ret); > >>>> ) > >>>> > >>>> But it has a problem: for pointer parameter (e.g. last_idx and has_e= rror), only record > >>>> the pointer value (i.e. address value). > >>>> > >>>> I think the pointer value has no mean (in particular, many of there = pointers are stack > >>>> variables), the value of the pointer point to is meaningful. > >>>> > >>>> So I add the pointer reference like below (as V3 did): > >>>> RTE_TRACE_POINT_FP( > >>>> rte_dma_trace_completed, > >>>> RTE_TRACE_POINT_ARGS(int16_t dev_id, uint16_t vchan, > >>>> const uint16_t nb_cpls, uint16_t *last_idx, > >>>> bool *has_error, uint16_t ret), > >>>> int has_error_val =3D *has_error; // pointer reference > >>>> int last_idx_val =3D *last_idx; // pointer reference > >>>> rte_trace_point_emit_i16(dev_id); > >>>> rte_trace_point_emit_u16(vchan); > >>>> rte_trace_point_emit_u16(nb_cpls); > >>>> rte_trace_point_emit_int(last_idx_val); // record the value of p= ointer > >>>> rte_trace_point_emit_int(has_error_val); // record the value of p= ointer > >>>> rte_trace_point_emit_u16(ret); > >>>> ) > >>>> > >>>> Unfortunately, the above lead to asan failed. because in: > >>>> RTE_TRACE_POINT_REGISTER(rte_dma_trace_completed, > >>>> lib.dmadev.completed) > >>>> it will invoke rte_dma_trace_completed() with the parameter is undef= ined. > >>>> > >>>> > >>>> To solve this problem, consider the rte_dmadev_trace_points.c will i= nclude rte_trace_point_register.h, > >>>> and the rte_trace_point_register.h will defined macro: _RTE_TRACE_PO= INT_REGISTER_H_. > >>>> > >>>> so we update trace points as (as V4 did): > >>>> RTE_TRACE_POINT_FP( > >>>> rte_dma_trace_completed, > >>>> RTE_TRACE_POINT_ARGS(int16_t dev_id, uint16_t vchan, > >>>> const uint16_t nb_cpls, uint16_t *last_idx, > >>>> bool *has_error, uint16_t ret), > >>>> #ifdef _RTE_TRACE_POINT_REGISTER_H_ > >>>> uint16_t __last_idx =3D 0; > >>>> bool __has_error =3D false; > >>>> last_idx =3D &__last_idx; // make sure the pointer= has meaningful value. > >>>> has_error =3D &__has_error; // so that the next poin= ter reference will work well. > >>>> #endif /* _RTE_TRACE_POINT_REGISTER_H_ */ > >>>> int has_error_val =3D *has_error; > >>>> int last_idx_val =3D *last_idx; > >>>> rte_trace_point_emit_i16(dev_id); > >>>> rte_trace_point_emit_u16(vchan); > >>>> rte_trace_point_emit_u16(nb_cpls); > >>>> rte_trace_point_emit_int(last_idx_val); > >>>> rte_trace_point_emit_int(has_error_val); > >>>> rte_trace_point_emit_u16(ret); > >>>> ) > >>>> > >>>>> otherwise it cannot be included alone. > >>>>> Look at what is done in other *_trace_fp.h files. > >>>>> > >>>>> > >>>> > >>>> Whether enable_trace_fp is true or false, the v4 work well. > >>>> Below is that run examples with enable_trace_fp=3Dtrue. > >>>> > >>>> ./dpdk-test --file-prefix=3Dfeng123 --trace=3Dlib.dmadev.* -l 10-11 > >>> > >>> This is the test application, not the example. > >>> Please make sure examples/dma/ is compiling. > >> > >> Work well with examples/dma (compiled with enable_trace_fp=3Dtrue). > >=20 > > Can you try with enable_trace_fp=3Dfalse (the default)? >=20 > It works well too. >=20 > >=20 > >>> Also, the test chkincs must run fine. > >> > >> chkincs ? > >=20 > > If this a word you don't know, you can try "git grep" to better underst= and. > > There is a Meson option "check_includes" to enable chkincs. > >=20 > > I recommend using devtools/test-meson-builds.sh to test patches, > > it includes the above options. >=20 > According your suggest, I use test-meson-builds.sh, and pass. It does not pass for me: In file included from dmafwd.c:14: build-x86-generic/install/usr/local/include/rte_dmadev.h:799:10: fatal error: rte_dmadev_trace_fp.h: No such file or directory 799 | #include "rte_dmadev_trace_fp.h" Let me repeat again my recommendations: =46irst you must export rte_dmadev_trace_fp.h as it is included by rte_dmad= ev.h. YOU NEED TO ADD IT in meson.build FILE Note: you could have caught this if testing the example app for DMA. Second, you must avoid structs and enum in this header file, otherwise it cannot be included alone. Look at what is done in other *_trace_fp.h files. > TestEnv: x86_64 > gcc version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) > aarch64-linux-gnu-gcc version: gcc version 7.5.0 (Ubuntu/Linaro = 7.5.0-3ubuntu1~18.04) > Changes: 1) set 'DPDK_MESON_OPTIONS=3D"max_numa_nodes=3D1"' in .develconf= ig (because don't have libnuma) > 2) disable compile event/* driver when build armv8 (fix compile = drivers/event/cnxk/deq/cn10k/deq_*.c error: Error: reg pair must start from= even reg at operand 1 -- `caspal x7,x8,x7,x8,[x4]') Is it an error related to your patch? If not, please raise it in bugzilla to get it fixed.