Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp7232408ybp; Wed, 16 Oct 2019 05:53:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqwOEEOItMhOxDFyJZ5MGuWlhmRGRzKZoHLNG+Wl+aljWdjF/hxOvRaX06Iz/hD6Ar7GkNHx X-Received: by 2002:a17:906:5502:: with SMTP id r2mr40760832ejp.3.1571230400033; Wed, 16 Oct 2019 05:53:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571230400; cv=none; d=google.com; s=arc-20160816; b=iaK+8BO27cMLB/Pr4iggScfTkVGjHZZc9zus8koqYFQEzST/ffl1pqpzXvSDQd6xOR losjZLecz8t3p6a5lIskquNkYBLixQ4BD1yBcOGbO9RERYHeb9/0BWE2RPsID6XJAcDO SErRsKs6m2QgW/YXiP+XkWTVmRVX0jsk/GtmJlragFtlcmKsVShkbcR/N/JHHzIfNR6P m1db3WbqRx+QCEMRNqRBjNrBV12VzfuVagPh1U/jHDfazIPwiXahnI9qWEofKXcLZmwK uUE4htwibhTKbWgZCscNd2XRX6C3lUh6KdWnEPAc0rlRvFc6P0SGNjv4fw4ZzBC2QTyb hgtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=sww/eNSJFavjZfGewmIlIKk9N/d0P0DFmvqNai2dcTU=; b=kIklaAUwujR7L9UU0sCuBZslmdLxBGbtrCgB8HMuBAPK1hhbN3hSqB/FJ44/EaNIeb 6udreoGSJXz2dk4QeFWbms4JaSbyeC2j2D4GSrVcaREJDxpO2J2xivXFuViqRKzsaoVr MfDnukP94/cAXmn5kaaX9vk2+EaQ6YlVp4Bcsj/dXvJcZNTYFzW8O+ZzvaoKjUQ68jEW bLHHc0vgQtaSwTNLv9T3Mcf9FIsdmk4clBYif/+VhWtwGW10D5ybm31kdENH9tyl5GXk tWrdGl9flmB1yd6b3TdOZXEWct3FUg4PwfZou8ow47meUmm/Huv9TB3qlfjyOBfvInHl 7OlA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d22si17163686ede.131.2019.10.16.05.52.57; Wed, 16 Oct 2019 05:53:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391533AbfJPIWa (ORCPT + 99 others); Wed, 16 Oct 2019 04:22:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56096 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391502AbfJPIWa (ORCPT ); Wed, 16 Oct 2019 04:22:30 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5CC1F81F13; Wed, 16 Oct 2019 08:22:29 +0000 (UTC) Received: from krava.brq.redhat.com (unknown [10.43.17.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id D07E91001B08; Wed, 16 Oct 2019 08:22:26 +0000 (UTC) From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , Ingo Molnar , Namhyung Kim , Alexander Shishkin , Peter Zijlstra , Michael Petlan , Andi Kleen , Stephane Eranian , Jin Yao , Alexey Budankov Subject: [PATCHv2 0/2] perf tools: Share struct map after clone Date: Wed, 16 Oct 2019 10:22:24 +0200 Message-Id: <20191016082226.10325-1-jolsa@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 16 Oct 2019 08:22:29 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org hi, Andi reported that maps cloning is eating lot of memory and it's probably unnecessary, because they keep the same data. This 'maps sharing' seems to save lot of heap for reports with many forks/cloned mmaps (over 60% in example below). Profile kernel build: $ perf record make -j 40 Get heap profile (tools/perf directory): $ $ make TCMALLOC=1 $ HEAPPROFILE=/tmp/heapprof ./perf report -i perf.data --stdio > out $ pprof ./perf /tmp/heapprof.000* Before: (pprof) top Total: 2335.5 MB 1735.1 74.3% 74.3% 1735.1 74.3% memdup 402.0 17.2% 91.5% 402.0 17.2% zalloc 140.2 6.0% 97.5% 145.8 6.2% map__new 33.6 1.4% 98.9% 33.6 1.4% symbol__new 12.4 0.5% 99.5% 12.4 0.5% alloc_event 6.2 0.3% 99.7% 6.2 0.3% nsinfo__new 5.5 0.2% 100.0% 5.5 0.2% nsinfo__copy 0.3 0.0% 100.0% 0.3 0.0% dso__new 0.1 0.0% 100.0% 0.1 0.0% do_read_string 0.0 0.0% 100.0% 0.0 0.0% __GI__IO_file_doallocate After: (pprof) top Total: 784.5 MB 385.8 49.2% 49.2% 385.8 49.2% memdup 285.8 36.4% 85.6% 285.8 36.4% zalloc 80.4 10.3% 95.9% 83.7 10.7% map__new 19.1 2.4% 98.3% 19.1 2.4% symbol__new 6.2 0.8% 99.1% 6.2 0.8% alloc_event 3.6 0.5% 99.6% 3.6 0.5% nsinfo__new 3.2 0.4% 100.0% 3.2 0.4% nsinfo__copy 0.2 0.0% 100.0% 0.2 0.0% dso__new 0.0 0.0% 100.0% 0.0 0.0% do_read_string 0.0 0.0% 100.0% 0.0 0.0% elf_fill v2 changes: - rebased to Arnaldo's perf/core - patch 1 already taken Also available in here: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git perf/map_shared thanks, jirka --- Jiri Olsa (2): perf tools: Separate shareable part of 'struct map' into 'struct map_shared' perf tools: Make 'struct map_shared' truly shared tools/perf/arch/arm/tests/dwarf-unwind.c | 2 +- tools/perf/arch/arm64/tests/dwarf-unwind.c | 2 +- tools/perf/arch/powerpc/tests/dwarf-unwind.c | 2 +- tools/perf/arch/powerpc/util/skip-callchain-idx.c | 4 +-- tools/perf/arch/powerpc/util/sym-handling.c | 4 +-- tools/perf/arch/s390/annotate/instructions.c | 2 +- tools/perf/arch/x86/tests/dwarf-unwind.c | 2 +- tools/perf/arch/x86/util/event.c | 6 ++-- tools/perf/builtin-annotate.c | 8 +++--- tools/perf/builtin-inject.c | 10 ++++--- tools/perf/builtin-kallsyms.c | 7 +++-- tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-mem.c | 6 ++-- tools/perf/builtin-report.c | 19 +++++++------ tools/perf/builtin-script.c | 16 +++++------ tools/perf/builtin-top.c | 15 +++++----- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/code-reading.c | 34 ++++++++++++----------- tools/perf/tests/hists_common.c | 4 +-- tools/perf/tests/hists_cumulate.c | 4 +-- tools/perf/tests/hists_filter.c | 4 +-- tools/perf/tests/hists_output.c | 2 +- tools/perf/tests/map_groups.c | 22 +++++++-------- tools/perf/tests/mmap-thread-lookup.c | 2 +- tools/perf/tests/vmlinux-kallsyms.c | 36 ++++++++++++------------ tools/perf/ui/browsers/annotate.c | 4 +-- tools/perf/ui/browsers/hists.c | 10 +++---- tools/perf/ui/browsers/map.c | 4 +-- tools/perf/ui/gtk/annotate.c | 2 +- tools/perf/util/annotate.c | 34 +++++++++++------------ tools/perf/util/auxtrace.c | 2 +- tools/perf/util/bpf-event.c | 8 +++--- tools/perf/util/build-id.c | 2 +- tools/perf/util/callchain.c | 6 ++-- tools/perf/util/db-export.c | 4 +-- tools/perf/util/dso.c | 2 +- tools/perf/util/event.c | 6 ++-- tools/perf/util/evsel_fprintf.c | 2 +- tools/perf/util/hist.c | 10 +++---- tools/perf/util/intel-pt.c | 42 ++++++++++++++++------------ tools/perf/util/machine.c | 76 +++++++++++++++++++++++++------------------------- tools/perf/util/map.c | 226 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------- tools/perf/util/map.h | 32 +++++++++++++-------- tools/perf/util/probe-event.c | 32 ++++++++++----------- tools/perf/util/scripting-engines/trace-event-perl.c | 8 +++--- tools/perf/util/scripting-engines/trace-event-python.c | 12 ++++---- tools/perf/util/sort.c | 58 ++++++++++++++++++++------------------ tools/perf/util/symbol-elf.c | 28 +++++++++---------- tools/perf/util/symbol.c | 80 ++++++++++++++++++++++++++--------------------------- tools/perf/util/symbol_fprintf.c | 2 +- tools/perf/util/synthetic-events.c | 14 +++++----- tools/perf/util/thread.c | 14 +++++----- tools/perf/util/unwind-libdw.c | 16 +++++++---- tools/perf/util/unwind-libunwind-local.c | 37 +++++++++++++------------ tools/perf/util/unwind-libunwind.c | 4 +-- tools/perf/util/vdso.c | 2 +- 56 files changed, 540 insertions(+), 456 deletions(-)