Received: by 2002:a05:6500:2018:b0:1fb:9675:f89d with SMTP id t24csp242426lqh; Thu, 30 May 2024 22:58:07 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVdXBBfs7XfgjJjyktN1bNFvloHD8T/5LjX4Xx+Nd+GipyJnpOgnkGmrtwLFIK89Zi8dTIQDhCDClpKfvw5K088zSIgnmTdzCYmo5y3rQ== X-Google-Smtp-Source: AGHT+IHp0UZeH0vFNHhDh4Lsf54RMHHj7x3P4iJ9HFSAeUKgMY2Ec9N0T9Iu3nIcjRazJ4FoM36G X-Received: by 2002:a17:906:c797:b0:a63:3586:a4ca with SMTP id a640c23a62f3a-a681fe4e68amr50046466b.11.1717135087374; Thu, 30 May 2024 22:58:07 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717135087; cv=pass; d=google.com; s=arc-20160816; b=WVjmvFJha4ePVuZYTyLayfoE0MAy2h08+HSejXYNrvA/nanGEGMLIf8mQ5npwFQ7D0 7ddYFst4+2YlznC7SLxKCFLQ3pAqjtwtzS6pQ5ljtbeZW1ZfuBu5hSvgUDoDgYfj6zzH W1tnch+bE0AkHYvhc3rkQXBbn6ab5TGiVjxSFOU1OZQVvvOqkV2aHXkMw4cr1lJVpwyD Z28TuTEF6Mei0Z8jgljmuA+qcwphTcpU0W96duoyNNmw7TIkM/aCqbn04GOApMY1O9Yu vsUdOdvoLPm2slEaCRUUyuXE0yZWmRrJwEmpWjTwaXAv2U9NQOGkgjdPnZCFh3avHpdI Wr+g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:organization:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:message-id:date :subject:cc:to:from:dkim-signature; bh=hxDGdOAjNakzvovwZMzt8W9bA5ZaEMS04KjQ+TUTMo4=; fh=U6go9TgVfhaVn8TnsTwh7UQoqP4RUXu7+mrCNIc4gvk=; b=HVQfGQFqe7d0SSIZ6CGapmaOh/6NjuyVd3/mYP9AuycnlLnSWZUyT8/+Hh/OSd9TcW dLrJOUh/rCAUdkJJVqGplkqE10e+ZIT7zUC1y0JUeRH22s/AQvPfsle8M2w2UrZvmGfQ 9b1IQqRnpzTm+NbHb93V6e5DjT3ruZVClSaRWxHQ3YFeoy7wT1uwbDIol9dbyy38CSnt RfPPJDSHiSY3KbQqkFu5fdTmbX7A3Zutst6O2kFb9b/Kdk4Wp8msck/bTKNroIKmkFEH SjSVT9t0mGjMEf0SmrH2xr6NDFZiAGXKDYXJn1Uf272GonOlP5FUa1Q4e1OP6fQ0c84i vLuw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=MGQiMJPL; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-196305-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-196305-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id a640c23a62f3a-a67eaf66073si55584666b.905.2024.05.30.22.58.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 May 2024 22:58:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-196305-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=@intel.com header.s=Intel header.b=MGQiMJPL; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-196305-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-196305-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.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 221E71F256DC for ; Fri, 31 May 2024 05:58:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 595D97CF25; Fri, 31 May 2024 05:57:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="MGQiMJPL" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85EEF17753; Fri, 31 May 2024 05:57:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717135073; cv=none; b=s95NevC4ygQseZzYbmh3ypw1+5UULh5Mb5d+5b4TvIxMySVdSHd7NCWDFsnKgqi8sHmts5vW7QfEXmp3z4WZHYRcRNHumKTrcQBN3HhvgBNeaSjlWDuzgHf0GJw5zQbBmSZkT3OHlxlhlZS2aysYKXPIVZcK7zwgOg+WIdQwUYc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717135073; c=relaxed/simple; bh=5XfAUig+zcsmlnqoi/kdhANMSvNB9r2MCzHdRChVzDU=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type; b=h7IuufPdYv+VttLMULJpNyFk30zhpWnaDAz006d/NNYU1yTHKMZtC6saXSBpwnxplCg2QWzfRiW05Q7mpF1Jq+RnurMKnruyDa5svaFCeab9Y8d0NA0RpKTeBNqdzzm85NHp5RsEcSbfMEMpJc+tylrX/4E1LhKWqwGdRt1kDyw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=MGQiMJPL; arc=none smtp.client-ip=192.198.163.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1717135071; x=1748671071; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=5XfAUig+zcsmlnqoi/kdhANMSvNB9r2MCzHdRChVzDU=; b=MGQiMJPL29ynksYxQhJ1DRNWUW2/1e9RMAKc43DpnlV92C+zjdA/6HxS tLTI7a9ajJBUHxqGrlvOD0JB3ykPIGR14eyz++/rrFzT91Ei6Y3AdjbEy aQ4TdMG5uik7kmkJM427x2nhNJMu7wDUz2bEkoegD2Tg51ldBi2as2cRI 1UTtPNhRmcHgM163qt5yyf1vESL+yWAe4cC/xbLf6ukxBa6uq5lbhBIE2 j5DosgQymJhJ1ESMRykwi0iloZ92vJ+0wdvNAt5OsJl0fcropAJ3WTPf7 FJvpOdpU9NgmgU27yE8bNOqY36TsRO99w8WxE4a/zrkZi8im8d2PdBdeu Q==; X-CSE-ConnectionGUID: 9fI0VAWCSV2HhS6F4VKuiQ== X-CSE-MsgGUID: lQN90oVCSBauJ4UOpBypZA== X-IronPort-AV: E=McAfee;i="6600,9927,11088"; a="25068055" X-IronPort-AV: E=Sophos;i="6.08,203,1712646000"; d="scan'208";a="25068055" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 22:57:50 -0700 X-CSE-ConnectionGUID: oda4gKBQRvShs8EPl9tASQ== X-CSE-MsgGUID: wM09tP6/QHi79h9c4nv/og== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,203,1712646000"; d="scan'208";a="40510791" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO localhost.localdomain) ([10.246.41.28]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 22:57:46 -0700 From: Adrian Hunter To: Peter Zijlstra Cc: Ingo Molnar , Mark Rutland , Alexander Shishkin , Heiko Carstens , Thomas Richter , Hendrik Brueckner , Suzuki K Poulose , Mike Leach , James Clark , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, Yicong Yang , Jonathan Cameron , Will Deacon , Arnaldo Carvalho de Melo , Jiri Olsa , Namhyung Kim , Ian Rogers , Andi Kleen , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH V7 00/12] perf/core: Add ability for an event to "pause" or "resume" AUX area tracing Date: Fri, 31 May 2024 08:57:19 +0300 Message-Id: <20240531055731.12541-1-adrian.hunter@intel.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi Hardware traces, such as instruction traces, can produce a vast amount of trace data, so being able to reduce tracing to more specific circumstances can be useful. The ability to pause or resume tracing when another event happens, can do that. These patches add such a facilty and show how it would work for Intel Processor Trace. Maintainers of other AUX area tracing implementations are requested to consider if this is something they might employ and then whether or not the ABI would work for them. Note, thank you to James Clark (ARM) for evaluating the API for Coresight. Suzuki K Poulose (ARM) also responded positively to the RFC. Changes to perf tools are now (since V4) fleshed out. Please note, IntelĀ® Architecture Instruction Set Extensions and Future Features Programming Reference March 2024 319433-052, currently: https://cdrdv2.intel.com/v1/dl/getContent/671368 introduces hardware pause / resume for Intel PT in a feature named Intel PT Trigger Tracing. For that more fields in perf_event_attr will be necessary. The main differences are: - it can be applied not just to overflows, but optionally to every event - a packet is emitted into the trace, optionally with IP information - no PMI - works with PMC and DR (breakpoint) events only Here are the proposed additions to perf_event_attr, please comment: diff --git a/tools/include/uapi/linux/perf_event.h b/tools/include/uapi/linux/perf_event.h index 0c557f0a17b3..05dcc43f11bb 100644 --- a/tools/include/uapi/linux/perf_event.h +++ b/tools/include/uapi/linux/perf_event.h @@ -369,6 +369,22 @@ enum perf_event_read_format { PERF_FORMAT_MAX = 1U << 5, /* non-ABI */ }; +enum { + PERF_AUX_ACTION_START_PAUSED = 1U << 0, + PERF_AUX_ACTION_PAUSE = 1U << 1, + PERF_AUX_ACTION_RESUME = 1U << 2, + PERF_AUX_ACTION_EMIT = 1U << 3, + PERF_AUX_ACTION_NR = 0x1f << 4, + PERF_AUX_ACTION_NO_IP = 1U << 9, + PERF_AUX_ACTION_PAUSE_ON_EVT = 1U << 10, + PERF_AUX_ACTION_RESUME_ON_EVT = 1U << 11, + PERF_AUX_ACTION_EMIT_ON_EVT = 1U << 12, + PERF_AUX_ACTION_NR_ON_EVT = 0x1f << 13, + PERF_AUX_ACTION_NO_IP_ON_EVT = 1U << 18, + PERF_AUX_ACTION_MASK = ~PERF_AUX_ACTION_START_PAUSED, + PERF_AUX_PAUSE_RESUME_MASK = PERF_AUX_ACTION_PAUSE | PERF_AUX_ACTION_RESUME, +}; + #define PERF_ATTR_SIZE_VER0 64 /* sizeof first published struct */ #define PERF_ATTR_SIZE_VER1 72 /* add: config2 */ #define PERF_ATTR_SIZE_VER2 80 /* add: branch_sample_type */ @@ -515,10 +531,19 @@ struct perf_event_attr { union { __u32 aux_action; struct { - __u32 aux_start_paused : 1, /* start AUX area tracing paused */ - aux_pause : 1, /* on overflow, pause AUX area tracing */ - aux_resume : 1, /* on overflow, resume AUX area tracing */ - __reserved_3 : 29; + __u32 aux_start_paused : 1, /* start AUX area tracing paused */ + aux_pause : 1, /* on overflow, pause AUX area tracing */ + aux_resume : 1, /* on overflow, resume AUX area tracing */ + aux_emit : 1, /* generate AUX records instead of events */ + aux_nr : 5, /* AUX area tracing reference number */ + aux_no_ip : 1, /* suppress IP in AUX records */ + /* Following apply to event occurrence not overflows */ + aux_pause_on_evt : 1, /* on event, pause AUX area tracing */ + aux_resume_on_evt : 1, /* on event, resume AUX area tracing */ + aux_emit_on_evt : 1, /* generate AUX records instead of events */ + aux_nr_on_evt : 5, /* AUX area tracing reference number */ + aux_no_ip_on_evt : 1, /* suppress IP in AUX records */ + __reserved_3 : 13; }; }; Changes in V7: Add Andi's Reviewed-by for patches 2-12 Re-base Changes in V6: perf/core: Add aux_pause, aux_resume, aux_start_paused Removed READ/WRITE_ONCE from __perf_event_aux_pause() Expanded comment about guarding against NMI Changes in V5: perf/core: Add aux_pause, aux_resume, aux_start_paused Added James' Ack perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling New patch perf tools Added Ian's Ack Changes in V4: perf/core: Add aux_pause, aux_resume, aux_start_paused Rename aux_output_cfg -> aux_action Reorder aux_action bits from: aux_pause, aux_resume, aux_start_paused to: aux_start_paused, aux_pause, aux_resume Fix aux_action bits __u64 -> __u32 coresight: Have a stab at support for pause / resume Dropped perf tools All new patches Changes in RFC V3: coresight: Have a stab at support for pause / resume 'mode' -> 'flags' so it at least compiles Changes in RFC V2: Use ->stop() / ->start() instead of ->pause_resume() Move aux_start_paused bit into aux_output_cfg Tighten up when Intel PT pause / resume is allowed Add an example of how it might work for CoreSight Adrian Hunter (12): perf/core: Add aux_pause, aux_resume, aux_start_paused perf/x86/intel/pt: Add support for pause / resume perf/x86/intel: Do not enable large PEBS for events with aux actions or aux sampling perf tools: Enable evsel__is_aux_event() to work for ARM/ARM64 perf tools: Enable evsel__is_aux_event() to work for S390_CPUMSF perf tools: Add aux_start_paused, aux_pause and aux_resume perf tools: Add aux-action config term perf tools: Parse aux-action perf tools: Add missing_features for aux_start_paused, aux_pause, aux_resume perf intel-pt: Improve man page format perf intel-pt: Add documentation for pause / resume perf intel-pt: Add a test for pause / resume arch/x86/events/intel/core.c | 10 +- arch/x86/events/intel/pt.c | 63 ++- arch/x86/events/intel/pt.h | 4 + include/linux/perf_event.h | 15 + include/uapi/linux/perf_event.h | 11 +- kernel/events/core.c | 76 +++- kernel/events/internal.h | 1 + tools/include/uapi/linux/perf_event.h | 11 +- tools/perf/Documentation/perf-intel-pt.txt | 596 ++++++++++++++++++----------- tools/perf/Documentation/perf-record.txt | 4 + tools/perf/arch/arm/util/pmu.c | 3 + tools/perf/builtin-record.c | 4 +- tools/perf/tests/shell/test_intel_pt.sh | 28 ++ tools/perf/util/auxtrace.c | 67 +++- tools/perf/util/auxtrace.h | 6 +- tools/perf/util/evsel.c | 13 +- tools/perf/util/evsel.h | 1 + tools/perf/util/evsel_config.h | 1 + tools/perf/util/parse-events.c | 10 + tools/perf/util/parse-events.h | 1 + tools/perf/util/parse-events.l | 1 + tools/perf/util/perf_event_attr_fprintf.c | 3 + tools/perf/util/pmu.c | 7 +- 23 files changed, 696 insertions(+), 240 deletions(-) Regards Adrian