From patchwork Wed Jan 5 06:13:03 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 12704063 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E8D93C4332F for ; Wed, 5 Jan 2022 06:15:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:Mime-Version: Message-Id:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=LqV2hSTdKGPqmBlTbzifMlCVET1p/iX4b5t8lOIjCEk=; b=Ag4 dlsqFy+x5MntAi6oQbcYJSsAws9I6lulS5nHbcrjgNJWHiYg6MpN+n7Yi9EyEGrpI4hMIwQsphNTY coWJZVLmsURhhbJ63StRdasVtEUVYG8cyS0Y2IHGtBqYboYpXL67ypwreKB3QOf2DJiywca33bB8u EichS+ehYFcDB+IFGLlHwd67dlm14012WUOR7A6W1nAXoVDT38g0Lnl7G0CfpqaJiutEeBRyywzIs Ub0UWLnW7aiUzNRsJDanNnTDdmFR3IXae94G5wlC4VB/8F5ZIGt1+VHvdwLmuyueFZF8chTcbcDzT 2RKIp9MUvU2Lr3lQjwcynW8RAtaUDnw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4zYg-00DfbG-DX; Wed, 05 Jan 2022 06:14:02 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4zYc-00DfZr-Q1 for linux-arm-kernel@lists.infradead.org; Wed, 05 Jan 2022 06:14:00 +0000 Received: by mail-yb1-xb49.google.com with SMTP id z188-20020a2565c5000000b0060be1f32877so53253455ybb.7 for ; Tue, 04 Jan 2022 22:13:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=Vi4rVjVmeQxEHb6oKpmmCJAi3Ubdt1NQwnvisyi/dEc=; b=tNfeQNWtkevwX71kuVSQEyyaNn8skLyhOhW50TH0hP1NC/qd/EGMGomdHCGhqRJquj tF+YWfUz6DosnRjmDp7p8pVpN33/Jlnw8TM0/upQlCi9/Nj8a57cYg/RGwrwX24kAJBb qRHvPV7CR8x1F+aBHYGlcj46bV/k7PxgTRjfZrVWSoHyApMPO/JQ/cw9x5piOQemn9b0 KRZgFm0RpZ8bNyiFwmDm1pB1u6G/E8udOkIjCswOj5BaOXh3811U0Jqi9eJUoYoohYMg wsyy67BcRdO5A0Xq5LDyzMv44JgjDz5WWxebaKutAsuaOnao638tlnkhOThbtFOwD+PY TMmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=Vi4rVjVmeQxEHb6oKpmmCJAi3Ubdt1NQwnvisyi/dEc=; b=CIb2hd4YqulR4SsmswnZT7cQp/d7fryK6Bm4wOlpsYINuxx17FzX7WAwXaIW3fZ0dT tufRNGbk0M7qhF2fs+5iQobjOsm16Yd9GDGPlrp3UIjsZXJ2qBvI1LE7FfyGF3UQwFIe jRtzulMkpOsugPBNIoUixBCVxa0pzAI9VG3rPSqGA74reO0LHEku2g4rLJMyel3QLEvs Y9C0wIBhoKma5C8C6rWBvYNWpI7WV9dDChi//PKcCYNkbpmJuIm5aJdieBj1eNNngI04 Q91XscrZbOiAfl8G07oipiuWwu9jGRM+WDDqdmjE4+H+PXtcjTwbrub4hjEMHQguVKs0 SwSg== X-Gm-Message-State: AOAM530I7bq2ayFOrkBgbQ5zLA1qjjhMaBUCseYL/bdGpGXWsKN324nT a27L79gU+g2o/+Wt2R0/fXjnbI5CGNfv X-Google-Smtp-Source: ABdhPJwKqQuWxGX39aFT4XFie9kXMFjwX68/GkJ7ouMH+edh5dFBSa2WmE83CrSIxVIH5IOhO8ha3fQURhae X-Received: from irogers.svl.corp.google.com ([2620:15c:2cd:202:3af1:caef:2937:5d2b]) (user=irogers job=sendgmr) by 2002:a5b:590:: with SMTP id l16mr62312607ybp.629.1641363237009; Tue, 04 Jan 2022 22:13:57 -0800 (PST) Date: Tue, 4 Jan 2022 22:13:03 -0800 Message-Id: <20220105061351.120843-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.34.1.448.ga2b2bfdf31-goog Subject: [PATCH v4 00/48] Refactor perf cpumap From: Ian Rogers To: Andi Kleen , Jiri Olsa , Namhyung Kim , John Garry , Kajol Jain , "Paul A . Clarke" , Arnaldo Carvalho de Melo , Riccardo Mancini , Kan Liang , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Vineet Singh , James Clark , Mathieu Poirier , Suzuki K Poulose , Mike Leach , Leo Yan , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, zhengjun.xing@intel.com Cc: eranian@google.com, Ian Rogers X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220104_221358_895269_C9CDE692 X-CRM114-Status: GOOD ( 17.31 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Perf cpu map has various functions where a cpumap and index are passed in order to load the cpu. A problem with this is that the wrong index may be passed for the cpumap, causing problems like aggregation on the wrong CPU: https://lore.kernel.org/lkml/20211204023409.969668-1-irogers@google.com/ This patch set refactors the cpu map API, reducing it and explicitly passing the cpu (rather than the pair) to functions that need it. Comments are added at the same time. Changes modify the same file/function more than once as refactoring and fixes are broken apart for the sake of bisection. v2. Incorproates fixes suggested Jiri Olsa, rewrites the evlist CPU iterator in part in a way suggested by Riccardo Mancini. The new fixes start at patch 23. The final change was suggested by John Garry to make the CPUs have their own struct wrapper. v3. Incorporates fixes suggested by Namhyung Kim. v4. Rebases and incorporates fixes suggested by Jiri Olsa. Ian Rogers (48): libperf: Add comments to perf_cpu_map. perf stat: Add aggr creators that are passed a cpu. perf stat: Correct aggregation CPU map perf stat: Switch aggregation to use for_each loop perf stat: Switch to cpu version of cpu_map__get perf cpumap: Switch cpu_map__build_map to cpu function perf cpumap: Remove map+index get_socket perf cpumap: Remove map+index get_die perf cpumap: Remove map+index get_core perf cpumap: Remove map+index get_node perf cpumap: Add comments to aggr_cpu_id perf cpumap: Remove unused cpu_map__socket perf cpumap: Simplify equal function name. perf cpumap: Rename empty functions. perf cpumap: Document cpu__get_node and remove redundant function perf cpumap: Remove map from function names that don't use a map. perf cpumap: Remove cpu_map__cpu, use libperf function. perf cpumap: Refactor cpu_map__build_map perf cpumap: Rename cpu_map__get_X_aggr_by_cpu functions perf cpumap: Move 'has' function to libperf perf cpumap: Add some comments to cpu_aggr_map perf cpumap: Trim the cpu_aggr_map perf stat: Fix memory leak in check_per_pkg perf cpumap: Add CPU to aggr_cpu_id perf stat-display: Avoid use of core for CPU. perf evsel: Derive CPUs and threads in alloc_counts libperf: Switch cpu to more accurate cpu_map_idx libperf: Use cpu not index for evsel mmap perf counts: Switch name cpu to cpu_map_idx perf stat: Rename aggr_data cpu to imply it's an index perf stat: Use perf_cpu_map__for_each_cpu perf script: Use for each cpu to aid readability libperf: Allow NULL in perf_cpu_map__idx perf evlist: Refactor evlist__for_each_cpu. perf evsel: Pass cpu not cpu map index to synthesize perf stat: Correct variable name for read counter perf evsel: Rename CPU around get_group_fd perf evsel: Reduce scope of evsel__ignore_missing_thread perf evsel: Rename variable cpu to index perf test: Use perf_cpu_map__for_each_cpu perf stat: Correct check_per_pkg cpu perf stat: Swap variable name cpu to index libperf: Sync evsel documentation perf bpf: Rename cpu to cpu_map_idx perf c2c: Use more intention revealing iterator perf script: Fix flipped index and cpu perf stat: Correct first_shadow_cpu to return index perf cpumap: Give CPUs their own type. tools/lib/perf/Documentation/libperf.txt | 11 +- tools/lib/perf/cpumap.c | 131 +++-- tools/lib/perf/evlist.c | 4 +- tools/lib/perf/evsel.c | 92 ++-- tools/lib/perf/include/internal/cpumap.h | 18 +- tools/lib/perf/include/internal/evlist.h | 3 +- tools/lib/perf/include/internal/evsel.h | 4 +- tools/lib/perf/include/internal/mmap.h | 5 +- tools/lib/perf/include/perf/cpumap.h | 8 +- tools/lib/perf/include/perf/evsel.h | 10 +- tools/lib/perf/libperf.map | 1 + tools/lib/perf/mmap.c | 2 +- tools/perf/arch/arm/util/cs-etm.c | 16 +- tools/perf/bench/epoll-ctl.c | 2 +- tools/perf/bench/epoll-wait.c | 2 +- tools/perf/bench/futex-hash.c | 2 +- tools/perf/bench/futex-lock-pi.c | 2 +- tools/perf/bench/futex-requeue.c | 2 +- tools/perf/bench/futex-wake-parallel.c | 2 +- tools/perf/bench/futex-wake.c | 2 +- tools/perf/builtin-c2c.c | 15 +- tools/perf/builtin-ftrace.c | 2 +- tools/perf/builtin-kmem.c | 2 +- tools/perf/builtin-record.c | 2 +- tools/perf/builtin-sched.c | 71 +-- tools/perf/builtin-script.c | 10 +- tools/perf/builtin-stat.c | 516 +++++++++--------- tools/perf/tests/attr.c | 6 +- tools/perf/tests/bitmap.c | 2 +- tools/perf/tests/cpumap.c | 6 +- tools/perf/tests/event_update.c | 6 +- tools/perf/tests/mem2node.c | 2 +- tools/perf/tests/mmap-basic.c | 4 +- tools/perf/tests/openat-syscall-all-cpus.c | 39 +- tools/perf/tests/stat.c | 3 +- tools/perf/tests/topology.c | 43 +- tools/perf/util/affinity.c | 2 +- tools/perf/util/auxtrace.c | 12 +- tools/perf/util/auxtrace.h | 5 +- tools/perf/util/bpf_counter.c | 16 +- tools/perf/util/bpf_counter.h | 4 +- tools/perf/util/counts.c | 8 +- tools/perf/util/counts.h | 14 +- tools/perf/util/cpumap.c | 253 ++++----- tools/perf/util/cpumap.h | 116 ++-- tools/perf/util/cputopo.c | 6 +- tools/perf/util/env.c | 29 +- tools/perf/util/env.h | 3 +- tools/perf/util/evlist.c | 148 ++--- tools/perf/util/evlist.h | 50 +- tools/perf/util/evsel.c | 143 ++--- tools/perf/util/evsel.h | 27 +- tools/perf/util/expr.c | 2 +- tools/perf/util/header.c | 6 +- tools/perf/util/mmap.c | 19 +- tools/perf/util/mmap.h | 3 +- tools/perf/util/perf_api_probe.c | 15 +- tools/perf/util/python.c | 4 +- tools/perf/util/record.c | 11 +- .../scripting-engines/trace-event-python.c | 6 +- tools/perf/util/session.c | 10 +- tools/perf/util/stat-display.c | 138 ++--- tools/perf/util/stat-shadow.c | 308 +++++------ tools/perf/util/stat.c | 47 +- tools/perf/util/stat.h | 9 +- tools/perf/util/svghelper.c | 6 +- tools/perf/util/synthetic-events.c | 12 +- tools/perf/util/synthetic-events.h | 3 +- tools/perf/util/util.h | 5 +- 69 files changed, 1333 insertions(+), 1155 deletions(-)