From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932302AbeASQLW (ORCPT ); Fri, 19 Jan 2018 11:11:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:46556 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756058AbeASQLK (ORCPT ); Fri, 19 Jan 2018 11:11:10 -0500 From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , Ingo Molnar , Namhyung Kim , David Ahern , Andi Kleen , Alexander Shishkin , Peter Zijlstra Subject: [PATCH 2/2] perf tools: Skip read of kernel maps once it failed Date: Fri, 19 Jan 2018 17:11:03 +0100 Message-Id: <20180119161103.15035-3-jolsa@kernel.org> In-Reply-To: <20180119161103.15035-1-jolsa@kernel.org> References: <20180119161103.15035-1-jolsa@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Current perf report is real slow on newer kernels, with following commit: c0f3ea158939 ("stop using '%pK' for /proc/kallsyms pointer values") which prevent pointers in /proc/kallsyms, in case kernel.perf_event_paranoid=2. That makes perf to fail in finding kernel map details, and keep parsing it again for every kernel sample. Adding and setting a new machine::vmlinux_maps_failed flag after first failed parsing attempt and using it to prevent new pointless parsing. TODO We might want to add some perf report warning about that. Link: http://lkml.kernel.org/n/tip-ld2kp994rhz6i341igt8f98y@git.kernel.org Signed-off-by: Jiri Olsa --- tools/perf/util/machine.c | 6 ++++-- tools/perf/util/machine.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index b05a67464c03..5e9648817077 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -1222,13 +1222,15 @@ int machine__create_kernel_maps(struct machine *machine) u64 addr = 0; int ret; - if (kernel == NULL) + if (kernel == NULL || machine->vmlinux_maps_failed) return -1; ret = __machine__create_kernel_maps(machine, kernel); dso__put(kernel); - if (ret < 0) + if (ret < 0) { + machine->vmlinux_maps_failed = true; return -1; + } if (symbol_conf.use_modules && machine__create_modules(machine) < 0) { if (machine__is_host(machine)) diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index 5ce860b64c74..edcb007333cb 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -42,6 +42,7 @@ struct machine { u16 id_hdr_size; bool comm_exec; bool kptr_restrict_warned; + bool vmlinux_maps_failed; char *root_dir; struct threads threads[THREADS__TABLE_SIZE]; struct vdso_info *vdso_info; -- 2.13.6