From patchwork Wed Oct 2 03:20:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 13819277 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 DEB7FCF318F for ; Wed, 2 Oct 2024 03:21:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type:To:From:Subject :Mime-Version:Message-Id:Date:Reply-To:Cc:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=ZDGs1fNDiXDZH+tZf7c6rF0ubwmNF5v2taHWT742YpI=; b=mpArLt3+cC8QtacBfYZD+4WFea Tlz9S6/Cf1UgWqCxo2/R49/x0NRyp6RiAnu6PFqDb9o/ZEvIFJURMIKvzkrtCxGfxsF/AXjtGWNwy cF8XDVus5isTo6eqJG+zrmLfuL1YWGBokEDgBNIfJFRYsN/vIRxcSQ5VfhoHdxDPowHoVZf0EscsY eWrOZaorq+jaefFko6s6pT3tWaBvBCJ+p19RxHqHe4/VzwJHH4J8O/Uq7EPW2zQqobMfeCZcXnxuA 8cvLgRRLp9ug+qAD6jX/vDnmEinzvK7YeeH6coczwKNsZvulER1kt4qRw/ykv/sbkP3QuWee6c4bo 7uytrDJQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1svpvq-00000004gKn-35JV; Wed, 02 Oct 2024 03:21:42 +0000 Received: from mail-yw1-x114a.google.com ([2607:f8b0:4864:20::114a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1svpua-00000004g0k-0p5P for linux-arm-kernel@lists.infradead.org; Wed, 02 Oct 2024 03:20:26 +0000 Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-6ddbcc96984so93552197b3.2 for ; Tue, 01 Oct 2024 20:20:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1727839222; x=1728444022; darn=lists.infradead.org; h=to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=ZDGs1fNDiXDZH+tZf7c6rF0ubwmNF5v2taHWT742YpI=; b=wbDMlu2yrVx7dQjr3XtxqgdYcpfwXZqfGvkeXk0ceJ+LKynksJ54zCY9/YjPgEFQHG 4Pq9ujCKpvI0A9v2T4BKgBZIiOLAMIBAXhjX53ZscQ2zvgN0YxrR5LZLchebobhgumxx qwW2XmZ67jHndirZhW4rQLWLyYEDnfaiEgbGE+jrNyo/hreFzkjO+CsVDeUJqdf0bvGp Oqp0hdnrUli6x8sybuXqewDsfgilfUMszlY1b7A2tTnsE6P3mVl1yIY7JAkPGoAUo/fS nI4POqzeFGAZMe1m5vrctvYYNlKIwuOr/xJe1OYTCHmQvoID1iuzhZ54ZNowq4mQK7AL xB3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727839222; x=1728444022; h=to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ZDGs1fNDiXDZH+tZf7c6rF0ubwmNF5v2taHWT742YpI=; b=NBYa915Cu8NHS/KqpKSE2J1AhXYF8qm+mf3Mno0SoBJxAz6LKSjPBElagMvZEhMwvv M1MgI1YmXPMqTeIrxqi5mSY9fIOJPnVV6utjsjjGN0MzBGmR35MF7HVcdZnoonv88Ema EtAvBBozUS0niIHrV1yLBOuoqCRS4V7eZIcFCUUSPHv8+FjtWNV99szzVpiMWO/lcH4Z 3Kq9nL5z0mbwdYl9k32CwTDQmZZbY1vjhG3cKf+J5DBLO+t3TsM1ldaLCg0sNtIn+OZY 60yupYnCEXfHMsEyxhELB5wNIaDMmk3n33iw5HWWYuBN+RgqQ2h/0WkvjofHT9+NOXFT iDnQ== X-Forwarded-Encrypted: i=1; AJvYcCXEfQQ8tDiULgPPwI37inQ8fKqqSslbiJdiwaWwfJCJBYyQBCn06UK6yMTHcDiGaz5aiFMCkNrU+bX4bM/2P5si@lists.infradead.org X-Gm-Message-State: AOJu0YyrYmzBjhbwZyzqZLERaMX4AQT3GdGsAFz8EKVM+QWSbb//ZUjh TDCXfl3swC3X+vvygpI0FbNdFTxDoI/LjpKFAcsuwgLuD1XzpT8FFGoyobCY2BpYUH0REwCFYzr WVd5w/A== X-Google-Smtp-Source: AGHT+IH3DbT0p7Xh6/P8J/+/LYMvMAjnetdrFpdAAb3YJcYjCY7mKmq3zV723z1HE1Al+i4JU+lO91AJpKan X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:ffa1:6d00:2acb:535f]) (user=irogers job=sendgmr) by 2002:a05:690c:4988:b0:6dd:bc07:2850 with SMTP id 00721157ae682-6e2a3048277mr362907b3.6.1727839222136; Tue, 01 Oct 2024 20:20:22 -0700 (PDT) Date: Tue, 1 Oct 2024 20:20:03 -0700 Message-Id: <20241002032016.333748-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.46.1.824.gd892dcdcdd-goog Subject: [PATCH v3 00/13] Tool and hwmon PMUs From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Weilin Wang , Ravi Bangoria , Sandipan Das , Xu Yang , Benjamin Gray , Athira Jajeev , Howard Chu , Veronika Molnarova , "Dr. David Alan Gilbert" , Oliver Upton , Changbin Du , "Steinar H. Gunderson" , Ze Gao , Dominique Martinet , " =?utf-8?q?Cl=C3=A9ment_Le_?= =?utf-8?q?Goffic?= " , Sun Haiyong , Junhao He , Tiezhu Yang , Yicong Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241001_202024_285425_40995446 X-CRM114-Status: GOOD ( 17.87 ) 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 Rather than have fake and tool PMUs being special flags in an evsel, create special PMUs. This allows, for example, duration_time to also be tool/duration_time/. Once adding events to the tools PMU is just adding to an array, add events for nearly all the expr literals like num_cpus_online. Rather than create custom logic for finding and describing the tool events use json and add a notion of common json for the tool events. Following the convention of the tool PMU, create a hwmon PMU that exposes hwmon data for reading. For example, the following shows reading the CPU temperature and 2 fan speeds alongside the uncore frequency: ``` $ perf stat -e temp_cpu,fan1,hwmon_thinkpad/fan2/,tool/num_cpus_online/ -M UNCORE_FREQ -I 1000 1.001153138 52.00 'C temp_cpu 1.001153138 2,588 rpm fan1 1.001153138 2,482 rpm hwmon_thinkpad/fan2/ 1.001153138 8 tool/num_cpus_online/ 1.001153138 1,077,101,397 UNC_CLOCK.SOCKET # 1.08 UNCORE_FREQ 1.001153138 1,012,773,595 duration_time ... ``` Additional data on the hwmon events is in perf list: ``` $ perf list ... hwmon: ... temp_core_0 OR temp2 [Temperature in unit coretemp named Core 0. crit=100'C,max=100'C crit_alarm=0'C. Unit: hwmon_coretemp] ... ``` v3: Rebase, add Namhyung's acked-by to patches 1 to 10. v2: Address Namhyung's review feedback. Rebase dropping 4 patches applied by Arnaldo, fix build breakage reported by Arnaldo. Ian Rogers (13): perf pmu: Simplify an asprintf error message perf pmu: Allow hardcoded terms to be applied to attributes perf parse-events: Expose/rename config_term_name perf tool_pmu: Factor tool events into their own PMU perf tool_pmu: Rename enum perf_tool_event to tool_pmu_event perf tool_pmu: Rename perf_tool_event__* to tool_pmu__* perf tool_pmu: Move expr literals to tool_pmu perf jevents: Add tool event json under a common architecture perf tool_pmu: Switch to standard pmu functions and json descriptions perf tests: Add tool PMU test perf hwmon_pmu: Add a tool PMU exposing events from hwmon in sysfs perf test: Add hwmon "PMU" test perf docs: Document tool and hwmon events tools/perf/Documentation/perf-list.txt | 15 + tools/perf/arch/arm64/util/pmu.c | 5 +- tools/perf/arch/x86/util/intel-pt.c | 3 +- tools/perf/arch/x86/util/tsc.c | 18 +- tools/perf/builtin-list.c | 13 +- tools/perf/builtin-stat.c | 7 +- .../pmu-events/arch/common/common/tool.json | 74 ++ tools/perf/pmu-events/empty-pmu-events.c | 208 +++-- tools/perf/pmu-events/jevents.py | 16 +- tools/perf/tests/Build | 2 + tools/perf/tests/builtin-test.c | 2 + tools/perf/tests/hwmon_pmu.c | 243 ++++++ tools/perf/tests/pmu.c | 3 +- tools/perf/tests/tests.h | 2 + tools/perf/tests/tool_pmu.c | 111 +++ tools/perf/util/Build | 2 + tools/perf/util/evsel.c | 287 +----- tools/perf/util/evsel.h | 28 +- tools/perf/util/expr.c | 93 +- tools/perf/util/hwmon_pmu.c | 818 ++++++++++++++++++ tools/perf/util/hwmon_pmu.h | 154 ++++ tools/perf/util/metricgroup.c | 35 +- tools/perf/util/parse-events.c | 63 +- tools/perf/util/parse-events.h | 5 +- tools/perf/util/parse-events.l | 11 - tools/perf/util/parse-events.y | 16 - tools/perf/util/pmu.c | 104 ++- tools/perf/util/pmu.h | 9 +- tools/perf/util/pmus.c | 16 + tools/perf/util/pmus.h | 3 + tools/perf/util/print-events.c | 36 +- tools/perf/util/print-events.h | 1 - tools/perf/util/stat-display.c | 14 +- tools/perf/util/stat-shadow.c | 22 +- tools/perf/util/tool_pmu.c | 506 +++++++++++ tools/perf/util/tool_pmu.h | 56 ++ tools/perf/util/tsc.h | 2 +- 37 files changed, 2374 insertions(+), 629 deletions(-) create mode 100644 tools/perf/pmu-events/arch/common/common/tool.json create mode 100644 tools/perf/tests/hwmon_pmu.c create mode 100644 tools/perf/tests/tool_pmu.c create mode 100644 tools/perf/util/hwmon_pmu.c create mode 100644 tools/perf/util/hwmon_pmu.h create mode 100644 tools/perf/util/tool_pmu.c create mode 100644 tools/perf/util/tool_pmu.h