Received: by 2002:a05:7412:bbc7:b0:fc:a2b0:25d7 with SMTP id kh7csp645245rdb; Thu, 1 Feb 2024 22:15:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IHaPvZkcOdkyc6PP4Cy0L/J8bYAlG0wMsIq8O2bJOv77HbDfIIhQaX0MWlOKKa9iCI3P62V X-Received: by 2002:a05:6402:214e:b0:55f:eb7e:12c6 with SMTP id bq14-20020a056402214e00b0055feb7e12c6mr863060edb.0.1706854559105; Thu, 01 Feb 2024 22:15:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706854559; cv=pass; d=google.com; s=arc-20160816; b=pMMBFi4ZdTqkd7Zg9J7dhSWM6+bebtpmK8mcXVDx6BIZvkUm5T9dM314ql8BObVRRs WWZjSJkkfA44E8/sqEI+phTiZk5xfmkCWHvymoJRzQLi1pkw8eX4Ku+THfB+NbziHAIr ipAP2iCy1Tc+8jso4j5YT7oijkI3ncyQZG8zdTUlhz0U1yKiqPzCpyLpv45gpx3n/Xem YQfv91tT7KSXsDgdVdEi0iQ6iIQJghXztlBdVxarNKoPD30bkcU4Tlt//zwssNtKKihh c6NJTXIuvVdef80U0qO6eEqCV9ol/zDPJk9VWZ75qE2ZkBtq9Eexqwl4qZcUWHLhLQof NbSQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:from:subject:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:message-id:date:dkim-signature; bh=ToMQh9MBYwlmTbfVjgqllQD0+5gjP+gk6l8SI0jON1k=; fh=TiSoPE5Cl3hNphdvJKkj0NVVoG4zi56ujI7nfEHpixM=; b=o1JtEudOsWoVxw4F5pLKpaz/nUwVxdoG7cNl/gJunoHwiH0p7dqiGYUMVELhm08ZNN sSWF3wnDZbF9r5uoXq9FEZ1PEadPsxd0XkM8pj1mg1mOsrMwJsz82DwNd88ztfaNMvQY LC0CQcAi+S52nwTEmYpk33I1ILUrhI2w13OiTxFZ6CAF2PROecz5TDyVv7kD4hwgvRoM 4KR3FaOBbCciJIIbOQsLk8/l+kcRN3TdGKrqVzicoSV/mHtWZd0z37cie8o3O0MywLmp Bq9UJrE89v/HPdXd/HVP4pRD1A/97MCr++TPfYbG/Xhznck+bJ1x/moYX3DRWXYPv/hi d7IA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=LwF5HFzu; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-49239-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49239-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Forwarded-Encrypted: i=1; AJvYcCVFe0RuVJmoPpErJYdglj3GAsTOv+lzOstkP6vYd5V04KSO6iIQaaoYfLZEC9lAmVKe9eTX6Q40YpMI3I7zvFKwVo6medJo7++BaiOWzw== Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id i20-20020aa7dd14000000b0055ffd4f706esi54409edv.489.2024.02.01.22.15.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Feb 2024 22:15:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-49239-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=LwF5HFzu; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-49239-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49239-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id A55B41F251FA for ; Fri, 2 Feb 2024 06:15:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CFA571755F; Fri, 2 Feb 2024 06:15:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LwF5HFzu" Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56FE51754C for ; Fri, 2 Feb 2024 06:15:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706854549; cv=none; b=kw/7uUJ22UmPF7vez6Fz63TWv701SNURU37wyDtulZbHBtp63cy9eD5T83PVjEyZuwlAcXDPCUyPnA9aP62uzvxnJ+5eYzWrUehExnEByceO6thEsq12j7e8wA7kPL41YhszGnvlLg6WTor4vnJn3WOBbMKuIZODdsVvhAZ1N30= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706854549; c=relaxed/simple; bh=OCQzyEernErTiBbOinzinjqKGcvOczIkmmI+fHqcj4M=; h=Date:Message-Id:Mime-Version:Subject:From:To:Content-Type; b=fnuWHSPEF0M/ZCIEmWlAPfnPew26oeSWkb8y/JpFchLlUHXE55qrfV3sGdadKfjMjXH2pF28oK6jeArZX8vEZhpFrYqk24dHi6F3+M6FZpv2Ls92GCwk861pU+QC50b2QYOh8C8l1J5YUAjfnVC9yp7YZq8rrRPPdKFHm4c6fxU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LwF5HFzu; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6b267bf11so2151553276.2 for ; Thu, 01 Feb 2024 22:15:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706854546; x=1707459346; darn=vger.kernel.org; h=to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=ToMQh9MBYwlmTbfVjgqllQD0+5gjP+gk6l8SI0jON1k=; b=LwF5HFzuP1u+49UNK//0LwDWo3Kz+5UoDwQ5ByVF42OwYFyszfOtEBwYUuGZeMCKEb VkmHG1mbaFfSiKdTkFi9lrjuvDw+ghlk03FpYg5MS8ogGz+61FjiKJ8mdKoomHVq2QI3 XHTNQtUaq9XooDhfLRe7GKg7/TdHnjAsLUYuhAQzocZSdl4Lqciv7EpdZjDKNw+wgzbJ +hKSyVkYOFv2BwUPMrwIr0l1I9FlUrdQ+yBM/9Qh+7h/MJjopJZzrlUFNVdW8IO/9FuO xaVAXlwvo7simVD3xrohdQbBgsvdsWVcwhgSCRQDsYK33P6XAUARKs0S+PnzsspzWOJh HBuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706854546; x=1707459346; h=to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ToMQh9MBYwlmTbfVjgqllQD0+5gjP+gk6l8SI0jON1k=; b=XSW1NHRNY9ZY+vVhcT4l6sDgGi1ZAczNLSpkDYFfOHArX10WTUpQkovs3LQlvezWmg 9MUcDz9hXpOYbk4z8nlTWTvsOuKE0sw4QPrDm4YvK/AlSFLldXB0N+AHstb8YfbqZpYB pQbxNDgTGbZ+UgqPTa9d0At6bZ84nMLeKQ8Thveb20QIe8GdKmzp2qx+9CGhnACdEgou Uz2SI03elkUHw/ME4GPqQmUUIAWcXWRKeqzWD+B3oFjaqw6s93cHu/ue4DYj4an7yOC/ maW6c0K/+vHDIr02///IFtXvmjAb1R8SDOuJikroeTGZ+uqhnPUBHE/UyF/lOgF3EZQV 96aA== X-Gm-Message-State: AOJu0Yw4yqIh6ZpVzPwAbj2leiYRZFMjm6I9B/iV9AZRtSJD28sk+Swv Er8rs2+j4jxB8FCSlH9xSDEfahxZovdT8s3JwWu9WUYxEVF5v7OCSS7BgeWcnx+jQQvKjSHX6C9 yzNuUzw== X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:a85f:db1d:a66b:7f53]) (user=irogers job=sendgmr) by 2002:a05:6902:11ce:b0:dc6:b982:cfa2 with SMTP id n14-20020a05690211ce00b00dc6b982cfa2mr156881ybu.8.1706854546285; Thu, 01 Feb 2024 22:15:46 -0800 (PST) Date: Thu, 1 Feb 2024 22:15:07 -0800 Message-Id: <20240202061532.1939474-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.594.gd9cf4e227d-goog Subject: [PATCH v8 00/25] maps/threads/dsos memory improvements and fixes From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Nick Terrell , Kan Liang , Andi Kleen , Kajol Jain , Athira Rajeev , Huacai Chen , Masami Hiramatsu , "Steinar H. Gunderson" , Liam Howlett , Miguel Ojeda , Colin Ian King , Dmitrii Dolgov <9erthalion6@gmail.com>, Yang Jihong , Ming Wang , James Clark , K Prateek Nayak , Sean Christopherson , Leo Yan , Ravi Bangoria , German Gomez , Changbin Du , Paolo Bonzini , Li Dong , Sandipan Das , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Guilherme Amadio Content-Type: text/plain; charset="UTF-8" Modify the implementation of maps to not use an rbtree as the container for maps, instead use a sorted array. Improve locking and reference counting issues. Similar to maps separate out and reimplement threads to use a hashmap for lower memory consumption and faster look up. The fixes a regression in memory usage where reference count checking switched to using non-invasive tree nodes. Reduce its default size by 32 times and improve locking discipline. Also, fix regressions where tids had become unordered to make `perf report --tasks` and `perf trace --summary` output easier to read. Better encapsulate the dsos abstraction. Remove the linked list and rbtree used for faster iteration and log(n) lookup to a sorted array for similar performance but half the memory usage per dso. Improve reference counting and locking discipline, adding reference count checking to dso. v8: - in "perf maps: Switch from rbtree to lazily sorted array for addresses" use accessors and remove some duplicative invariant checks as requested by Namhyung. v7: - rebase to latest perf-tools-next where 22 patches were applied by Arnaldo. - resolve merge conflicts, in particular with fc044c53b99f ("perf annotate-data: Add dso->data_types tree") that required more dso accessor functions. v6 series is here: https://lore.kernel.org/lkml/20231207011722.1220634-1-irogers@google.com/ Ian Rogers (25): perf maps: Switch from rbtree to lazily sorted array for addresses perf maps: Get map before returning in maps__find perf maps: Get map before returning in maps__find_by_name perf maps: Get map before returning in maps__find_next_entry perf maps: Hide maps internals perf maps: Locking tidy up of nr_maps perf dso: Reorder variables to save space in struct dso perf report: Sort child tasks by tid perf trace: Ignore thread hashing in summary perf machine: Move fprintf to for_each loop and a callback perf threads: Move threads to its own files perf threads: Switch from rbtree to hashmap perf threads: Reduce table size from 256 to 8 perf dsos: Attempt to better abstract dsos internals perf dsos: Tidy reference counting and locking perf dsos: Add dsos__for_each_dso perf dso: Move dso functions out of dsos perf dsos: Switch more loops to dsos__for_each_dso perf dsos: Switch backing storage to array from rbtree/list perf dsos: Remove __dsos__addnew perf dsos: Remove __dsos__findnew_link_by_longname_id perf dsos: Switch hand code to bsearch perf dso: Add reference count checking and accessor functions perf dso: Reference counting related fixes perf dso: Use container_of to avoid a pointer in dso_data tools/perf/arch/x86/tests/dwarf-unwind.c | 1 + tools/perf/builtin-annotate.c | 8 +- tools/perf/builtin-buildid-cache.c | 2 +- tools/perf/builtin-buildid-list.c | 18 +- tools/perf/builtin-inject.c | 96 +- tools/perf/builtin-kallsyms.c | 2 +- tools/perf/builtin-mem.c | 4 +- tools/perf/builtin-record.c | 2 +- tools/perf/builtin-report.c | 209 +-- tools/perf/builtin-script.c | 8 +- tools/perf/builtin-top.c | 4 +- tools/perf/builtin-trace.c | 43 +- tools/perf/tests/code-reading.c | 8 +- tools/perf/tests/dso-data.c | 67 +- tools/perf/tests/hists_common.c | 6 +- tools/perf/tests/hists_cumulate.c | 4 +- tools/perf/tests/hists_output.c | 2 +- tools/perf/tests/maps.c | 7 +- tools/perf/tests/symbols.c | 2 +- tools/perf/tests/thread-maps-share.c | 8 +- tools/perf/tests/vmlinux-kallsyms.c | 16 +- tools/perf/ui/browsers/annotate.c | 6 +- tools/perf/ui/browsers/hists.c | 8 +- tools/perf/ui/browsers/map.c | 4 +- tools/perf/util/Build | 1 + tools/perf/util/annotate-data.c | 6 +- tools/perf/util/annotate.c | 45 +- tools/perf/util/auxtrace.c | 2 +- tools/perf/util/block-info.c | 2 +- tools/perf/util/bpf-event.c | 9 +- tools/perf/util/bpf_lock_contention.c | 8 +- tools/perf/util/build-id.c | 136 +- tools/perf/util/build-id.h | 2 - tools/perf/util/callchain.c | 4 +- tools/perf/util/data-convert-json.c | 2 +- tools/perf/util/db-export.c | 6 +- tools/perf/util/dlfilter.c | 12 +- tools/perf/util/dso.c | 469 +++--- tools/perf/util/dso.h | 549 ++++++- tools/perf/util/dsos.c | 529 ++++--- tools/perf/util/dsos.h | 40 +- tools/perf/util/event.c | 12 +- tools/perf/util/header.c | 8 +- tools/perf/util/hist.c | 4 +- tools/perf/util/intel-pt.c | 22 +- tools/perf/util/machine.c | 570 +++----- tools/perf/util/machine.h | 32 +- tools/perf/util/map.c | 73 +- tools/perf/util/maps.c | 1298 +++++++++++------ tools/perf/util/maps.h | 65 +- tools/perf/util/probe-event.c | 26 +- tools/perf/util/rb_resort.h | 5 - .../util/scripting-engines/trace-event-perl.c | 6 +- .../scripting-engines/trace-event-python.c | 21 +- tools/perf/util/session.c | 21 + tools/perf/util/session.h | 2 + tools/perf/util/sort.c | 19 +- tools/perf/util/srcline.c | 65 +- tools/perf/util/symbol-elf.c | 132 +- tools/perf/util/symbol.c | 217 +-- tools/perf/util/symbol_fprintf.c | 4 +- tools/perf/util/synthetic-events.c | 24 +- tools/perf/util/thread.c | 8 +- tools/perf/util/thread.h | 6 - tools/perf/util/threads.c | 186 +++ tools/perf/util/threads.h | 35 + tools/perf/util/unwind-libunwind-local.c | 20 +- tools/perf/util/unwind-libunwind.c | 9 +- tools/perf/util/vdso.c | 56 +- 69 files changed, 3143 insertions(+), 2160 deletions(-) create mode 100644 tools/perf/util/threads.c create mode 100644 tools/perf/util/threads.h -- 2.43.0.594.gd9cf4e227d-goog