From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (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 AC7DF1DCB09; Wed, 11 Dec 2024 22:25:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955936; cv=none; b=gqgF9MbcMXhCkNMYGezT3wyckmV4m75QhdQ+WvZzZTSEAdoceizbmiLqh6oI8AJjgSJHvPZv4l+ODzPmy9zuv0sO2nNBraDxfkSUNy6n3FcjC1ZPUmzM6PXO+ed+TdGZpyjETrlYk2Gp/y4ELbLMxJASISw9Fbvp9uWX4//+jsY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955936; c=relaxed/simple; bh=5zwcrkCXWGsnxL/5mROAo6TlhYsXoTqe91xEFV/fnQY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UnI3PhLmcmHv/VDt7e1eEsREtI2TzYoeJvmz8vGsmxN3Ndmul9YpM+rxGk7VbOeIdq2F8jvIe085+FvOOS8OgHAwbRcUQh0D3CImw/Me5XNfT9X1jq2WphgQ9aJ2kAP/vm7GXSu1Ix6+bCaYlBdizCKXYAbSNUnIPsM5gRA7JQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gzrpQiiG; arc=none smtp.client-ip=209.85.215.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gzrpQiiG" Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-7fc8f0598cdso1004321a12.1; Wed, 11 Dec 2024 14:25:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955934; x=1734560734; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wABlX+oSl9ibR4U3vdXkWwVEy/La7xWsUaZ6DFvspKw=; b=gzrpQiiGh4PnchR15KQN9scMX/cbwK+KFH4PZVlmJpPQ9pJYLY6IdeN2Tc0f7gGGKo m5+FP7bCH5W1ih0PTXbadDHGefu81xsmeS8uzyU18N96Fxgz+TnLGpGrTUcnAXLhUD2w aPPMRnCmEyWBJ/4JEsEa6rpXVtUSOVg99hgbai5wmbn6gk8KU1x5axhTO2TvdY/RGchr fc5F2urXCXFBWHKPjB8he+BdUHdxSyhVYWvejFYABeM4ocYYD01crgtATkAY57Sk4xjT WtKaL+JXkOwlXjfygB4nSo7sBVM2G7cki/5QQD54lfHMm9pKUMNXxUM7beaRNegvw/Cx kn2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955934; x=1734560734; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wABlX+oSl9ibR4U3vdXkWwVEy/La7xWsUaZ6DFvspKw=; b=wbkE5rOIdsHMLbInnqTpKqBXbEQ3F6lKEjl6eubjpRnSn8TTUlN35G0nFZFC9l0ZLw raIvfPxITLLevCwpajLpZ0mBsAagCBLpfdUeR1Knx6Vd9nnut7vd+GG7vDhx/Gua0YQ+ ATCN047BdMl2z1hrYvvfWWhh/GKd7agH/eBBm8IGTrMEFxatZAn6VYoWgazTuxX1JRfm c/nf8d+bz/0A9pJ0A8g9gAKm0LUOODPLxys78i6NBGaTK3IhCvkobZZMlCNcaHk1pLbJ 1aXbDa/cCb+vCTRRh5ppO6TDEDrjkEon+8+3nXOw5F9SZ0UITvkr8pDsOXf2i1c+xaXr s0uQ== X-Forwarded-Encrypted: i=1; AJvYcCU0+WBMP7xYQjE+myimntdGBJEM8lS/U6lvh7kOxd8fsd0ZDsmPd108DsEukrAYdL+f9zEfXW7dsNO9RSmj3XJQUg==@vger.kernel.org, AJvYcCVgle66XrDTZTu67k5+ywxl6pwMVOZPNW2uIYiPBX0/yefIKZCK0qKGDPnYqmz0dGnTrEY6QrRe5bms6pI=@vger.kernel.org X-Gm-Message-State: AOJu0YyRuVEpIfUkw1rxKI33jgg6DiWmwqGXo3uI4I2gbEaiV/0QZpIS 4Pu0tjyeK6VLjAYKPnJLktlLc3ZAy1Ah8MGroZWvB81zuXoGI9ke X-Gm-Gg: ASbGncuvbxeFxIpeqli+teaO6qfOD2dToG42sSLFLmMOfsNV/10slPECipsvI5jJ5PN fVTpCZ/6+BxIDL668mzU4AVAM0pIk1FqCU2XByd/e+rasAicXg0VkdPy1zpewXmKQcnZGgTiJ0i 9/gZt3meGaFdmSpqRwnPVBMuoo++muAPGAoK3JSHeBdfisJoPtcxs0tGgjsJNmq6V694Q5/JjIC T0g/S63FuzNTlK88ipeoDzmFowM71cqzeAyvxnwqEVIf9c0roEBoNlRyVbx1TrgJu3ACJJaN4SR Gz4AvP8FQQ== X-Google-Smtp-Source: AGHT+IF1POJ8CvQd05I+nERHlFjEC/kK/MgjgOzPZkJWAFewfm4qBkqZad1DLK0QUzqex9LS9dX97Q== X-Received: by 2002:a17:90b:3eca:b0:2ee:c30f:33c9 with SMTP id 98e67ed59e1d1-2f13ac1c8afmr1521003a91.14.1733955933969; Wed, 11 Dec 2024 14:25:33 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:33 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 01/10] perf evsel: Expose evsel__is_offcpu_event() for future use Date: Wed, 11 Dec 2024 14:25:19 -0800 Message-ID: <20241211222528.945590-2-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Expose evsel__is_offcpu_event() so it can be used in off_cpu_config(), evsel__parse_sample(), and perf script. Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-3-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/evsel.c | 2 +- tools/perf/util/evsel.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 6cffba96477e..867da727a486 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1242,7 +1242,7 @@ static void evsel__set_default_freq_period(struct rec= ord_opts *opts, } } =20 -static bool evsel__is_offcpu_event(struct evsel *evsel) +bool evsel__is_offcpu_event(struct evsel *evsel) { return evsel__is_bpf_output(evsel) && evsel__name_is(evsel, OFFCPU_EVENT); } diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 93b6244ec302..f5004f92f0c8 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -553,4 +553,6 @@ u64 evsel__bitfield_swap_branch_flags(u64 value); void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, const char *config_name, u64 val); =20 +bool evsel__is_offcpu_event(struct evsel *evsel); + #endif /* __PERF_EVSEL_H */ --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 6FEBE1F2372; Wed, 11 Dec 2024 22:25:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955938; cv=none; b=PQ5QTcjgJX5kTcMsuQ210CosQiS05MVrrsqr9FIOKQB0M7Yih7xHWwj2l7SsYru+JLVMwkGsJ7HvcEEJdOijOVcPyZABAzIFfPdRFbKkaqfTct7Mkjthvz2NrQTSLtL5ykn7p/aJRDhzPSFJTmGcOGYtVUuccT7lW9EubqjNsxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955938; c=relaxed/simple; bh=CtXvBuHZ10l+NOVrLXSjeix2nXsWB6v1qq32icek0/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OcjTZX0nKdzglk4oVHg6/C6Gpp6DNuCbTiky7/geON9bRElcWV5CSlJSR6GWl0WY+D6VfL91f8O+izyAPsWvzBhWkWjFQJEH2Y2XL5MgKmN2vzt52J9haCTRqiGaIQGf7LS1JXo9cK9OHTuNh4x4GeWsiH5R7URKPkN5tQriTSw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Jl38I0Tr; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Jl38I0Tr" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-2ee786b3277so5367780a91.1; Wed, 11 Dec 2024 14:25:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955936; x=1734560736; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MZXNpS9ontjCFvt+AYY61fDK03PJL203Z521VxrjSJ4=; b=Jl38I0TrD40hOU/bGlAjKvckOoZprynMWq2boG7MZMIL6P7KMkBkJloLeQgskbddTg i4rc1hlRtOqclsAjXEJthRVzSblqCw0/kYRwPAJSC0CxTNyeLVnGnVtSc3FTaELNyyMs pB0Bh9nl7bZha0YoZlqCzBZV4LWfAXEdvldlXXKFcDWWjvtCWJoQJXyrQTMz0p/OH989 5azVDOA7W6va1gsN//c+IBF8DJJ3V0EwvjZ+WUFslkuxiYEoO3LMHiwtL34w+tOv8XY+ rKxw4XFmYnXp4OJ5RIOkWqeOvQkw2991m4CisIYDQtq/TDSRfbJ+v8XTxNwcea3EG6kh XbVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955936; x=1734560736; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MZXNpS9ontjCFvt+AYY61fDK03PJL203Z521VxrjSJ4=; b=iCW/24RYtTqbITReArtIVhQ2dccmIwiYEk5BztQi0sH62or55agj9HQQzoKQ7vwxu+ Er0y7Mvla7+t9NLh0Ni3hTZCC8W6h8zFxl9awQcWVEJ5TK929YhvzGmVvNDn04Q7EWOF q9+tYev9gapnu4ggFV29L0AGmP7bubVZ+9xii54pgDF7xKoZLx6nqkGUZxjMXLyvlYG7 K5BUcpuK9Zz9lhtVyXFTj/irN3da/cb6u+waKIBorIuVBi8CwirgfKm+POAl6nCt0yiP u9n33daLl1cITwqTE1DTkab3wyXWsk2Or4OKoNRm57HB22Z7v3IqeZqZloRR6EFtO/z7 AEoQ== X-Forwarded-Encrypted: i=1; AJvYcCWBlUcE0T9F+uiJSwqJAESwqI8+aaK5EOuXTEOImmPHWMzD+NDmFbDbP8yqn6CMsKBnLopGeUwjuRAGw0KpPDegQA==@vger.kernel.org, AJvYcCWXiTOMdMez9LS7tJRmuMhucLzn4SocC69+ZFfny0eDSACezi7/bKsCQ3Jckxf7riUuigOazApTrrgZVJQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yzi86y/AZ8YlylciIcyjgaIJHQFHgXuUCMPKGc+1nXcCWfrDOFG 9nDIgDfVN06txJL9qiJeMmgFFDTVzNdcm+kQTj+jTnMRo4K2k1xv X-Gm-Gg: ASbGncslcALG12OLZ1Z2DI1tvk4L3bpYnTMz5BDcazkVuIVzlSY/tOIRBqJKbHtOnFq J3Nb7Ly7qIAnLo1DgmwK287vLTnZF0L0YXLAl+YxRam0Ca4FHBNKXVFTSU6l+1ujTDa65bHrKTk 1YKWdtiywWsoKNizVXxRblH1SsGXtRZMIsGd3v2JnGxlh79EVZY1XF/s/aFNdjR3MO16oCDuhA3 ZV/xpEi2JLIcYeJuATZ4X9Vyz9cQt89EJqfzYlgjpIruTyUWrLS/cF7ngHIrZuYKjwSmqzCOCKK j7WuUwFqNA== X-Google-Smtp-Source: AGHT+IF51qhIkIR5re06wLikSJht5b6ND5XqzQnGpZlQfY0vJ266X8vE7+FjtkGUdwukKcQEX4lVxw== X-Received: by 2002:a17:90b:544b:b0:2ee:b2be:f390 with SMTP id 98e67ed59e1d1-2f13930a57bmr2137060a91.28.1733955935632; Wed, 11 Dec 2024 14:25:35 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:35 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 02/10] perf record --off-cpu: Parse off-cpu event Date: Wed, 11 Dec 2024 14:25:20 -0800 Message-ID: <20241211222528.945590-3-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Parse the off-cpu event using parse_event(), as bpf-output. no-inherit should be set to 1, here's the reason: We update the BPF perf_event map for direct off-cpu sample dumping (in following patches), it executes as follows: bpf_map_update_value() bpf_fd_array_map_update_elem() perf_event_fd_array_get_ptr() perf_event_read_local() In perf_event_read_local(), there is: int perf_event_read_local(struct perf_event *event, u64 *value, u64 *enabled, u64 *running) { ... /* * It must not be an event with inherit set, we cannot read * all child counters from atomic context. */ if (event->attr.inherit) { ret =3D -EOPNOTSUPP; goto out; } Which means no-inherit has to be true for updating the BPF perf_event map. Moreover, for bpf-output events, we primarily want a system-wide event instead of a per-task event. The reason is that in BPF's bpf_perf_event_output(), BPF uses the CPU index to retrieve the perf_event file descriptor it outputs to. Making a bpf-output event system-wide naturally satisfies this requirement by mapping CPU appropriately. Suggested-by: Namhyung Kim Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-4-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/bpf_off_cpu.c | 33 +++++++++++---------------------- tools/perf/util/evsel.c | 4 +++- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c index a590a8ac1f9d..9275b022b2ea 100644 --- a/tools/perf/util/bpf_off_cpu.c +++ b/tools/perf/util/bpf_off_cpu.c @@ -38,32 +38,21 @@ union off_cpu_data { =20 static int off_cpu_config(struct evlist *evlist) { + char off_cpu_event[64]; struct evsel *evsel; - struct perf_event_attr attr =3D { - .type =3D PERF_TYPE_SOFTWARE, - .config =3D PERF_COUNT_SW_BPF_OUTPUT, - .size =3D sizeof(attr), /* to capture ABI version */ - }; - char *evname =3D strdup(OFFCPU_EVENT); - - if (evname =3D=3D NULL) - return -ENOMEM; =20 - evsel =3D evsel__new(&attr); - if (!evsel) { - free(evname); - return -ENOMEM; + scnprintf(off_cpu_event, sizeof(off_cpu_event), "bpf-output/name=3D%s/", = OFFCPU_EVENT); + if (parse_event(evlist, off_cpu_event)) { + pr_err("Failed to open off-cpu event\n"); + return -1; } =20 - evsel->core.attr.freq =3D 1; - evsel->core.attr.sample_period =3D 1; - /* off-cpu analysis depends on stack trace */ - evsel->core.attr.sample_type =3D PERF_SAMPLE_CALLCHAIN; - - evlist__add(evlist, evsel); - - free(evsel->name); - evsel->name =3D evname; + evlist__for_each_entry(evlist, evsel) { + if (evsel__is_offcpu_event(evsel)) { + evsel->core.system_wide =3D true; + break; + } + } =20 return 0; } diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 867da727a486..d0f2d9e8ce6c 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1521,8 +1521,10 @@ void evsel__config(struct evsel *evsel, struct recor= d_opts *opts, if (evsel__is_dummy_event(evsel)) evsel__reset_sample_bit(evsel, BRANCH_STACK); =20 - if (evsel__is_offcpu_event(evsel)) + if (evsel__is_offcpu_event(evsel)) { evsel->core.attr.sample_type &=3D OFFCPU_SAMPLE_TYPES; + attr->inherit =3D 0; + } =20 arch__post_evsel_config(evsel, attr); } --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 067911F238E; Wed, 11 Dec 2024 22:25:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955939; cv=none; b=EHlftQ2hCXQBNEzThQrN7mSp885J6yJaT0YmfAbaFeSdiZClOnwCGXP4ttkPPsObaJEVgNa85QMgXak2tTWf0gw0hPTB2fJQtneXC9Lp9UlrsklOxQ1kA/PD66LUbTlgqfoh2601Z4qemc1wdF37PeY+TCPWHAUTaaJuuxvpNKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955939; c=relaxed/simple; bh=mTlC+dsjuz20TP9NXLl05x5MvL2ZF8LuKq6YVidbn2M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mjQcC3yYCpKibhwJnWHrecwsH7vgewqAKsG7XFwcgh07FIAesTKe2pC1RS4i4WZ2lNxeT6OgNOO637Jm8SJq92OICU3p3CMeeq0VZ0Dhj2cDkXhGDb0wBdP9Dwidr26h/UWYYq+Q7nEWh34nlOtH99Kn4BqnRZapnjz0Y5p2Ee8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XlcTVf7D; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XlcTVf7D" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-7fd377ff3c5so1001454a12.0; Wed, 11 Dec 2024 14:25:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955937; x=1734560737; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JmHn/bdBOF0dPUymMSGq/r40vYqC7wwLOGiFt6IT0Mc=; b=XlcTVf7DmZCf8AKHzwQKd/vRPK97prMTuqUMD/9BsG/4Qfk6RfEULf4XcKAjP0GrxH rDGScNYCEgLk+iTrivvr7UFFGrHJNzL25WlWuCCssp0V7P85U2qwpK5wKCdZ/gnBSk4O W1DVdxtRSVbc8c/Ze6SooPCCbzKloibuRb9aMFygZ3y1u/Ax5Em1sBR7Dr/DF6/rxq1T yp6Ap3x4jeH65r+mWacoztnXukHHpPK4+oS3yECF/Y16csuSiC18FeLLImghxcxIUi4f 9f4fvKqN31+e6lbFRxdhx7d6qa+uQJmKI9exqcFDxU5vqYDSOBBwlCZVzUucOa1oOiE5 dlAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955937; x=1734560737; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JmHn/bdBOF0dPUymMSGq/r40vYqC7wwLOGiFt6IT0Mc=; b=NH6I3aWeGSS9fsdZ9g55aQ9tOZ26YT0sXuuiTyUWnpuQ0Fkuds16kzXQKpG0+Sg3V1 jwLrwcdwvRpKYnfaqmCLO3uBNEJmnWCKOOy16zpEA1gdJer2JCPJylFgwHWbjzgqNSfC rs91a3lZtPyDdjYKv09NeLX9oNm93N7NHxBcuntPkMpCwO18UOJVXKMTwXS9mdCOqYaQ +/jh5rDS94TOZtPsIWTwd3jN9a+YHYhQUVKodqO/aT4afoTWM2yGOVvHtqI0eDEgJ2Gf A2DakKFaGfZ6kDcKUJBI2TtU/K/ryiSmasBDTXLE2R89LB7JuhSHZ0xXiVDs/t48eHsa Rc7Q== X-Forwarded-Encrypted: i=1; AJvYcCVg8xiPS5Gb1sRk0b+qQWFKbfrxTdMrZlKPkNn1KxOongaQ/zt2RsWSxmq199b+MGTeMY54RcA7g6TRaGM=@vger.kernel.org, AJvYcCVylU63nPVNb5M6qKyiGmQijEkzSZc/96a+d77IFI4i2OgbyAPtmraL+kp2JJaJy4pFcHiELAiNpxrKiizDJ9ggNg==@vger.kernel.org X-Gm-Message-State: AOJu0Yym1g9pxhBCTy9rHHvBOzaCiJ4HWBrLQknicScNr45p81GJuQRr g/u05ENEVYtl/dcqNutU6SekZg2rOwltiNP7yX76+PbLrS42HhJh X-Gm-Gg: ASbGncv5M3H5OQClSd9EUP11ddX7QTDyeJONI7K6mRwFMMGBEXep/hIw99fcDsqFRN/ +CK9shJUaHoXlVXbhprdTf4sZ7JDiHLH+r0WC7FjH9XMZ3WzOHfoD2hddIedfhBZH7uxwHB4Gkw 6PFk72k+8wqXvYMDq4qN1e26OaAH9sCmfx/jVdufX+pgxLXi8FKhyn0vyYunsMsUxKAKNac8Zpg 7nuTBaIqYWcD+C/6m/WodnxQ0JxBrFwr02eq4kHhxHlRDdcZi8wqdjlrQ9QiJStPd2n+nKuhpDM Gl+ugj0OIw== X-Google-Smtp-Source: AGHT+IGrOiXY9/XJEGANU0OHT3kZrZv/GSlcQYfsev4+eQW3acJ7Lkht+k4m0iUzTykY9LK5YsYwkw== X-Received: by 2002:a17:90b:4d83:b0:2ea:4c4d:95a1 with SMTP id 98e67ed59e1d1-2f13ac98aaemr1404761a91.17.1733955937353; Wed, 11 Dec 2024 14:25:37 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:36 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 03/10] perf record --off-cpu: Preparation of off-cpu BPF program Date: Wed, 11 Dec 2024 14:25:21 -0800 Message-ID: <20241211222528.945590-4-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Set the perf_event map in BPF for dumping off-cpu samples. Set the offcpu_thresh to specify the threshold. Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-5-howardchu95@gmail.= com [ Added some missing iteration variables to off_cpu_config() and fixed up a manually edited patch hunk line boundary line ] Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/bpf_off_cpu.c | 25 +++++++++++++++++++++++++ tools/perf/util/bpf_skel/off_cpu.bpf.c | 11 +++++++++++ 2 files changed, 36 insertions(+) diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c index 9275b022b2ea..2378fb5a893f 100644 --- a/tools/perf/util/bpf_off_cpu.c +++ b/tools/perf/util/bpf_off_cpu.c @@ -13,6 +13,7 @@ #include "util/cgroup.h" #include "util/strlist.h" #include +#include =20 #include "bpf_skel/off_cpu.skel.h" =20 @@ -60,6 +61,9 @@ static int off_cpu_config(struct evlist *evlist) static void off_cpu_start(void *arg) { struct evlist *evlist =3D arg; + struct evsel *evsel; + struct perf_cpu pcpu; + int i; =20 /* update task filter for the given workload */ if (skel->rodata->has_task && skel->rodata->uses_tgid && @@ -73,6 +77,25 @@ static void off_cpu_start(void *arg) bpf_map_update_elem(fd, &pid, &val, BPF_ANY); } =20 + /* update BPF perf_event map */ + evsel =3D evlist__find_evsel_by_str(evlist, OFFCPU_EVENT); + if (evsel =3D=3D NULL) { + pr_err("%s evsel not found\n", OFFCPU_EVENT); + return; + } + + perf_cpu_map__for_each_cpu(pcpu, i, evsel->core.cpus) { + int err; + + err =3D bpf_map__update_elem(skel->maps.offcpu_output, &pcpu.cpu, sizeof= (__u32), + xyarray__entry(evsel->core.fd, i, 0), + sizeof(__u32), BPF_ANY); + if (err) { + pr_err("Failed to update perf event map for direct off-cpu dumping\n"); + return; + } + } + skel->bss->enabled =3D 1; } =20 @@ -261,6 +284,8 @@ int off_cpu_prepare(struct evlist *evlist, struct targe= t *target, } } =20 + skel->bss->offcpu_thresh_ns =3D opts->off_cpu_thresh_us * 1000; + err =3D off_cpu_bpf__attach(skel); if (err) { pr_err("Failed to attach off-cpu BPF skeleton\n"); diff --git a/tools/perf/util/bpf_skel/off_cpu.bpf.c b/tools/perf/util/bpf_s= kel/off_cpu.bpf.c index c152116df72f..c87132e01eb3 100644 --- a/tools/perf/util/bpf_skel/off_cpu.bpf.c +++ b/tools/perf/util/bpf_skel/off_cpu.bpf.c @@ -18,6 +18,8 @@ #define MAX_STACKS 32 #define MAX_ENTRIES 102400 =20 +#define MAX_CPUS 4096 + struct tstamp_data { __u32 stack_id; __u32 state; @@ -39,6 +41,13 @@ struct { __uint(max_entries, MAX_ENTRIES); } stacks SEC(".maps"); =20 +struct { + __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(__u32)); + __uint(max_entries, MAX_CPUS); +} offcpu_output SEC(".maps"); + struct { __uint(type, BPF_MAP_TYPE_TASK_STORAGE); __uint(map_flags, BPF_F_NO_PREALLOC); @@ -97,6 +106,8 @@ const volatile bool uses_cgroup_v1 =3D false; =20 int perf_subsys_id =3D -1; =20 +__u64 offcpu_thresh_ns; + /* * Old kernel used to call it task_struct->state and now it's '__state'. * Use BPF CO-RE "ignored suffix rule" to deal with it like below: --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (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 CFDD31F2C3B; Wed, 11 Dec 2024 22:25:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955941; cv=none; b=aC2sljc2kPZ/w/3NUsXgeEMVfC1MH8e1ZAjzjngEBKe9camois5YcQ6INC3FriXzx/vpcQ5Ew7oi3Zndo2FU+oRxuZmoS3J+eVs1v8QQ99R9+ZK34FdDk86k8XStgV0DgZQy9yqths8npoyZ+FcyRPI9yBRZuFmXCdGRbIq84bw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955941; c=relaxed/simple; bh=FhYBFcBipaHcJVExkC+3V5vt7nolG31xdwTCXFsCPv8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SkdiV+x01l/FrlrqS1D9k+r4poHdza+NHQR3KW/biHiml18o1aiQruYVwIge/fYYMjQG9ipbZsVPNBMbE4sfdDztXpRJP9UMFG4wZzi12LEF+rX/dfpQPce5LLRTjHb4mKpuHfqV4kXqnYjL9aJkMz1lovCuim86MInQchfzfBg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C2/BgLzr; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C2/BgLzr" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-7fd45005a09so6485a12.2; Wed, 11 Dec 2024 14:25:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955939; x=1734560739; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HM89nxEPCN1/mXqArlw/4nxHHrqhLHtRHulGS1q1v6g=; b=C2/BgLzrg+5M+/B64c5tuI1xEhbtYV51nZ0SNueIMdQsxKWMaQvbzu221yfNxnierr NwWOSjgzugalIJe4jKcoQC2fDjdxOH+OLutiJbnxQjZT3sFmf4L0d+jJDSr8jTySukCS wRtlhcVmmjYxG2VJjMktNETpyyWlgt3qLtBSBMbqKq+4IJcihUCCjZHw15csn4CW0a6L ou7r4bBnZV4GE4UHbzQ3ElaIh6/5BjMb850ktzBtldtK30Ju5xZvNvXYZL1wFRO9rHLz xn0GAznxz6GE8i+lUNLnkIBerBvGi9tntIFKFgaNSyh7JKSqBdhuGSmv4MSDArh+5XTv HS7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955939; x=1734560739; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HM89nxEPCN1/mXqArlw/4nxHHrqhLHtRHulGS1q1v6g=; b=CmQ/AZEOeQdaf/oeI6wVgcnb+baUGd7PvAPGmvfJAjN6dq51zSUoCU5Zov08DQuiWd t3bAZPS9o5u0Opt/jTs3bxNUyvW0B3EfdyfLnF/dCH5E6rbaksOQWBzfT6drjDC3JBIM 7vIA3+P4R/KwAGJpzNR0cT7D9kZG5E1BUegMUc3UpVOkpY2L5G3vpPBLu/vtPCXcWzNM Wv3kxg7ZntG2oEg5/nsejsUzwWR4ht+7FnHWlyYADp/3flUYPDfeNY2e1EWsLqD8e2rw NaDVVe5oPtcMlXR0+a26VfI93ojpGSSskXAC4ZAiXG3w/opLzzwN3kF52V+rXTjgyMCS +cnA== X-Forwarded-Encrypted: i=1; AJvYcCUHNKL5Iu0DxfuNZd3OU7CdKl0Glbl7CD10dmArgZokURlXwGxxUJYeVtYw8aYHzBlX+BClqZEW5FDd7PG7wl9r1Q==@vger.kernel.org, AJvYcCVYw51ZBATkGTRAU1G3nzKGHzRmU/4dzH//z6a3vd8fzJGOyCrpX0j88CIF89umyLPpeulanow5QK7Kl8c=@vger.kernel.org X-Gm-Message-State: AOJu0Ywfl9ZSpDedbph7kOZLYU/dqdzRAlKuy98h1iNysn46aJADXsB2 PGkRrA0VFp6m+NKMTzQNStcgVBixpC0UEIAiCpZYeiGlpS08HeBe X-Gm-Gg: ASbGnctYWI8XGh6C/533TKRGEj3eToN/rwqsCTselgsrEWF+AZFT4vOEmhykdUB1YpL +R9yGChUsN4Z/xDF5B6QO1aWQW6squou40QhYLmNLRGonajR94cf4RHLaEaGbgyPawXwdCn3pvj KC1yQps3VokkCzTACCRIEyUgRxV5HEs3V8HmW6i0W1y9YFodq/Q+MnTDTtegExdyUbMBdiJfMWc UCvY+kexyajAZRdBuJociUgSQZye4RJL8Msx2Vo1rdxFG3NF8+iEnn2xv8ycdWapmz2seJJI2wd swViKUz6eQ== X-Google-Smtp-Source: AGHT+IGZh43wS6jR3abaQ4VciC4pcBqtRGirScKa5ez5wP+GsDjXEIBmtTZ/oGWJrUhY+mHuFmJMRQ== X-Received: by 2002:a17:90b:548b:b0:2ea:59e3:2d2e with SMTP id 98e67ed59e1d1-2f139293a0fmr2536753a91.10.1733955939076; Wed, 11 Dec 2024 14:25:39 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:38 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 04/10] perf record --off-cpu: Dump off-cpu samples in BPF Date: Wed, 11 Dec 2024 14:25:22 -0800 Message-ID: <20241211222528.945590-5-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Collect tid, period, callchain, and cgroup id and dump them when off-cpu time threshold is reached. We don't collect the off-cpu time twice (the delta), it's either in direct samples, or accumulated samples that are dumped at the end of perf.data. Suggested-by: Namhyung Kim Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ian Rogers Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-6-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/bpf_skel/off_cpu.bpf.c | 86 ++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/bpf_skel/off_cpu.bpf.c b/tools/perf/util/bpf_s= kel/off_cpu.bpf.c index c87132e01eb3..aae63d999abb 100644 --- a/tools/perf/util/bpf_skel/off_cpu.bpf.c +++ b/tools/perf/util/bpf_skel/off_cpu.bpf.c @@ -19,11 +19,17 @@ #define MAX_ENTRIES 102400 =20 #define MAX_CPUS 4096 +#define MAX_OFFCPU_LEN 37 + +struct stack { + u64 array[MAX_STACKS]; +}; =20 struct tstamp_data { __u32 stack_id; __u32 state; __u64 timestamp; + struct stack stack; }; =20 struct offcpu_key { @@ -41,6 +47,10 @@ struct { __uint(max_entries, MAX_ENTRIES); } stacks SEC(".maps"); =20 +struct offcpu_data { + u64 array[MAX_OFFCPU_LEN]; +}; + struct { __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY); __uint(key_size, sizeof(__u32)); @@ -48,6 +58,13 @@ struct { __uint(max_entries, MAX_CPUS); } offcpu_output SEC(".maps"); =20 +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(struct offcpu_data)); + __uint(max_entries, 1); +} offcpu_payload SEC(".maps"); + struct { __uint(type, BPF_MAP_TYPE_TASK_STORAGE); __uint(map_flags, BPF_F_NO_PREALLOC); @@ -194,6 +211,47 @@ static inline int can_record(struct task_struct *t, in= t state) return 1; } =20 +static inline int copy_stack(struct stack *from, struct offcpu_data *to, i= nt n) +{ + int len =3D 0; + + for (int i =3D 0; i < MAX_STACKS && from->array[i]; ++i, ++len) + to->array[n + 2 + i] =3D from->array[i]; + + return len; +} + +/** + * off_cpu_dump - dump off-cpu samples to ring buffer + * @data: payload for dumping off-cpu samples + * @key: off-cpu data + * @stack: stack trace of the task before being scheduled out + * + * If the threshold of off-cpu time is reached, acquire tid, period, callc= hain, and cgroup id + * information of the task, and dump it as a raw sample to perf ring buffer + */ +static int off_cpu_dump(void *ctx, struct offcpu_data *data, struct offcpu= _key *key, + struct stack *stack, __u64 delta) +{ + int n =3D 0, len =3D 0; + + data->array[n++] =3D (u64)key->tgid << 32 | key->pid; + data->array[n++] =3D delta; + + /* data->array[n] is callchain->nr (updated later) */ + data->array[n + 1] =3D PERF_CONTEXT_USER; + data->array[n + 2] =3D 0; + len =3D copy_stack(stack, data, n); + + /* update length of callchain */ + data->array[n] =3D len + 1; + n +=3D len + 2; + + data->array[n++] =3D key->cgroup_id; + + return bpf_perf_event_output(ctx, &offcpu_output, BPF_F_CURRENT_CPU, data= , n * sizeof(u64)); +} + static int off_cpu_stat(u64 *ctx, struct task_struct *prev, struct task_struct *next, int state) { @@ -218,6 +276,16 @@ static int off_cpu_stat(u64 *ctx, struct task_struct *= prev, pelem->state =3D state; pelem->stack_id =3D stack_id; =20 + /* + * If stacks are successfully collected by bpf_get_stackid(), collect the= m once more + * in task_storage for direct off-cpu sample dumping + */ + if (stack_id > 0 && bpf_get_stack(ctx, &pelem->stack, MAX_STACKS * sizeof= (u64), BPF_F_USER_STACK)) { + /* + * This empty if block is used to avoid 'result unused warning' from bpf= _get_stack(). + * If the collection fails, continue with the logic for the next task. + */ + } next: pelem =3D bpf_task_storage_get(&tstamp, next, NULL, 0); =20 @@ -232,11 +300,19 @@ static int off_cpu_stat(u64 *ctx, struct task_struct = *prev, __u64 delta =3D ts - pelem->timestamp; __u64 *total; =20 - total =3D bpf_map_lookup_elem(&off_cpu, &key); - if (total) - *total +=3D delta; - else - bpf_map_update_elem(&off_cpu, &key, &delta, BPF_ANY); + if (delta >=3D offcpu_thresh_ns) { + int zero =3D 0; + struct offcpu_data *data =3D bpf_map_lookup_elem(&offcpu_payload, &zero= ); + + if (data) + off_cpu_dump(ctx, data, &key, &pelem->stack, delta); + } else { + total =3D bpf_map_lookup_elem(&off_cpu, &key); + if (total) + *total +=3D delta; + else + bpf_map_update_elem(&off_cpu, &key, &delta, BPF_ANY); + } =20 /* prevent to reuse the timestamp later */ pelem->timestamp =3D 0; --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (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 9B0791F2C5C; Wed, 11 Dec 2024 22:25:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955943; cv=none; b=osLAPdHUW7vjDEYhMkLxV1ETaalTo8BMhGR4iDAIkGNn70uCJGJNHBICGfe4JL2NuZGeOb+5lkLzVIE5yuZnfbmh1NTRMxNfVL9WzCfDrpuVBHatgs4p8RuJuqkBRAPJ+FkV/C2RWeMmKYDT/8tHV+M5M2i15dj99dDaVF0eJmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955943; c=relaxed/simple; bh=qS0cOrCuQAGNC6iJUTgJsbjM3SMEBq/GFor1cJW9EjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gz548pnETFORmeK3aK+psL2nMUPycypEFQbsFpl9Fz989Kd0ZpA5EYV7FBxDGOh7JcPVVsrEn6wENJHcEEZ5my/J9g0/6angoXnZS5yTW5imhpN2Mir9sqS9q3TriUPbNUsZfTwKTwPCAbFOc85RGutENWVknGoziILU7LC/q+I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=A/BPts+R; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A/BPts+R" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-7e9e38dd5f1so17233a12.0; Wed, 11 Dec 2024 14:25:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955941; x=1734560741; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eLwbvn6RlQVfrWwC3KGmGRTCbuyGiAEY+Px29G/ghSE=; b=A/BPts+RH/DrDLMEeCRLGmuccats6L/u3D6sUKb2RjYZg0qxpxgBfOlkgGVN9qBazY JFhOBnAB649y5ShonT37C3U1XoySm0NdI0PVKIjo6QXFwkfeMSgHXV8lRy2SSqfgRNTm K1U/WsDuEhTD3Lb6PXkhcfSgwoC2T4aeVdW9oIuNS/RodMaIHYmqmTm0no7+Fzd30bcn ghuLY6Mzm4pFijfdE1MhLa2wDcygBPFKeW5WGDjBeVWFWhj+yDIC8riyq1ipROn0psZE z/NqeGHs9T3zqHTIyYVeoCaU8ArEsCQNfh2JVMc1Tlvt7acQUm5929ZKVsQlehIAWJIX KplQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955941; x=1734560741; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eLwbvn6RlQVfrWwC3KGmGRTCbuyGiAEY+Px29G/ghSE=; b=lyfWy6tmPGqzqvntcMx/dOYgqOfofT/xpHaWqtMH0Y9Rl9oGKrVPJL6j0CTNwRaNvy XN6uPZ3KsrkcT6QEwqGqM/REm5+/brhrCbNaF1ryefksnx53tG/NBbsMa/Akd72H9KF9 LEOrfa7L6ig8radljDbCK2hEs9KFjWUB4Owpj74cyBpB9GxYtd64yXdnVT5Dh9tf88ei wjtwugrqUSb56CFvvKtK4HboMlYBwTjuBURnyGzMwnHcq8q5s3xBCbFRY7vtVKqyhROg 6uRGDVpJwzLNPxeGGFnSW1yCEPZIwxqc/WjTr3oJK0kLe3jcflhQtaQMwdAJW6hxmTHm mKlQ== X-Forwarded-Encrypted: i=1; AJvYcCWIyunrd6ff8ydljFCApc/nNDLyCQ55ZdXrNOdZHp5ysS1AOoIiYul00rLbxg04xKgy68pJf5MofYeLk7s=@vger.kernel.org, AJvYcCXaSLr+6GsDvtZFxLduUfA33xMRkkqWbjDPAT2aE9FhOJdTZgdyzi0w5gDWvi/ZcHlCmxY8l1R+2Ks/B4UiDa+5dw==@vger.kernel.org X-Gm-Message-State: AOJu0YxZ9SFfSSUznIXm5pzWt2412/Tp3c//wTpz1dpd6Ctfk/NjLG1Q 9PoTQMnpnzuSNN+FLUcUKllGVeH2OHtPVFJlBF5S6yKM3ZLsyBV9 X-Gm-Gg: ASbGnctKGWirr3ch1gsBqwT0JzLN1O4l1cEhu5EY4BWVU7Dx/IiC+rG+7KRMOi3eUpl 6RC9XCc8rSNjAta2TxluzL3vUU3tbBOl//5NvTTe+6Llnh+7AqPe20hM3Zmxm29NfkgRN0Qu+uy TowGJOPteH8xf7h3K8hIEn9NGibp3upDZWGIOJatwAsewocqh6RPiXpPgMJPw2SvslKmZf4vnja ogrVe02tlwzek/4GrFfAd1qjBcHavSmVt+Cxf4KOdCo/TnhzsJW/CoRdKq/k3y1nGk+UprXdxmo GhPPl/puhg== X-Google-Smtp-Source: AGHT+IEnjKy0/8OV64jLBjzlLxfQzWsMGBkJXXzexL0UnyzqQw80mDCr0El+iSfR/iS1zkv5gt5yOw== X-Received: by 2002:a17:90b:1a86:b0:2ee:d193:f3d5 with SMTP id 98e67ed59e1d1-2f13925b0d7mr2688220a91.7.1733955940876; Wed, 11 Dec 2024 14:25:40 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:40 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 05/10] perf evsel: Assemble offcpu samples Date: Wed, 11 Dec 2024 14:25:23 -0800 Message-ID: <20241211222528.945590-6-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the data in bpf-output samples, to assemble offcpu samples. In evsel__is_offcpu_event(), Check if sample_type is PERF_SAMPLE_RAW to support off-cpu sample data created by an older version of perf. Testing compatibility on offcpu samples collected by perf before this patch= series: See below, the sample_type still uses PERF_SAMPLE_CALLCHAIN $ perf script --header -i ./perf.data.ptn | grep "event : name =3D offcpu-t= ime" # event : name =3D offcpu-time, , id =3D { 237917, 237918, 237919, 237920 = }, type =3D 1 (software), size =3D 136, config =3D 0xa (PERF_COUNT_SW_BPF_O= UTPUT), { sample_period, sample_freq } =3D 1, sample_type =3D IP|TID|TIME|C= ALLCHAIN|CPU|PERIOD|IDENTIFIER, read_format =3D ID|LOST, disabled =3D 1, fr= eq =3D 1, sample_id_all =3D 1 The output is correct. $ perf script -i ./perf.data.ptn | grep offcpu-time gmain 2173 [000] 18446744069.414584: 100102015 offcpu-time: NetworkManager 901 [000] 18446744069.414584: 5603579 offcpu-time: Web Content 1183550 [000] 18446744069.414584: 46278 offcpu-time: gnome-control-c 2200559 [000] 18446744069.414584: 11998247014 offcpu-time: And after this patch series: $ perf script --header -i ./perf.data.off-cpu-v9 | grep "event : name =3D o= ffcpu-time" # event : name =3D offcpu-time, , id =3D { 237959, 237960, 237961, 237962 = }, type =3D 1 (software), size =3D 136, config =3D 0xa (PERF_COUNT_SW_BPF_O= UTPUT), { sample_period, sample_freq } =3D 1, sample_type =3D IP|TID|TIME|C= PU|PERIOD|RAW|IDENTIFIER, read_format =3D ID|LOST, disabled =3D 1, freq =3D= 1, sample_id_all =3D 1 perf $ ./perf script -i ./perf.data.off-cpu-v9 | grep offcpu-time gnome-shell 1875 [001] 4789616.361225: 100097057 offcpu-time: gnome-shell 1875 [001] 4789616.461419: 100107463 offcpu-time: firefox 2206821 [002] 4789616.475690: 255257245 offcpu-time: Suggested-by: Namhyung Kim Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-7-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/evsel.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index d0f2d9e8ce6c..e3e352e91c89 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1244,7 +1244,8 @@ static void evsel__set_default_freq_period(struct rec= ord_opts *opts, =20 bool evsel__is_offcpu_event(struct evsel *evsel) { - return evsel__is_bpf_output(evsel) && evsel__name_is(evsel, OFFCPU_EVENT); + return evsel__is_bpf_output(evsel) && evsel__name_is(evsel, OFFCPU_EVENT)= && + evsel->core.attr.sample_type & PERF_SAMPLE_RAW; } =20 /* @@ -2846,6 +2847,35 @@ static inline bool evsel__has_branch_counters(const = struct evsel *evsel) return false; } =20 +static int __set_offcpu_sample(struct perf_sample *data) +{ + u64 *array =3D data->raw_data; + u32 max_size =3D data->raw_size, *p32; + const void *endp =3D (void *)array + max_size; + + if (array =3D=3D NULL) + return -EFAULT; + + OVERFLOW_CHECK_u64(array); + p32 =3D (void *)array++; + data->pid =3D p32[0]; + data->tid =3D p32[1]; + + OVERFLOW_CHECK_u64(array); + data->period =3D *array++; + + OVERFLOW_CHECK_u64(array); + data->callchain =3D (struct ip_callchain *)array++; + OVERFLOW_CHECK(array, data->callchain->nr * sizeof(u64), max_size); + data->ip =3D data->callchain->ips[1]; + array +=3D data->callchain->nr; + + OVERFLOW_CHECK_u64(array); + data->cgroup =3D *array; + + return 0; +} + int evsel__parse_sample(struct evsel *evsel, union perf_event *event, struct perf_sample *data) { @@ -3197,6 +3227,9 @@ int evsel__parse_sample(struct evsel *evsel, union pe= rf_event *event, array =3D (void *)array + sz; } =20 + if (evsel__is_offcpu_event(evsel)) + return __set_offcpu_sample(data); + return 0; } =20 --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 1C1E21F37B7; Wed, 11 Dec 2024 22:25:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955944; cv=none; b=eHjbymlqi/lIJXja1c8YY0OBaFUr+IQ75pxJRvT8zAbYORv8XX+Ec0/oVee99Mi9Bf9AH8zuWEi6MKv2bRz5beL3YsihBE1AuBd+9Y+QT6UYmSogY8AJ9/99C8UfVNSA6EvJEyAMT4FcQMreTKopSYlBFd35+08NLcDf6BtixVI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955944; c=relaxed/simple; bh=e6fI2ZVl4IzPXnFdTWlY97syscDRQIiFgkHg3JcX4HA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QI9OxbY3Mt/rkrIRSN4McKu30OiVGBtUBH0ttLOYV7rrfQxXhD8pazbjhST+VnI+czcvXllzOP/JNDAyRqAskhUmDrF2eyiCWDEf1yAiYKDWOH43tg18VZYjWxie90VduxKghkm/w8SV/LX1Cz++uIGhfTmS0osMxNJkMbTbdbc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VDMJsTbP; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VDMJsTbP" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2ef714374c0so1011997a91.0; Wed, 11 Dec 2024 14:25:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955942; x=1734560742; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QfGyJy7AZeOLJsFch884GnYaUHhnZ6+BK2uA6O0m4MI=; b=VDMJsTbPMqDtke4ws/h5TEx2VHPiUbX07nrtZhikM0cdItvUyjRbrB/Jj4hXwZ5uid fy9RULI6zn+SDj9b9lroDxDMKRWt/oTiLkLH/GRlP9t3Lj9OCIHfqkyt6C69d+3Qycjq 7p4End/5fkFw2YXARrlF23TaL0OQqesrXOlDGQqwdQ9eFfVfd5pWPcOeniI9OoqgtA63 W090I1FFzUkzouL5kzLTjmFHg87OBt3aRIOHqs2/dMWcuSiVIAii9MwxF6+N1He7yY/T 8cKcIOtV2PpdUdyT3rvpLjAJ9E3wY158Et52L2TWQxkBTIeGGgSehLgC2ruLTLdXCJUV kY7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955942; x=1734560742; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QfGyJy7AZeOLJsFch884GnYaUHhnZ6+BK2uA6O0m4MI=; b=VA9QSxiF6BqaGFPOWk7/GRJYOK0N+TXIg+o0Bf7cfZp3KQvntzdOJt4eCpEEG0bt/E Ux+Nj74zHaAMp1KHPLYvZEmGkoECTVktA83xmxHlhB1UTrhUjYlY3+vNCi7lNEIHLfy6 ypoK3fQUmXMZDk/FwSe39lgv0L1hi+BlQMCN9leZnhp393ggOxP7FKcJxe74H9prCvuF a7IP7sCyqgIEldHsSOur1QWxg4wtWuaXIq5tjPD5QXd8wm8gzFycMsehIWuVHjRO6+ug wmo3/6JoCOtkJMQh+XnocjEBWfFJCeskvqYtQUQvdM5whChmr67kWHkiySPeD+CkKVsq noWw== X-Forwarded-Encrypted: i=1; AJvYcCU/QIuu7Q9FCZ6rCrZuguTkCra1zPD1xYJENqYK03Oo9BQn3tXhq5R39M1kwhlPnIRis5bRKqP2w9zAnqw=@vger.kernel.org, AJvYcCUOly6XGhxxeHxe6SoXh63TzkITE82ATvJsIbZZ9C7HHCqY8IQaLdt7BPjtlEuadOe5u9Afc4Em9bsSJl456QyYIA==@vger.kernel.org X-Gm-Message-State: AOJu0Ywp5gvzyuZQgIEBrrzcqBhpZ2Xkklht59aP/PhswFcCYY8qCpoB +92bsSml4J7H8/DwtnqaoV1oPUXTverc27dqqbPNAyV9T1rBtAXE X-Gm-Gg: ASbGncswA1vjLYRI/yBban7NyeIxQU/dMQG9S7PzcWxuswNBkBAzOtKYgU06BgPPDI5 T/EUlah8UL6jIKcNEBDg16Rk2Xjr8K4Y/a9XM5N5lwhJPkS+8RBAoDiKMvCk9QFeml/S15LXYgm WsYrjlklQpBoAinlXlaxhU9Wcquc/0z3FOo3zzf91f51WaPoiQC0m7bn2FzzRWw5/1OANbbBPPD 0brGDtMLB8pwqQidCR7bBMir37xF0LTA4xnrfYxbcNaDtK3cftNWdUDvxVdfajp1F53vP/I2yW1 1UPRSfwrIw== X-Google-Smtp-Source: AGHT+IH6rJt0wfLeJPiMiHwnzI36p7i6CSPeeZXjJ+xGQAfBfOTZvTzVkmdbhymPhSSJoz7GQoIjtw== X-Received: by 2002:a17:90b:1fc4:b0:2ee:7504:bb3d with SMTP id 98e67ed59e1d1-2f13a992eb9mr1574864a91.0.1733955942475; Wed, 11 Dec 2024 14:25:42 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:42 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 06/10] perf record --off-cpu: Disable perf_event's callchain collection Date: Wed, 11 Dec 2024 14:25:24 -0800 Message-ID: <20241211222528.945590-7-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There is a check in evsel.c that does this: if (evsel__is_offcpu_event(evsel)) evsel->core.attr.sample_type &=3D OFFCPU_SAMPLE_TYPES; This along with: #define OFFCPU_SAMPLE_TYPES (PERF_SAMPLE_IDENTIFIER | PERF_SAMPLE_IP | \ PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \ PERF_SAMPLE_ID | PERF_SAMPLE_CPU | \ PERF_SAMPLE_PERIOD | PERF_SAMPLE_CALLCHAIN | \ PERF_SAMPLE_CGROUP) will tell perf_event to collect callchain. We don't need the callchain from perf_event when collecting off-cpu samples, because it's prev's callchain, not next's callchain. (perf_event) (task_storage) (needed) prev next | | ---sched_switch----> Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ian Rogers Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-8-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/off_cpu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/off_cpu.h b/tools/perf/util/off_cpu.h index 2dd67c60f211..2a4b7f9b2c4c 100644 --- a/tools/perf/util/off_cpu.h +++ b/tools/perf/util/off_cpu.h @@ -13,7 +13,7 @@ struct record_opts; #define OFFCPU_SAMPLE_TYPES (PERF_SAMPLE_IDENTIFIER | PERF_SAMPLE_IP | \ PERF_SAMPLE_TID | PERF_SAMPLE_TIME | \ PERF_SAMPLE_ID | PERF_SAMPLE_CPU | \ - PERF_SAMPLE_PERIOD | PERF_SAMPLE_CALLCHAIN | \ + PERF_SAMPLE_PERIOD | PERF_SAMPLE_RAW | \ PERF_SAMPLE_CGROUP) =20 =20 --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 C2C1C1F37D9; Wed, 11 Dec 2024 22:25:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955946; cv=none; b=qqmlrMCL0Nl/vgupW+5r0SRiXdRcWRdSYP0FWTVrKksCBeMpPdSyUjzhHd7hKx1FM/+1hQNqQ4r85zaK/4FCKAwQLN1KVZSMn22KK2t61NaHWUQ5IdCgzTIVRZ2oA3xRht6CprTSJbgoz6htfnAdp9If7S+SIqJ/L76m79YAwaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955946; c=relaxed/simple; bh=jPBZDIKyif/LhOPbutvjTXCG2gTELlQErVsQ7/V8AdY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nQBS1xgPBaUJYX1NKA7fRSBoX0+xdKsIqfqIajkbCQZai3+Qd2HQkYAuLnCe/mCPDz7LdcK1hY1QKRnIHeBEDbLmHGm7crFCh9JPBRN2LJXxhDKFNtX4ErQMtDr77sEv81UP+yeYKWDMKYrHrWLnpc4jcnVmqVDkfN6amRDkgSU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KnxKlSII; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KnxKlSII" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2f13acbe29bso209149a91.1; Wed, 11 Dec 2024 14:25:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955944; x=1734560744; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=La5gJeu6ZE78YNZ93RwabxKj07+dQVqjVUHs1YuCsfc=; b=KnxKlSII58YTltPQAGUoTDV5zdIH3RzS5GGKsrNRZ5VyEM6T324xuE5XnX8z5YV+fz kmkJJ4ZIdxj9XuC8SabxAzx8U7kYhUoiIh/4N6ikwcztbn1y7lFj9IK1TTSKc9oHTEXW jwtiGxaSB8UZb6OALTuu3SKYAv+iCwnbkJyKd+20QJYkPd2t4Rhqz28+elQ/wVXaydsH WYM6AeXPfHOOf8wj3/Eb2MyKBehoomdbRqbGgRDCU9pxilYKwr7DL3lYVaFQvZwd9aYU rgSIQnTljKvwbzfrdkpVj2xmZnTiAo7hCYJJfjlsJyNwwQtHZvo1W/Hpqyrn8UyaHUTE g+VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955944; x=1734560744; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=La5gJeu6ZE78YNZ93RwabxKj07+dQVqjVUHs1YuCsfc=; b=hV4hUp+2jxm/qXXwVXNC7OTOvuGDxrjBAAHEuzoHznz2zM0OPbfzDn1vA1oF+8o+iR 1QyJx/1NU/WQ3ncXMtcLVSPyTybysN62wP1zmD6sJL23M01Ba42mRZcLuaKdqKDParxC mgjU8bClDRgm3R5AfIxftolSxvdwrYor269ktteUMz2uhTsjsFSd4OWTRkvcH3SoAPq1 olhd5ORIQd3JlnxoEuraFIEXfcBS69ST1TkcQpUgtFWPRumqTbPrxZFPBFp7lZwZGLOP eeC3oNNQ7UuRKGT439TZwLu3i/3sYZgJZcdLQ9O1BRJGNyOf8mXYBC0QzxHo+V9s2PJU zMBQ== X-Forwarded-Encrypted: i=1; AJvYcCUmS2GMLpJh5Kr8Ouujx1BCA9cnqHr0rEw7AgYaUvjolI3rzCEQgf4gL9gqON4tLo02jylBzCoxtysyOq0=@vger.kernel.org, AJvYcCXP+4FJQmdwDLFwggTMX/AkeC86Y7hWRkRWAik5A8H3rwVeIhAVkeauwYE7w0MxKVcfDRkfgoZZB2loGk93K5yogg==@vger.kernel.org X-Gm-Message-State: AOJu0YxZEk8zTrTBwZYrVeA4FTnHKKUaWn93ZOefb0GkK3rCaMRUm+L1 US06/eH/ehN2NmruS3Sc0lVzJblNMqza6JO3jx0Ng56ICcrpKLUP X-Gm-Gg: ASbGncsk/njgPAY250hM6OOx3T+4+4MWVQnFQNCCeCsrbwMQDvzksYRptXNJzcfZ1Pp YDUX9S/K87L1JFGkLu4Whn8urw0Q2PJ+UYUCeqj3Xf93X4CP4yEgWCTf7XgnpciHO4Si0DffleI I0Zz5KEslnX4kIL3fLZ98aOtOUdSC6CgePIMwOeMDwWwCyEJn0l/CawngotpozYsLJgSQ2EJvY2 ZhTL4R02/sm4zGz9tNq0c3PkzWb9DMkrrclLn3e5b0BDxnkZ4mBuCLfxWbyeXNeueuh65ZA7DVQ U3ux6H0/KQ== X-Google-Smtp-Source: AGHT+IF/SLTikBFyJhLZptjNJmimPwR1LUGFL5kS+037Eg0Fc7lpGmn8NoxxgLF9Raz7qbLzp8F2cQ== X-Received: by 2002:a17:90b:3883:b0:2ef:7be8:e987 with SMTP id 98e67ed59e1d1-2f13ac5477fmr1392064a91.12.1733955944101; Wed, 11 Dec 2024 14:25:44 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:43 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 07/10] perf script: Display off-cpu samples correctly Date: Wed, 11 Dec 2024 14:25:25 -0800 Message-ID: <20241211222528.945590-8-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable No PERF_SAMPLE_CALLCHAIN in sample_type, but I need perf script to display a callchain, have to specify manually. Also, prefer displaying a callchain: gvfs-afc-volume 2267 [001] 3829232.955656: 1001115340 offcpu-time: 77f05292603f __pselect+0xbf (/usr/lib/x86_64-linux-gnu/libc.so.= 6) 77f052a1801c [unknown] (/usr/lib/x86_64-linux-gnu/libusbmuxd-2.= 0.so.6.0.0) 77f052a18d45 [unknown] (/usr/lib/x86_64-linux-gnu/libusbmuxd-2.= 0.so.6.0.0) 77f05289ca94 start_thread+0x384 (/usr/lib/x86_64-linux-gnu/libc= .so.6) 77f052929c3c clone3+0x2c (/usr/lib/x86_64-linux-gnu/libc.so.6) to a raw binary BPF output: BPF output: 0000: dd 08 00 00 db 08 00 00
...... 0008: cc ce ab 3b 00 00 00 00 =CE=AB;.... 0010: 06 00 00 00 00 00 00 00 ........ 0018: 00 fe ff ff ff ff ff ff . 0020: 3f 60 92 52 f0 77 00 00 ?`.Rw.. 0028: 1c 80 a1 52 f0 77 00 00 ..Rw.. 0030: 45 8d a1 52 f0 77 00 00 E.Rw.. 0038: 94 ca 89 52 f0 77 00 00 ..Rw.. 0040: 3c 9c 92 52 f0 77 00 00 <..Rw.. 0048: 00 00 00 00 00 00 00 00 ........ 0050: 00 00 00 00 .... Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-9-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-script.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index aad607b8918f..87b2cedc1cbc 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -662,7 +662,7 @@ static int perf_session__check_output_opt(struct perf_s= ession *session) =20 evlist__for_each_entry(session->evlist, evsel) { not_pipe =3D true; - if (evsel__has_callchain(evsel)) { + if (evsel__has_callchain(evsel) || evsel__is_offcpu_event(evsel)) { use_callchain =3D true; break; } @@ -2358,7 +2358,7 @@ static void process_event(struct perf_script *script, else if (PRINT_FIELD(BRSTACKOFF)) perf_sample__fprintf_brstackoff(sample, thread, attr, fp); =20 - if (evsel__is_bpf_output(evsel) && PRINT_FIELD(BPF_OUTPUT)) + if (evsel__is_bpf_output(evsel) && !evsel__is_offcpu_event(evsel) && PRIN= T_FIELD(BPF_OUTPUT)) perf_sample__fprintf_bpf_output(sample, fp); perf_sample__fprintf_insn(sample, evsel, attr, thread, machine, fp, al); =20 --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (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 7005E1F4706; Wed, 11 Dec 2024 22:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955948; cv=none; b=hsiu4PUjIVhEVcM/20lzY8p4eiwKgKv8QFbNewwb1hsd/9WUT2mQ1SIiFiI6cX3VaZEkZ3xQ8HdMvym9ZrcmWPaMz2L9qEbaFXdlIQuHOtrmVrjRQ+vWBXMlj4tvJQAStBYlBpZWlf0Ismji4ahtVUXy3qGM/ds9fOKQ/G8mA88= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955948; c=relaxed/simple; bh=goTdjk11qmBk6a5P1AA+giS5yljV5oLTjYAh1YgVF+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bE2RwxShss77qTvrIHI8R1CTHMr6TVzKayMbGj9G4V0tTiuUvioftdMI2ZXeFQTm8nxukfA0aClet7I2/+hOdQylPc0YckOmIfHerjFeZzVs2Glu2riR0C14yyVgZQYHQvx19zPnko40ci3qDQM3LKDiopY/wKU/vF0ad3rkxvA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WQJLyEGo; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WQJLyEGo" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2ee51f8c47dso5332929a91.1; Wed, 11 Dec 2024 14:25:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955946; x=1734560746; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L7PbFB0EtVCviJ5bhbaIb04d6odUROmdh06maH/pBNc=; b=WQJLyEGoXaVWq5aw74S0ZbpsrrwF3EN6ek54Uplwu5yf4arh4HKUOmvHdQAFY0W/hN 1AdHM9h8nbM1XUZhm3yzcx8OPxAYSO8vSEFjo0QpAkHyGVo/xwntE/hI33/G92i0+hlX boHoNNeerd2Xal0dVWnFSqWwnry118KwaGFN846cXsb0pmtQ3a4993+4yYmgB4ISqDU+ HnMJMuf/44mIhp/Xi1dBXAdDhSKe5ZNEM3q7sssQeFW1xpPTBQjbs3eOGQ6VvlMEEKKO 7F1wU5Mn05ys1s9Uchp2oo9OQZZebr2SauYepTeloLiPgymZBXdm9Cxl1iGf9vJd5OlY 5Syg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955946; x=1734560746; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=L7PbFB0EtVCviJ5bhbaIb04d6odUROmdh06maH/pBNc=; b=GFkml30VUghsIsM50nLvKdg9uyZdUoxrG7QSdYq4xSCz+yCCCrc3CEwlTVJ6YfUE6P x0T84vfshffJ3Q2s4PquXV8GJ2fVnB3SRL20CEMxkxlIAaO1O0js5Zlm4RpS1w8Q2PCw cI3suFMEyPzesLfr4Tpv7/Q8g6cgrucG95VHclTC3rexq0g6mdRy0ZAXdKA09o5I/cbB 93H9qf8wlmd3rglvkKgtb0Z+6eYH8XCWJEvidChOCAJkMwWhG276upgTZ8efEc/hfVdt 5Cm+JUN+YjTgHvPMC7ajRM+6Y7W+/T0xGOtV/WtDIfZcjg5H8OC841/npKCMjBsLlMQT gHYA== X-Forwarded-Encrypted: i=1; AJvYcCUFANJGwkYP8l9exRn4ayk/NpJ7snJ2E6mUBVeljrMbMo6L2ddfAGJn7KKEkNISjpzbfeBODtAuRHsLGtWV9AIlCQ==@vger.kernel.org, AJvYcCUqdgR+LOWfWgdoxg9TMRn8BQ5F6oUJIT2bp+CY0mAfJqOMkhXrmyd6zbiwJADuz61H3CTmpzcST0FevFI=@vger.kernel.org X-Gm-Message-State: AOJu0Yze3FlySko3ER1jEC99n2RaEEn+ziq5w5kayWaJxesUMcjA0/UT bVCsV55CTaq9oxyYcerL2FOfWF8W2lzzvn1QncuKXXk4uURmb2ov X-Gm-Gg: ASbGncue4rfIWrWsQ5D4W8yzU+1Mi/GJC+OvPlAw68Ju2pNKYDAP9l/HrzGF5SvZCQx FCNM+Bi6KT+rIVyAZgWcvqOg1CSDIQukyXCYTRjuHzaGi4lNlpoed+7Fh1dS7NQWx5S3x9obh2I 0ZxpE4HwT0ygjtnPS/FNnb6l5jy72XAktw3UXBMRui4I+VhQ9odoN/Z4wlH9pOgxNeIl0cbC5BI ZSzc8HIk2IKKu6ojuMS/zGe166h5yCYM9fMgnaSp14sMGFMKwZg537/5YeNr2WUg/5KiubCgJ5g 24OZfrd6Tg== X-Google-Smtp-Source: AGHT+IGESFebilgK8NsdZlHdrxnoXg8SNLXC+f0KsTa2W/4KdO47LHGLBZovz1fcij05Nrx7h6uafA== X-Received: by 2002:a17:90b:3a83:b0:2ee:e518:c1d8 with SMTP id 98e67ed59e1d1-2f12808c035mr7184244a91.30.1733955945712; Wed, 11 Dec 2024 14:25:45 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:45 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 08/10] perf record --off-cpu: Dump the remaining samples in BPF's stack trace map Date: Wed, 11 Dec 2024 14:25:26 -0800 Message-ID: <20241211222528.945590-9-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Dump the remaining samples, as if it is dumping a direct sample. Put the stack trace, tid, off-cpu time and cgroup id into the raw_data section, just like a direct off-cpu sample coming from BPF's bpf_perf_event_output(). This ensures that evsel__parse_sample() correctly parses both direct samples and accumulated samples. Suggested-by: Namhyung Kim Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-10-howardchu95@gmail= .com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/bpf_off_cpu.c | 59 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c index 2378fb5a893f..d6f015362e85 100644 --- a/tools/perf/util/bpf_off_cpu.c +++ b/tools/perf/util/bpf_off_cpu.c @@ -37,6 +37,8 @@ union off_cpu_data { u64 array[1024 / sizeof(u64)]; }; =20 +u64 off_cpu_raw[MAX_STACKS + 5]; + static int off_cpu_config(struct evlist *evlist) { char off_cpu_event[64]; @@ -309,6 +311,7 @@ int off_cpu_write(struct perf_session *session) { int bytes =3D 0, size; int fd, stack; + u32 raw_size; u64 sample_type, val, sid =3D 0; struct evsel *evsel; struct perf_data_file *file =3D &session->data->file; @@ -348,46 +351,54 @@ int off_cpu_write(struct perf_session *session) =20 while (!bpf_map_get_next_key(fd, &prev, &key)) { int n =3D 1; /* start from perf_event_header */ - int ip_pos =3D -1; =20 bpf_map_lookup_elem(fd, &key, &val); =20 + /* zero-fill some of the fields, will be overwritten by raw_data when pa= rsing */ if (sample_type & PERF_SAMPLE_IDENTIFIER) data.array[n++] =3D sid; - if (sample_type & PERF_SAMPLE_IP) { - ip_pos =3D n; + if (sample_type & PERF_SAMPLE_IP) data.array[n++] =3D 0; /* will be updated */ - } if (sample_type & PERF_SAMPLE_TID) - data.array[n++] =3D (u64)key.pid << 32 | key.tgid; + data.array[n++] =3D 0; if (sample_type & PERF_SAMPLE_TIME) data.array[n++] =3D tstamp; - if (sample_type & PERF_SAMPLE_ID) - data.array[n++] =3D sid; if (sample_type & PERF_SAMPLE_CPU) data.array[n++] =3D 0; if (sample_type & PERF_SAMPLE_PERIOD) - data.array[n++] =3D val; - if (sample_type & PERF_SAMPLE_CALLCHAIN) { - int len =3D 0; - - /* data.array[n] is callchain->nr (updated later) */ - data.array[n + 1] =3D PERF_CONTEXT_USER; - data.array[n + 2] =3D 0; - - bpf_map_lookup_elem(stack, &key.stack_id, &data.array[n + 2]); - while (data.array[n + 2 + len]) + data.array[n++] =3D 0; + if (sample_type & PERF_SAMPLE_RAW) { + /* + * [ size ][ data ] + * [ data ] + * [ data ] + * [ data ] + * [ data ][ empty] + */ + int len =3D 0, i =3D 0; + void *raw_data =3D (void *)data.array + n * sizeof(u64); + + off_cpu_raw[i++] =3D (u64)key.pid << 32 | key.tgid; + off_cpu_raw[i++] =3D val; + + /* off_cpu_raw[i] is callchain->nr (updated later) */ + off_cpu_raw[i + 1] =3D PERF_CONTEXT_USER; + off_cpu_raw[i + 2] =3D 0; + + bpf_map_lookup_elem(stack, &key.stack_id, &off_cpu_raw[i + 2]); + while (off_cpu_raw[i + 2 + len]) len++; =20 - /* update length of callchain */ - data.array[n] =3D len + 1; + off_cpu_raw[i] =3D len + 1; + i +=3D len + 2; + + off_cpu_raw[i++] =3D key.cgroup_id; =20 - /* update sample ip with the first callchain entry */ - if (ip_pos >=3D 0) - data.array[ip_pos] =3D data.array[n + 2]; + raw_size =3D i * sizeof(u64) + sizeof(u32); /* 4 bytes for alignment */ + memcpy(raw_data, &raw_size, sizeof(raw_size)); + memcpy(raw_data + sizeof(u32), off_cpu_raw, i * sizeof(u64)); =20 - /* calculate sample callchain data array length */ - n +=3D len + 2; + n +=3D i + 1; } if (sample_type & PERF_SAMPLE_CGROUP) data.array[n++] =3D key.cgroup_id; --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (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 2B2181F4E48; Wed, 11 Dec 2024 22:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955949; cv=none; b=ZmxfDSWLcK7QiJoBphET6ZNWvR8EvmtryL1WmGZN0UmaTadgcx2lG1GR2pG2NY+Yus52IVhnVlA2jIgm4plBefZKWRrAs3aXTryGSuWkHq1xxFdyG0fo4Xyio7Xj5a+oVTDPHvTnCpTYWfyaLNpV8nlKHzENC1bmrZEgWZNzlvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955949; c=relaxed/simple; bh=foSgLTZyTs4SVotNFY43ppSIAy4gTLpyUpH0qpfuhUE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=au6AI8BMs2bXNcfzou651KJ8+IxB4959tWpR/EBp/WjQJhDzDhVohPiU1BnuvntyI2y6zwg1PlpP3XM2DUlQrntIyO6ax/9B+cR6xaixSEfzjETuQVtlhv+M/z9JgNpw3i7XH/nwcb8L+ewru1UGj4xKAsiUhAivEDq9CS36rU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BifEZXQ4; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BifEZXQ4" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-7e6cbf6cd1dso3856a12.3; Wed, 11 Dec 2024 14:25:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955947; x=1734560747; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d4lb0Q0vjscdmvfAbqYffPP3ZGMItoDtlGIbQQlVEN4=; b=BifEZXQ4wSRshYTuixxfmF1vzXInI37SPiaJ3r4SDXJ6k7Tm9d5v+L3/U0HJFYQW7u hnRz2522SYYoPQLlKpgajHKjdx8mGVVS4TaK/S2lgUohpgVWFx8V1HkQP9GPFZ5q9po7 f13+z4nq5sIwPt9SJrlsuMTGR5YGuCSGLrhibvlbAIt12FgRrxDeU/8COq7tBarB3yb8 nMt97WGBaBJdcA0RWsJ8S7pgzyn2h+8PYw8UI9xO1ms2uTqFA4q303geAN0c6QJW2+lj gbaiK8jxUxD2HgT5f2cOzsPvkCPS4AdJJbaAbWO6lglEiyJCpbcSecMZrPgvKhweWo/U n9OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955947; x=1734560747; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d4lb0Q0vjscdmvfAbqYffPP3ZGMItoDtlGIbQQlVEN4=; b=cCxr/CyPOJzIKD7jh+ghxLl+uigQbelS8Qe/R4Bw3J17EjPoijx5YvY1+usB9OpiBZ I+BTMK4coAFxG8R/3yVcKVyjjUSCwF1F/weqLw4kJBU51H+T4TALgdhZP0P/72G0RJBN 1dLPu5IH0KRS1cjROySoIDKI/Ce1aKDQJDDGvucHfdPg47nUdMu5TjNDyoLnDhRpT2sU +iONAUStUH+Cmyf5FwD8oYSvdNjxHRQ8VdV25MgYfrETc2msRvFsCDESnTX+4bvIcSy6 2ryJn7wlxmfpFRdAMi6QbvtO+rAXm9bs3UhPlK0sUoimX6wPIs3DqxR3Pq3AV8bQaL58 +NFw== X-Forwarded-Encrypted: i=1; AJvYcCUwoaUt14DbNrDmWwkoOBekR5UWRu/rOWeLXA7FJd14jQxkMj+GsSKLims+TfCLwYqQgddqI4h6kTWhQHE=@vger.kernel.org, AJvYcCV1FNtP4QR9GHIXjWus8LJBAJlHkYRP0ZTH00YCr4v5csdx5IXOeCabMrj/Pg8pzNrxlpVUxDp7Au7o0zPnOsav2g==@vger.kernel.org X-Gm-Message-State: AOJu0YxlYhBrvMIKn3ozirmp8KB/vZeQPy5sHeKDBrhbzNNk+wdIIemY ymsOV9pshH5aOwFfw4DhQ6xn/ewxBo9Gxk2REvGYljqVLxbQI5Ac X-Gm-Gg: ASbGncs/C1yEsowJt+fSEw2jf0pPzCepaFEwbk5P5LksPTnKOPMg6UsDY/l8sgubjFn lIY5IOiqebVBMUjHnGLextONXXiELTOXSP80qYGiDJpfz/YrKYr4CWSFDDtBUBIDWe/u4LiT2U7 wTQoy72E5DOQRU34G7MGJ1Z90j+iEx2IWZh2cONmK0p6HRiMVki8R2XhGaiTm+UfTyfGmiPuui4 8SRZCWAPv1NqEDog/YSY+r/dZxArzLC3FjYwhGqJqmkxG5xyjib9xC9KIhe6liXsf0omIIEIzy1 FV1pYMSuIg== X-Google-Smtp-Source: AGHT+IEQR+TrSIMN1+lFgTdMrU158AQekRti9afO/P/19O8IjxAZYsGm0151dIU5v1t5dGtz6JkaFg== X-Received: by 2002:a17:90b:3e89:b0:2ee:6e22:bfd0 with SMTP id 98e67ed59e1d1-2f127fdbf24mr6186031a91.21.1733955947399; Wed, 11 Dec 2024 14:25:47 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:47 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Arnaldo Carvalho de Melo , Ingo Molnar , James Clark , Peter Zijlstra Subject: [PATCH v11 09/10] perf record --off-cpu: Add --off-cpu-thresh option Date: Wed, 11 Dec 2024 14:25:27 -0800 Message-ID: <20241211222528.945590-10-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Specify the threshold for dumping offcpu samples with --off-cpu-thresh, the unit is milliseconds. The default value is 500ms. Example: perf record --off-cpu --off-cpu-thresh 824 The example above collects off-cpu samples where the off-cpu time is longer than 824ms Suggested-by: Ian Rogers Suggested-by: Namhyung Kim Suggested-by: Arnaldo Carvalho de Melo Reviewed-by: Ian Rogers Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-2-howardchu95@gmail.= com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/Documentation/perf-record.txt | 9 ++++++++ tools/perf/builtin-record.c | 26 ++++++++++++++++++++++++ tools/perf/util/off_cpu.h | 1 + tools/perf/util/record.h | 1 + 4 files changed, 37 insertions(+) diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Document= ation/perf-record.txt index 242223240a08..f3ac4c739d5f 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt @@ -829,6 +829,15 @@ filtered through the mask provided by -C option. only, as of now. So the applications built without the frame pointer might see bogus addresses. =20 + off-cpu profiling consists two types of samples: direct samples, which + share the same behavior as regular samples, and the accumulated + samples, stored in BPF stack trace map, presented after all the regular + samples. + +--off-cpu-thresh:: + Once a task's off-cpu time reaches this threshold (in milliseconds), it + generates a direct off-cpu sample. The default is 500ms. + --setup-filter=3D:: Prepare BPF filter to be used by regular users. The action should be either "pin" or "unpin". The filter can be used after it's pinned. diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 0b637cea4850..4d0d9e36a421 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -3147,6 +3147,28 @@ static int record__parse_mmap_pages(const struct opt= ion *opt, return ret; } =20 +static int record__parse_off_cpu_thresh(const struct option *opt, + const char *str, + int unset __maybe_unused) +{ + struct record_opts *opts =3D opt->value; + char *endptr; + u64 off_cpu_thresh_ms; // converted to us for potential future improvemen= ts + + if (!str) + return -EINVAL; + + off_cpu_thresh_ms =3D strtoull(str, &endptr, 10); + + /* the threshold isn't string "0", yet strtoull() returns 0, parsing fail= ed */ + if (*endptr || (off_cpu_thresh_ms =3D=3D 0 && strcmp(str, "0"))) + return -EINVAL; + else + opts->off_cpu_thresh_us =3D off_cpu_thresh_ms * 1000; + + return 0; +} + void __weak arch__add_leaf_frame_record_opts(struct record_opts *opts __ma= ybe_unused) { } @@ -3340,6 +3362,7 @@ static struct record record =3D { .ctl_fd =3D -1, .ctl_fd_ack =3D -1, .synth =3D PERF_SYNTH_ALL, + .off_cpu_thresh_us =3D OFFCPU_THRESH, }, }; =20 @@ -3562,6 +3585,9 @@ static struct option __record_options[] =3D { OPT_BOOLEAN(0, "off-cpu", &record.off_cpu, "Enable off-cpu analysis"), OPT_STRING(0, "setup-filter", &record.filter_action, "pin|unpin", "BPF filter action"), + OPT_CALLBACK(0, "off-cpu-thresh", &record.opts, "ms", + "Dump off-cpu samples if off-cpu time exceeds this threshold (in mi= lliseconds). (Default: 500ms)", + record__parse_off_cpu_thresh), OPT_END() }; =20 diff --git a/tools/perf/util/off_cpu.h b/tools/perf/util/off_cpu.h index 2a4b7f9b2c4c..f07ab2e36317 100644 --- a/tools/perf/util/off_cpu.h +++ b/tools/perf/util/off_cpu.h @@ -16,6 +16,7 @@ struct record_opts; PERF_SAMPLE_PERIOD | PERF_SAMPLE_RAW | \ PERF_SAMPLE_CGROUP) =20 +#define OFFCPU_THRESH 500000ull =20 #ifdef HAVE_BPF_SKEL int off_cpu_prepare(struct evlist *evlist, struct target *target, diff --git a/tools/perf/util/record.h b/tools/perf/util/record.h index a6566134e09e..2ca74add26c0 100644 --- a/tools/perf/util/record.h +++ b/tools/perf/util/record.h @@ -79,6 +79,7 @@ struct record_opts { int synth; int threads_spec; const char *threads_user_spec; + u64 off_cpu_thresh_us; }; =20 extern const char * const *record_usage; --=20 2.43.0 From nobody Sun Dec 14 19:18:49 2025 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (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 B95601F63C0; Wed, 11 Dec 2024 22:25:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955951; cv=none; b=RYbg+CvF467WmNgS5/40nABgvYe7jFLAW/ONvzp4JpsxdRt7POO/Mh0M2wNxhjS/LDjZuMrP8UPjPYtdbr858JhGZ7/pAN6Jq5HaLPqFROY4nR3td2DVnet8gBF5LuM4mmfp54l5tszBN4JJbzhDFoM8qyozA7RBpJVzs9EDAKk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733955951; c=relaxed/simple; bh=fk3U5R0mb2SGsJQOBzOHol5ZzILTnf2AqVHElPU/gK0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZiXhDz4it0EgSWCXlZYS83HBEETW3k41CmMRwiQC1ieRf0kHtXMk6FrP4byd0Qad05kSGsPnJWguffk7NLEwZZSz4UCQIPlss28jkOP5uP7XbeC8B7NLB6QtoZEfbP8PI49C1AANcjm5TtL5Kice0U76qOY9QSsc9hFeALr3mWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mThNAhgv; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mThNAhgv" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2ee67e9287fso6492633a91.0; Wed, 11 Dec 2024 14:25:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733955949; x=1734560749; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5O/mxMoka0idCukTIL5JDxkmARERO0QsLTM8t6jJJsc=; b=mThNAhgvsrR0FfSbb1kZ6uhD7d3Iple6twpbxqKddl7zoK0Pz0GEJS/Gx81vV+nW3n Bi+5gwDLG9okXp4R94q5bHEax5BrIqk1Zk8paUdf1QyiLe0iNJHd+YAt4j9vP++w9aRb x+iCsw9p/FinPrYVPfdweKpdSqCzp8EfbhXXdiQi767vch6vD3XBWGZ/LzRgjv1VfVKT +s3FT2ura6sCpRiujzJZuGOpVnocc7vUx+lAjL03e6cxbN6wdh9L73mznOSxgyMHvBHK 8veWOxNiY5HjjF+AweE60EVzD/qegXpXeFQAz5f8LCWh5Dx/iGrKA7W4xAfUSCAn2vGz MQ7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733955949; x=1734560749; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5O/mxMoka0idCukTIL5JDxkmARERO0QsLTM8t6jJJsc=; b=jjC9dtLdK958lQktcce9DPjHYmMAdQvk+Fhn9ie1BcUZQXKaC2QSo4To7nXLMflsqH d1eRkpME19RHCkuXsVSvNat5h2DLmOOhyX/Q2goBbOtcQIYuUGqiFmAwzokzbnQxdd5k oHaTge6zCVO/ksjWGUOyOLpQZ5HuTIzbJftov/N8yel+dh3AmaVYaMl+XUhddiB3inPW xaJYu5O6U9VXYaQIxANXE/deNOazGMRQ+LoGJl1AQ5v8DfmOMk0UNLSYbiQYoTGONIvB 3nHBsohpocvyAYcWuLmYB4UEqY5uIeSCu/yjHpnG5ALZz5cDIwTHD/ELOdR+KGWRrsYP waTg== X-Forwarded-Encrypted: i=1; AJvYcCWaHWh+8ULaNgOmA8tP9Vpga3dGtg7YX9yJOOorCoqRV6ezAZ7Td3P9+yjTKhj7PWYW3abW+v+HSCjVyxA=@vger.kernel.org, AJvYcCXVcJ8iAwoDms8Zn2ftD0MdCHQd5MQiG9lJ6MYw+3JiFFo/ZYESLVMcTDzy0/v9mYWfN33QRzW/eZocf50MyeJ4UA==@vger.kernel.org X-Gm-Message-State: AOJu0YzSHZib25Pt80Q7KtujibtAjNrpGNDINvDK5uR0701pWIW0N99G HMEspRpdBqbTFMOVy5N3JgVvmfPsB+YjpSULqCdHeuE8lizX8Oi5 X-Gm-Gg: ASbGncsEPBdmdoVeu4utQLxUQIyx4rYtnbaXwEMlJ4VC4miCDWhqhhpRrMHkiDhuS/A 5OMsyo7DyYE7EwR/bF81ZCjN0lWXBwKtjOR3273/OUDCakicDfE9pb5mVzdJMZctNdeDwG6Gx0Z GaTEJRqsXVjn2+PIwpPxVEeUX+vmwh6mrsu63OZ/RN/95MuxzOGdruy7oj4pRnQDf4qtPsVE2wo VWBwOj9lhBs166wd2Drsuu7HaL+YeOx+zFNZG+hIp0VIHdKBAjLf9o8E6IhWBE8n4ZQajPHFnzq AbMedVMPYNnz X-Google-Smtp-Source: AGHT+IGhqnworwMDyl5Z4xUJUbflNw3VZlIqOIJWmVDLpLcc0lXTXJ7uAa43lQ3S+QGodOVPfTaUfQ== X-Received: by 2002:a17:90b:278f:b0:2ee:cd83:8fe6 with SMTP id 98e67ed59e1d1-2f13932900amr2550323a91.35.1733955949094; Wed, 11 Dec 2024 14:25:49 -0800 (PST) Received: from mbp.lan (c-73-202-46-50.hsd1.ca.comcast.net. [73.202.46.50]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ef6d1fd68asm11241561a91.36.2024.12.11.14.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:25:48 -0800 (PST) From: Howard Chu To: acme@kernel.org Cc: namhyung@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com, kan.liang@linux.intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Howard Chu , Ingo Molnar , James Clark , Peter Zijlstra , Arnaldo Carvalho de Melo Subject: [PATCH v11 10/10] perf test: Add direct off-cpu test Date: Wed, 11 Dec 2024 14:25:28 -0800 Message-ID: <20241211222528.945590-11-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211222528.945590-1-howardchu95@gmail.com> References: <20241211222528.945590-1-howardchu95@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Why is there a --off-cpu-thresh 2000? We collect an off-cpu period __ONLY ONCE__, either in direct sample form, or in accumulated form (in BPF stack trace map). If I don't add --off-cpu-thresh 2000, the sample in the original test goes into the ring buffer instead of the BPF stack trace map. Additionally, when using -e dummy, the ring buffer is not open, causing us to lose a sample. Signed-off-by: Howard Chu Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Ian Rogers Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Kan Liang Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Link: https://lore.kernel.org/r/20241108204137.2444151-11-howardchu95@gmail= .com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/tests/builtin-test.c | 1 + tools/perf/tests/shell/record_offcpu.sh | 35 ++++++++++++++++++++++++- tools/perf/tests/tests.h | 1 + tools/perf/tests/workloads/Build | 1 + tools/perf/tests/workloads/offcpu.c | 16 +++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tools/perf/tests/workloads/offcpu.c diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index 738ad32b2c8a..a79157593c8b 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -144,6 +144,7 @@ static struct test_workload *workloads[] =3D { &workload__brstack, &workload__datasym, &workload__landlock, + &workload__offcpu, }; =20 #define workloads__for_each(workload) \ diff --git a/tools/perf/tests/shell/record_offcpu.sh b/tools/perf/tests/she= ll/record_offcpu.sh index 678947fe69ee..73ce16d61b5d 100755 --- a/tools/perf/tests/shell/record_offcpu.sh +++ b/tools/perf/tests/shell/record_offcpu.sh @@ -6,6 +6,10 @@ set -e =20 err=3D0 perfdata=3D$(mktemp /tmp/__perf_test.perf.data.XXXXX) +TEST_PROGRAM=3D"perf test -w offcpu" + +ts=3D$(printf "%u" $((~0 << 32))) # OFF_CPU_TIMESTAMP +dummy_timestamp=3D${ts%???} # remove the last 3 digits to match perf script =20 cleanup() { rm -f ${perfdata} @@ -39,7 +43,11 @@ test_offcpu_priv() { test_offcpu_basic() { echo "Basic off-cpu test" =20 - if ! perf record --off-cpu -e dummy -o ${perfdata} sleep 1 2> /dev/null + # We collect an off-cpu period __ONLY ONCE__, either in direct sample fo= rm, or in accumulated form + # (in BPF stack trace map). Without the --off-cpu-thresh 2000 below, the= sample will go into the + # ring buffer instead of the BPF stack trace map. Additionally, when usi= ng -e dummy, the ring + # buffer is not enabled, resulting in a lost sample. + if ! perf record --off-cpu --off-cpu-thresh 2000 -e dummy -o ${perfdata}= sleep 1 2> /dev/null then echo "Basic off-cpu test [Failed record]" err=3D1 @@ -88,6 +96,27 @@ test_offcpu_child() { echo "Child task off-cpu test [Success]" } =20 +test_offcpu_direct() { + echo "Direct off-cpu test" + + # dump off-cpu samples for task blocked for more than 1.999s + # -D for initial delay, to enable evlist + if ! perf record -e dummy -D 500 --off-cpu --off-cpu-thresh 1999 -o ${pe= rfdata} ${TEST_PROGRAM} 2> /dev/null + then + echo "Direct off-cpu test [Failed record]" + err=3D1 + return + fi + # Direct sample's timestamp should be lower than the dummy_timestamp of = the at-the-end sample. + if ! perf script -i ${perfdata} -F time,period | sed "s/[\.:]//g" | \ + awk "{ if (\$1 < ${dummy_timestamp} && \$2 > 1999999999) exit 0; el= se exit 1; }" + then + echo "Direct off-cpu test [Failed missing direct sample]" + err=3D1 + return + fi + echo "Direct off-cpu test [Success]" +} =20 test_offcpu_priv =20 @@ -99,5 +128,9 @@ if [ $err =3D 0 ]; then test_offcpu_child fi =20 +if [ $err =3D 0 ]; then + test_offcpu_direct +fi + cleanup exit $err diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index cb58b43aa063..2e655a617b30 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -217,6 +217,7 @@ DECLARE_WORKLOAD(sqrtloop); DECLARE_WORKLOAD(brstack); DECLARE_WORKLOAD(datasym); DECLARE_WORKLOAD(landlock); +DECLARE_WORKLOAD(offcpu); =20 extern const char *dso_to_test; extern const char *test_objdump_path; diff --git a/tools/perf/tests/workloads/Build b/tools/perf/tests/workloads/= Build index 5af17206f04d..0e78fd01eaf1 100644 --- a/tools/perf/tests/workloads/Build +++ b/tools/perf/tests/workloads/Build @@ -7,6 +7,7 @@ perf-test-y +=3D sqrtloop.o perf-test-y +=3D brstack.o perf-test-y +=3D datasym.o perf-test-y +=3D landlock.o +perf-test-y +=3D offcpu.o =20 CFLAGS_sqrtloop.o =3D -g -O0 -fno-inline -U_FORTIFY_SOURCE CFLAGS_leafloop.o =3D -g -O0 -fno-inline -fno-omit-frame-pointer -= U_FORTIFY_SOURCE diff --git a/tools/perf/tests/workloads/offcpu.c b/tools/perf/tests/workloa= ds/offcpu.c new file mode 100644 index 000000000000..57cee201a4c3 --- /dev/null +++ b/tools/perf/tests/workloads/offcpu.c @@ -0,0 +1,16 @@ +#include +#include +#include "../tests.h" + +static int offcpu(int argc __maybe_unused, const char **argv __maybe_unuse= d) +{ + /* get past the initial delay */ + sleep(1); + + /* what we want to collect as a direct sample */ + sleep(2); + + return 0; +} + +DEFINE_WORKLOAD(offcpu); --=20 2.43.0