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=-10.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 D6BCFC63798 for ; Tue, 17 Nov 2020 12:47:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 697182222E for ; Tue, 17 Nov 2020 12:47:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="QPXygCEQ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728316AbgKQMq4 (ORCPT ); Tue, 17 Nov 2020 07:46:56 -0500 Received: from mail.kernel.org ([198.145.29.99]:49830 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726310AbgKQMqz (ORCPT ); Tue, 17 Nov 2020 07:46:55 -0500 Received: from quaco.ghostprotocols.net (unknown [179.97.37.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5CD462222A; Tue, 17 Nov 2020 12:46:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1605617214; bh=w2JRgA1Ne8LerPp1nVhszfic7yCVQyHfDY/SgatFze8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=QPXygCEQ7JuNIx+1R6rEVW2osfuZBDkuWBAsgBTkKvy62cviNGS1CnRur1YkeQYQ1 LxQc9BUQHiqeM9HOVm1rCv4rsqqDTio6UhZz3ZtHF3PRErpLjRtClv21VUF0OytTyK d3e3H4ZP8QAmgMsN35GK+WLlWwVcHHXIQ7/iRmzg= Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 3AFB140E29; Tue, 17 Nov 2020 09:46:52 -0300 (-03) Date: Tue, 17 Nov 2020 09:46:52 -0300 From: Arnaldo Carvalho de Melo To: Jiri Olsa Cc: lkml , Peter Zijlstra , Ingo Molnar , Mark Rutland , Namhyung Kim , Alexander Shishkin , Michael Petlan , Song Liu , Ian Rogers , Stephane Eranian , Alexey Budankov , Andi Kleen , Adrian Hunter Subject: Re: [PATCH 14/24] perf tools: Allow mmap2 event to synthesize modules Message-ID: <20201117124652.GP614220@kernel.org> References: <20201117110053.1303113-1-jolsa@kernel.org> <20201117110053.1303113-15-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201117110053.1303113-15-jolsa@kernel.org> X-Url: http://acmel.wordpress.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Tue, Nov 17, 2020 at 12:00:43PM +0100, Jiri Olsa escreveu: > Allow mmap2 event to synthesize kernel modules, > so we can synthesize module's build id data in > following changes. > > It's enabled by new symbol_conf.buildid_mmap2 > bool, which will be switched in following > changes. Ditto as for the kernel mmap event, don't we do this probing before generating the synthetic events? If not perhaps we should, to avoid synthesizing things and then failing on creating the events? If we do it that way, we can switch from symbol_conf.buildid_mmap2 to !perf_missing_features.mmap2. - Arnaldo > Signed-off-by: Jiri Olsa > --- > tools/perf/util/synthetic-events.c | 49 +++++++++++++++++++----------- > 1 file changed, 32 insertions(+), 17 deletions(-) > > diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c > index 872df6d6dbef..a18ae502d765 100644 > --- a/tools/perf/util/synthetic-events.c > +++ b/tools/perf/util/synthetic-events.c > @@ -593,16 +593,17 @@ int perf_event__synthesize_modules(struct perf_tool *tool, perf_event__handler_t > int rc = 0; > struct map *pos; > struct maps *maps = machine__kernel_maps(machine); > - union perf_event *event = zalloc((sizeof(event->mmap) + > - machine->id_hdr_size)); > + union perf_event *event; > + size_t size = symbol_conf.buildid_mmap2 ? > + sizeof(event->mmap2) : sizeof(event->mmap); > + > + event = zalloc(size + machine->id_hdr_size); > if (event == NULL) { > pr_debug("Not enough memory synthesizing mmap event " > "for kernel modules\n"); > return -1; > } > > - event->header.type = PERF_RECORD_MMAP; > - > /* > * kernel uses 0 for user space maps, see kernel/perf_event.c > * __perf_event_mmap > @@ -613,23 +614,37 @@ int perf_event__synthesize_modules(struct perf_tool *tool, perf_event__handler_t > event->header.misc = PERF_RECORD_MISC_GUEST_KERNEL; > > maps__for_each_entry(maps, pos) { > - size_t size; > - > if (!__map__is_kmodule(pos)) > continue; > > - size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); > - event->mmap.header.type = PERF_RECORD_MMAP; > - event->mmap.header.size = (sizeof(event->mmap) - > - (sizeof(event->mmap.filename) - size)); > - memset(event->mmap.filename + size, 0, machine->id_hdr_size); > - event->mmap.header.size += machine->id_hdr_size; > - event->mmap.start = pos->start; > - event->mmap.len = pos->end - pos->start; > - event->mmap.pid = machine->pid; > + if (symbol_conf.buildid_mmap2) { > + size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); > + event->mmap2.header.type = PERF_RECORD_MMAP2; > + event->mmap2.header.size = (sizeof(event->mmap2) - > + (sizeof(event->mmap2.filename) - size)); > + memset(event->mmap2.filename + size, 0, machine->id_hdr_size); > + event->mmap2.header.size += machine->id_hdr_size; > + event->mmap2.start = pos->start; > + event->mmap2.len = pos->end - pos->start; > + event->mmap2.pid = machine->pid; > + > + memcpy(event->mmap2.filename, pos->dso->long_name, > + pos->dso->long_name_len + 1); > + } else { > + size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); > + event->mmap.header.type = PERF_RECORD_MMAP; > + event->mmap.header.size = (sizeof(event->mmap) - > + (sizeof(event->mmap.filename) - size)); > + memset(event->mmap.filename + size, 0, machine->id_hdr_size); > + event->mmap.header.size += machine->id_hdr_size; > + event->mmap.start = pos->start; > + event->mmap.len = pos->end - pos->start; > + event->mmap.pid = machine->pid; > + > + memcpy(event->mmap.filename, pos->dso->long_name, > + pos->dso->long_name_len + 1); > + } > > - memcpy(event->mmap.filename, pos->dso->long_name, > - pos->dso->long_name_len + 1); > if (perf_tool__process_synth_event(tool, event, machine, process) != 0) { > rc = -1; > break; > -- > 2.26.2 > -- - Arnaldo