Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1068002pxf; Fri, 12 Mar 2021 00:43:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJxceJyoQX1uBe6yF7fNlM9JCT7CTEbqe0HFSA/nlg4Eu2jWM/aydm+a+/MJralsy8zTgeDq X-Received: by 2002:a05:6402:3122:: with SMTP id dd2mr12736013edb.253.1615538587806; Fri, 12 Mar 2021 00:43:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615538587; cv=none; d=google.com; s=arc-20160816; b=VmWq4jcl/oxguU8/3Su5R9FEHkqgln297MOngCmjLpLTmLO1+Rl0Q7O+i2r+S+fqmI gj8Y9lon1GMVmMzhvwlvnukzvtKmW3PIUlDn/h/xBEweH9FPtHJjBvWXiFLghUqDmsHS b+ucxQ5rJVYjqNXcFEC2/o2rrCrT6ciH9ySMsebF/TwS/BWtd8x53aL1quG5HgVAJfie g5eqhQA4jgzQTP3p+dglu6k0HC1/zphtqY1O1kXakZ12oOPRxaEoo1WORHOFB1Y9mZNa +htwp0rDRCWfTVjPjMEjsB+av+73kevvHGbkkgY2V+brz9VgQIrMKeBRNMEQmjrBVmPu 4uXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version; bh=crFGONXFw/Qn1xKM35gHQA0cNmNMftLxdN/rOgTM3zw=; b=LgW53zyUmsoLcGg7kUvDJzay5bg2NK4kR2BKSPuVYp2PhmmbFkWCTRlyWlemjVY7ng DZO5ZDqygSmEwVDKhyrqvyAV/EmAS751BLTwMzmikCRwGLybqU/TpFAFcn+R7RVqUGgo gRFFo+aWd0iDsSoIe8n4PLn7tAA/zdb7CnCByJIj6TIocHGxFgT0QOB3Y0seQ2eiT+c4 90jgaMEHgtN0cFMEe35Em+/aeU/DGYT3WCWUmWNajayqI13+YYVydkBm+CUYfjkXdTX+ WvF9ctfkqvAfN2KNgM+MfvjlEfo+KDaWOqAFWsSoxwJZbJoZvx9ZP+WTgqn0diYp8u1j t5RA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l20si3399261ejn.375.2021.03.12.00.42.37; Fri, 12 Mar 2021 00:43:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232361AbhCLIks (ORCPT + 99 others); Fri, 12 Mar 2021 03:40:48 -0500 Received: from mail-lj1-f176.google.com ([209.85.208.176]:44024 "EHLO mail-lj1-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232580AbhCLIkP (ORCPT ); Fri, 12 Mar 2021 03:40:15 -0500 Received: by mail-lj1-f176.google.com with SMTP id y1so5715376ljm.10 for ; Fri, 12 Mar 2021 00:40:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=crFGONXFw/Qn1xKM35gHQA0cNmNMftLxdN/rOgTM3zw=; b=qEV4YDD/0/JFdIV85QJu9JjbG6/HmTePXDWjRTADpo0vOMzQc5BtYcpmRrDPLge+nD hk6NJ8rA8M+G+ddi+TuInI7tVQzj38nmQAQXykiWDiR02QOMPKoywv6vuBxv8kENHgI5 9l5ElEkzomVz8XixlFOCE08JWtlSgxZtaHq8VdAcGr/HAeQVw5QDuCzp2035yHmzM0AW A0FRmn05Zr2OkJEfs6qRR2cHGYnObHB+z0i6UBDxSOY38uoFt3lvt+ByHWlfdzhrnSHD 5O4loJpyeKdbOgD4ycYfllP0FVPnH8QyH5k+jQ94SBwPHtCiCZ6TG5hfxFjbErbduqD2 A/hg== X-Gm-Message-State: AOAM531rDcwALuz2pRU6knHkjKzMgAJPPuNiUkj6ktXtrdNjewoMmHE+ OwwWv4b6YtcA20rJb2xgVgbEx+/hkvSpF1pxbWY= X-Received: by 2002:a2e:b008:: with SMTP id y8mr1632684ljk.233.1615538408685; Fri, 12 Mar 2021 00:40:08 -0800 (PST) MIME-Version: 1.0 References: <20210306082859.179541-1-yangjihong1@huawei.com> <53ff575f-1fcf-6650-76ad-a0304f6bdf15@huawei.com> <02146240-e532-1c52-0589-bfff3fbe5166@huawei.com> In-Reply-To: From: Namhyung Kim Date: Fri, 12 Mar 2021 17:39:57 +0900 Message-ID: Subject: Re: [PATCH] perf annotate: Fix sample events lost in stdio mode To: Yang Jihong Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Yao Jin , gustavoars@kernel.org, mliska@suse.cz, linux-kernel , zhangjinhao2@huawei.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 12, 2021 at 4:19 PM Yang Jihong wrote: > > > Hello, > On 2021/3/12 13:49, Namhyung Kim wrote: > > Hi, > > > > On Fri, Mar 12, 2021 at 12:24 PM Yang Jihong wrote: > >> > >> Hello, Namhyung > >> > >> On 2021/3/11 22:42, Namhyung Kim wrote: > >>> Hi, > >>> > >>> On Thu, Mar 11, 2021 at 5:48 PM Yang Jihong wrote: > >>>> > >>>> Hello, > >>>> > >>>> On 2021/3/6 16:28, Yang Jihong wrote: > >>>>> In hist__find_annotations function, since have a hist_entry per IP for the same > >>>>> symbol, we free notes->src to signal already processed this symbol in stdio mode; > >>>>> when annotate, entry will skipped if notes->src is NULL to avoid repeated output. > >>> > >>> I'm not sure it's still true that we have a hist_entry per IP. > >>> Afaik the default sort key is comm,dso,sym which means it should have a single > >>> hist_entry for each symbol. It seems like an old comment.. > >>> > >> Emm, yes, we have a hist_entry for per IP. > >> a member named "sym" in struct "hist_entry" points to symbol, > >> different IP may point to the same symbol. > > > > Are you sure about this? It seems like a bug then. > > > Yes, now each IP corresponds to a hist_entry :) > > Last week I found that some sample events were missing when perf > annotate in stdio mode, so I went through the annotate code carefully. > > The event handling process is as follows: > process_sample_event > evsel_add_sample > hists__add_entry > __hists__add_entry > hists__findnew_entry > hist_entry__new -> here allock new hist_entry Yeah, so this is for a symbol. > > hist_entry__inc_addr_samples > symbol__inc_addr_samples > symbol__hists > annotated_source__new -> here alloc annotate soruce > annotated_source__alloc_histograms -> here alloc histograms This should be for each IP (ideally it should be per instruction). > > By bugs, do you mean there's something wrong? No. I think we were saying about different things. :) > >>> diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c > >>> index a23ba6bb99b6..a91fe45bd69f 100644 > >>> --- a/tools/perf/builtin-annotate.c > >>> +++ b/tools/perf/builtin-annotate.c > >>> @@ -374,13 +374,6 @@ static void hists__find_annotations(struct hists *hists, > >>> } else { > >>> hist_entry__tty_annotate(he, evsel, ann); > >>> nd = rb_next(nd); > >>> - /* > >>> - * Since we have a hist_entry per IP for the same > >>> - * symbol, free he->ms.sym->src to signal we already > >>> - * processed this symbol. > >>> - */ > >>> - zfree(¬es->src->cycles_hist); > >>> - zfree(¬es->src); > >>> } > >>> } > >>> } > >>> > >> This solution may have the following problem: > >> For example, if two sample events are in two different processes but in > >> the same symbol, repeated output may occur. > >> Therefore, a flag is required to indicate whether the symbol has been > >> processed to avoid repeated output. > > > > Hmm.. ok. Yeah we don't care about the processes here. > > Then we should remove it from the sort key like below: > > > > @@ -624,6 +617,7 @@ int cmd_annotate(int argc, const char **argv) > > if (setup_sorting(annotate.session->evlist) < 0) > > usage_with_options(annotate_usage, options); > > } else { > > + sort_order = "dso,symbol"; > > if (setup_sorting(NULL) < 0) > > usage_with_options(annotate_usage, options); > > } > > > > > Are you referring to this solution? > --- a/tools/perf/builtin-annotate.c > +++ b/tools/perf/builtin-annotate.c > @@ -374,13 +374,6 @@ static void hists__find_annotations(struct hists > *hists, > } else { > hist_entry__tty_annotate(he, evsel, ann); > nd = rb_next(nd); > - /* > - * Since we have a hist_entry per IP for the same > - * symbol, free he->ms.sym->src to signal we already > - * processed this symbol. > - */ > - zfree(¬es->src->cycles_hist); > - zfree(¬es->src); > } > } > } > @@ -624,6 +617,7 @@ int cmd_annotate(int argc, const char **argv) > if (setup_sorting(annotate.session->evlist) < 0) > usage_with_options(annotate_usage, options); > } else { > + sort_order = "dso,symbol"; > if (setup_sorting(NULL) < 0) > usage_with_options(annotate_usage, options); > } > It seems to be a better solution without adding new member. > I just tested it and it works. > > If we decide to use this solution, I'll resubmit a v3 patch. I prefer changing the sort order (and removing the zfree and comments). Thanks, Namhyung