From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3347DC433E0 for ; Sat, 27 Feb 2021 07:12:34 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B858764E56 for ; Sat, 27 Feb 2021 07:12:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B858764E56 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=GOwbQG8gYusydMB2Nrj03kC7s7eXMqz6l+ZBva1wyIQ=; b=y/piMnJ1FSPa+8lknEAPwC0pD v5TJpcQ3PRzWdwom3v/84DzxJ3piHaSOSbdycquwAYxcOXlSganXjCOIRL0FXf0wplm5lx/GDLcev vQGNyVztitCDASkTviBT595pRosfuzxzCltDsp1ukpxjYOLP9kK9RnZ+lGCdzkaqsWSSt9TaBpyTU CbkCOJ7FctueW5NT4Kz7clQ6nrx3QR0wOSJgkJf59CxlaBT8l2avzzFxmQ8vaq8QbaBlxL8g00E/8 iHGqoLQJsGkZxwo60O5CsxxKG94UvOgz7RtUFG9Y2tf+aO+oN3N5iqFrDDzNNrEAu9XhPZhXOFuoN 0MI8S3bOg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1lFtku-0005hZ-UV; Sat, 27 Feb 2021 07:11:13 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1lFtkq-0005fm-MY for linux-arm-kernel@lists.infradead.org; Sat, 27 Feb 2021 07:11:10 +0000 Received: by mail-pj1-x102b.google.com with SMTP id b15so7316768pjb.0 for ; Fri, 26 Feb 2021 23:11:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=yao3DKiDUVXPocg3HZu3CrfMuuVcOFmhFEPj7H1Bbw8=; b=JdOofawLly857oBjaPmoYppod2v41v2JW2vM8XlV0oH12qJSzyQGY97LEdlw9+kjRs i2kPwMRp9XE2jcpYDmK+P7pLVB/DBGTfygwIWIAaJx/hQxgw7YYX0g8YXGfYwpGtZjlz 3bJd99NJxGXqj9M4YFEN2/LjaGA4YoJ4AvQIULe6H0yAQ5YYuSADW5W7KGijPvc5JejZ U4sCST/UDmBi5oDOdr2rkStT+UkJ6az241G5DE1Fb1NAFgNGrtUCVNV0m0RCHT72xn8Z QCvHUaV7mdl62lXEV8msDPl6p3xZ3XZb4pTG59D58RR0BEITYlWnKfbCBBm7n6RGkJhE 0mxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=yao3DKiDUVXPocg3HZu3CrfMuuVcOFmhFEPj7H1Bbw8=; b=FtuGrdwkh4M3bWhSF3/NS+55BYZwXYgBI2/JEkqmnGDgyYbIeDyCF/x4MvegzYQ8k0 bn8bjU1pmCVAmqGovpfwasn6gSgua0W7CwwnzJQHMjmiR1uc9lKn9ajOO9zKpNjyvQ6A 0KjxNbch4KK4RgSWtq+aHgIC/UmcpVqDl7IWuPKtxgYsCltVRQM1Bl42PDQMY46miSVH o/gDsP8RumVuuaLuPYUnmsA2RetJaHxY2u6M8UKZaT2djIZIwVcN6oSrbRA69jJbzwy1 zX82VfrhPimIkTPYA4TqPBj4lD1RvGcXtIbxxsWpNIuFZjXt6910pnYYD6FeGb/Vance hQqQ== X-Gm-Message-State: AOAM530sDhUiq5D/uMVWS6avHb4Qjf5h0KGfkYIwwFqn8lqVtzQu4vut CTstUuO0FG6ShvMt0zJ7Gnt2Xw== X-Google-Smtp-Source: ABdhPJw3iXjS9OpmouIDqNBfQQ+aGegQs6fCKMRNIgcVH2OptBhhf6Ug0IaWy1z/qwt8iphCZjWgmA== X-Received: by 2002:a17:902:690b:b029:e3:688d:5ab9 with SMTP id j11-20020a170902690bb02900e3688d5ab9mr6534606plk.55.1614409862107; Fri, 26 Feb 2021 23:11:02 -0800 (PST) Received: from leoy-ThinkPad-X240s ([218.190.226.35]) by smtp.gmail.com with ESMTPSA id q4sm11422703pfs.134.2021.02.26.23.10.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Feb 2021 23:11:01 -0800 (PST) Date: Sat, 27 Feb 2021 15:10:56 +0800 From: Leo Yan To: James Clark Subject: Re: [PATCH 3/7] perf cs-etm: Save aux records in each etm queue Message-ID: <20210227071056.GA3317@leoy-ThinkPad-X240s> References: <20210212144513.31765-1-james.clark@arm.com> <20210212144513.31765-4-james.clark@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210212144513.31765-4-james.clark@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210227_021109_056424_F76C7449 X-CRM114-Status: GOOD ( 32.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , branislav.rankov@arm.com, al.grant@arm.com, denik@chromium.org, Mathieu Poirier , suzuki.poulose@arm.com, Alexander Shishkin , Will Deacon , coresight@lists.linaro.org, John Garry , linux-kernel@vger.kernel.org, Namhyung Kim , Jiri Olsa , linux-arm-kernel@lists.infradead.org, Mike Leach Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Feb 12, 2021 at 04:45:09PM +0200, James Clark wrote: > The aux records will be used set the bounds of decoding in a > later commit. In the future we may also want to use the flags > of each record to control decoding. > > Do these need to be saved in their entirety, or can pointers > to each record safely be saved instead for later access? Rather than introudcing the perf record list, I just wander if we can use easier method to fix this problem. So below is the rough idea (though I don't really verify it): The essential information we need is what's the valid buffer length can be used for decoding. Though cs_etm_queue::buf_len tracks the buffer length, but it's the buffer length is for the whole AUX buffer, and which belongs to multiple "PERF_RECORD_AUX" events. So we cannot decode at once for the whole trace data in the AUX trace buffer, on the other hand, the incoming "PERF_RECORD_AUX" event can guide the CoreSight decoder it should decode how much buffer size. At the end, the trace data can be decoded step by step based on the incoming "PERF_RECORD_AUX" events. I'd like to propose to add a new field "cs_etm_queue::buf_rec_len", it stands for the record length based on the RECORD_AUX event. In theory, this value should be always less than "cs_etm_queue::buf_len". When every time the "PERF_RECORD_AUX" event is coming, we find out the corresponding queue (so this can be applied for "1:1" or "N:1" models for source and sink), and accumulate "perf_record_aux::aux_size" into "cs_etm_queue::buf_rec_len". At the decoder side, it decreases "etmq->buf_rec_len" until to zero for the current round of decoding (see cs_etm__decode_data_block()). Since all the "PERF_RECORD_AUX" event will be processed before "PERF_RECORD_EXIT" event, so we don't worry the tail trace data will be ignored. The main reason for this suggestion is it don't need to change the significant logic in current code. I will try to do experiment for this idea and share back. James, if you think I miss anything, please correct me as needed. Thanks! Leo > Signed-off-by: James Clark > --- > tools/perf/util/cs-etm.c | 32 +++++++++++++++++++++++++++++--- > 1 file changed, 29 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c > index 8f8b448632fb..88b541b2a804 100644 > --- a/tools/perf/util/cs-etm.c > +++ b/tools/perf/util/cs-etm.c > @@ -92,12 +92,16 @@ struct cs_etm_queue { > /* Conversion between traceID and index in traceid_queues array */ > struct intlist *traceid_queues_list; > struct cs_etm_traceid_queue **traceid_queues; > + int aux_record_list_len; > + int aux_record_list_idx; > + struct perf_record_aux *aux_record_list; > }; > > /* RB tree for quick conversion between traceID and metadata pointers */ > static struct intlist *traceid_list; > > -static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu); > +static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu, > + struct perf_record_aux *aux_record); > static int cs_etm__process_queues(struct cs_etm_auxtrace *etm); > static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm, > pid_t tid); > @@ -585,6 +589,7 @@ static void cs_etm__free_queue(void *priv) > > cs_etm_decoder__free(etmq->decoder); > cs_etm__free_traceid_queues(etmq); > + free(etmq->aux_record_list); > free(etmq); > } > > @@ -759,6 +764,19 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm) > return NULL; > } > > +static int cs_etm__save_aux_record(struct cs_etm_queue *etmq, > + struct perf_record_aux *aux_record) > +{ > + etmq->aux_record_list = reallocarray(etmq->aux_record_list, > + etmq->aux_record_list_len+1, > + sizeof(*etmq->aux_record_list)); > + if (!etmq->aux_record_list) > + return -ENOMEM; > + > + etmq->aux_record_list[etmq->aux_record_list_len++] = *aux_record; > + return 0; > +} > + > static int cs_etm__search_first_timestamp(struct cs_etm_queue *etmq) > { > int ret = 0; > @@ -865,7 +883,7 @@ static int cs_etm__setup_queues(struct cs_etm_auxtrace *etm) > return 0; > } > > -static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu) > +static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu, struct perf_record_aux *aux) > { > int ret; > if (etm->queues.new_data) { > @@ -875,6 +893,14 @@ static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu) > return ret; > } > > + /* In timeless mode, cpu is set to -1, and a single aux buffer is filled */ > + if (cpu < 0) > + cpu = 0; > + > + ret = cs_etm__save_aux_record(etm->queues.queue_array[cpu].priv, aux); > + if (ret) > + return ret; > + > if (!etm->timeless_decoding) > return cs_etm__search_first_timestamp(etm->queues.queue_array[cpu].priv); > else > @@ -2357,7 +2383,7 @@ static int cs_etm__process_event(struct perf_session *session, > > if ((timestamp || etm->timeless_decoding) > && event->header.type == PERF_RECORD_AUX) { > - err = cs_etm__update_queues(etm, sample->cpu); > + err = cs_etm__update_queues(etm, sample->cpu, &event->aux); > if (err) > return err; > } > -- > 2.28.0 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel