From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.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 5F2F827E05E for ; Tue, 9 Jun 2026 07:03:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780988637; cv=none; b=HHeRTOpVM8+GLljei2YvOQOS/k3NYOOpcM9I3oOLFPPqRP3OgtDRu2fkJLGr/U1tpynYbo6zh98gOxRkkvE5pQ0stFnNNJqKXAtkee5kM3CRzZk/1UzJzhhukZu8A799rjY7urMREwZqSEI02cCkZ31vAmuDaL4LjNopV5UYUAw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780988637; c=relaxed/simple; bh=ObQm8q+T2anbqJFG+T/iyqprTss7RwL4mruS3DRf95g=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=NOoI9zbNRTFYr2elz3Z21c0sBplCn2tDwdJ7czOFy3zx1OI8w8kKMrW6H9IgbvAXCaZojgY50KbXvRXGMnyMgpWcClIMQ0hKyKC4AZ8qgl2PpqNX750oJ5Udp8cEe8UKElULSy7SB1DYcYbqrncQeLeayOGJYpOPjx550XYNa2k= 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=TDAKxCqy; arc=none smtp.client-ip=74.125.82.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TDAKxCqy" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-3075fa5a407so6234699eec.1 for ; Tue, 09 Jun 2026 00:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780988635; x=1781593435; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=JxPb+RxK32jFv/xJSoX/EYo4cdhBkfXrSsqEtmmG9wM=; b=TDAKxCqy952NRq+Aqvi7WdpBqU/bDO/hXL4TFNiVfD2EOQV3rRUyS885d5AqJhu+/l UID7dv+/VYAPzVG6fTASMuNrB6JCSyhrq2u2rmyDLCfr4bA/iSOB5FWPOGYUSwu0MwKU uBHimOln99Ta2jnQxx846r049YR++o192jzEyT9YTOqO4BD6BhlM4vBAUQwest2lsieW eUtts0owbhj25hTpRfKUYYpzymMDmKbGDezicTA7CvvPGV6Goe+IJ5qVqnZ2xlse1fFT CrKspH6NCtx4TGFQAJ43wIMRKUi58dSfTnDMR6UWHCOgKsE0I/lgftQWaGq65zW7Whwu n7Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780988635; x=1781593435; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JxPb+RxK32jFv/xJSoX/EYo4cdhBkfXrSsqEtmmG9wM=; b=WeNNWbidJcoi8dB1cCCrEdy+QTfwZdadWrLFiEy07tiKmF+asC51vDnzjezFOJxMLP Mi5WahZbHehEotbpLGtx+weK6DsRWg7lKWaScoRJ4x9bS/3MDImLfWY2Os27DaWMxoLP Mtb83cvdso2UIF2g3h7Htx3UpFhFmSgQdcLiVFqBKDcoPR2N8F6zVsiy2ENbbW9jVWv6 hrCujR49rVGlzUOTtB/ATlq/+BXsu3axYC0im2fv+w+NWMgPMqJNuZW6QxC0dI3Uv+Lg LHtfx4huwo+fD6Ri11ckettVetI+gjiatgzG+3uCN1L1wCDqPPqCYC3oTGvYmrzsa9uj 0mww== X-Forwarded-Encrypted: i=1; AFNElJ+UdflWrF3fp9gM6O6gtmO2dSO0RD6efvnbpGrAvDyMG9IVQfVRgsihvfp6bxzzpkk1GhU8/2Y50kON8Xo=@vger.kernel.org X-Gm-Message-State: AOJu0YzExOuR98ybeReh+Ap4fEPHOE6E5q7rqsa6MUITSBDmWRYIsxLj GupuOiGd1xCmBU3IAZ65oadi13IVqIX0yO24NkI6TvedCNdoNnBugbCs5T+YPo966wJCnV++aMr a9iNsafDbnA== X-Received: from dlbrx14.prod.google.com ([2002:a05:7022:170e:b0:137:fb92:f7ee]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6613:b0:12c:8e70:c33b with SMTP id a92af1059eb24-138066be665mr9925946c88.8.1780988635043; Tue, 09 Jun 2026 00:03:55 -0700 (PDT) Date: Tue, 9 Jun 2026 00:03:45 -0700 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.54.0.1064.gd145956f57-goog Message-ID: <20260609070348.541964-1-irogers@google.com> Subject: [PATCH v1 0/3] perf pmu: Add tool-provided NVMe PMU From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Tomas Glozar , Michael Jeanson , Dmitrii Dolgov <9erthalion6@gmail.com>, Alexandre Chartre , Yuzhuo Jing , Leo Yan , German Gomez , Anubhav Shelat , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: linux-nvme@lists.infradead.org Content-Type: text/plain; charset="UTF-8" This patch series introduces a tool-provided PMU for NVMe devices to expose various hardware logs as perf events. Using libnvme, the new nvme_pmu extracts metrics from standard NVMe log pages including: - SMART / Health Information (e.g. data units read/written, power cycles, temperature) - Endurance Group Information - FDP (Flexible Data Placement) Statistics - Error Information - Zoned Namespaces (ZNS) Changed Zones Key features: - Dynamic probing of supported log pages on /dev/nvmeX. Unsupported events are marked as deprecated and hidden from `perf list` by default. - Generic configuration encoding where the log type, size, and offset are encoded directly into the event configuration. - Correct interval delta tracking using baseline offset snapshots. This mimics the behavior of the hwmon PMU, allowing gauges like Temperature to be reported instantaneously in `perf stat -I`, while standard counters correctly accumulate deltas. - Robust handling of cross-architecture endianness when reading 128-bit and 64-bit fields from the NVMe specification. The series is broken down into: 1. Adding the libnvme feature detection via pkg-config in tools/build. 2. The core implementation of the NVMe tool PMU. 3. A unit test suite verifying the parsing and encoding of the NVMe PMU events using a mocked device. Ian Rogers (3): perf build: Add libnvme feature detection perf pmu: Implement tool-provided NVMe PMU perf tests: Add NVMe PMU event parsing test tools/build/Makefile.feature | 2 + tools/build/feature/Makefile | 3 + tools/build/feature/test-libnvme.c | 11 + tools/perf/Makefile.config | 12 + tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/nvme_pmu.c | 176 ++++++++++ tools/perf/tests/tests.h | 1 + tools/perf/util/Build | 1 + tools/perf/util/evsel.c | 11 +- tools/perf/util/nvme_pmu.c | 535 +++++++++++++++++++++++++++++ tools/perf/util/nvme_pmu.h | 143 ++++++++ tools/perf/util/pmu.c | 15 + tools/perf/util/pmu.h | 8 +- tools/perf/util/pmus.c | 31 +- tools/perf/util/pmus.h | 1 + 16 files changed, 945 insertions(+), 7 deletions(-) create mode 100644 tools/build/feature/test-libnvme.c create mode 100644 tools/perf/tests/nvme_pmu.c create mode 100644 tools/perf/util/nvme_pmu.c create mode 100644 tools/perf/util/nvme_pmu.h -- 2.54.0.1064.gd145956f57-goog