From nobody Sun Dec 14 19:13:30 2025 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) (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 32F2213D52E; Thu, 12 Dec 2024 02:24:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970292; cv=none; b=PdbQXRZbRz9pizFRsdfbAv+xN7awFaEMhjylMB2LXUeTAOY4gbEd3uTboGpzLj08I2CoLDyS4k97LFHP+MRkc2OJrzrmk9rnYh2YMeNLi6H7VSd5yZRiBgQUsyy359p2GpjyQKhY82yHbodPMU7m1t8XY1tB41uW1yc9hcBoM98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970292; c=relaxed/simple; bh=5zwcrkCXWGsnxL/5mROAo6TlhYsXoTqe91xEFV/fnQY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jy+XTd6ypcBPQXV9dubVz2O+6JQZO9HaiBFSR8y+XhSXVD8H4ZfIto1VgREt0KVnLkZT4QekFIvZ+ASZ9YQj8CMZUaroYlu18x9xm05nFnJXlg71KrUbtKNh5X6JXSQEpanbDmrYKHLKAQfeu86aCDec4oj8b9GTX4cHN8uNn4w= 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=i3nLmZAl; arc=none smtp.client-ip=209.85.215.180 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="i3nLmZAl" Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-7f4325168c8so80854a12.1; Wed, 11 Dec 2024 18:24:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970289; x=1734575089; 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=i3nLmZAlt6j8DpcH8Ws+2b0IuxS+hcDlgt1xzyDwdJ9TZ6wp3LL2axekIEjhN1e4vp Dc5ZhMe7amg8ZY4KmY1K5qkqoHxnlvOvcNUjWRuMIO/EHGzVVgEQvoPNtyz62aATEV/o QG/gQVrRQsa4/NIStBf91f+KfooInE6sPF2GDamCr0tPo7mdaFPdqXdvvt/a86Agqf2U n3gcPV9nXUFLU4CQt5fNHpJP5eiXPpCJsvpyF7aT7dPH4G9d2vzzoxYflCxY7GrzU06H Hm0VvANhmqnPkwWUQDjmhLN9Hfp3jGGn7TKj7wDBkMYzQY+DQlzAXz4V/gARUYcEFM1k 2YeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970289; x=1734575089; 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=vDfSGTYRUZ5bpkLWwrIxpWIUn3mNNFo6GjkpEVEPBf4otgK093C/vqXoHtKnONRE+c bx0uGY++KNiKKIEjbPlte4VHYX9Rp6hY1prZIvXdztjy0n7HNznBATcbOcg+atSqvbET oF4OPsPsY05qOi75NQgwls0/iCojVzdwwnrNwNECDi68a2+VoG04U1xeSebXW+iqCtth n7EUiDV57Hmesw5RF75IKzePyDsDMfF7yIpswOMa/Yt2TLgZizd5IM9Qzu5SRbu2YcZc yniQSo0Zqan3mwFBiGqFc1nEdPuhyTeNOUVRHuxR35KCuMQb1pNHVMl9CY4X6fGsSg6j iFww== X-Forwarded-Encrypted: i=1; AJvYcCW+4LYtGiVJODTSdjoE1iPiclemYrD1P58y6557puO4iw/m71s7OffgP+30I9qVrdrr2KMUDpypHK/AVM8=@vger.kernel.org, AJvYcCWMAs6HY04FJzeHQiGBK17Bs7WUsb9bnFC8cJDUxw8Eyh/jh2vXbviMRE/20L+3JLPPG7swZGdByLvt+G7husVQsw==@vger.kernel.org X-Gm-Message-State: AOJu0YzWSajAlY6p19s/KfkhnGNPvgdqMTnaZbo8cSYPghxDNXO7xbRT W8xKI5tnKgjt2vTxS5Ao5pGMXLyfTCVx8Cy58y2Q8bW06hKM6jQm X-Gm-Gg: ASbGncvivIRZWORsV6RnnixNku90j+NimmnTHvMd2t7UBV83pScMXnBDIMSRPipiomi C1TxXK+mxNMoLpi+zeM1f7kwm+hQtujjVJM/4TS8dPqATwy+igtIFsxVntIMxnlxZDO1CiWKG6D CLotVLQbXjDaM/Dk9d60gerCzH9sW/zIoH3dp1V7Y3TlV+U0qUwVlGMfpVuVn9vbmNqUYnBI/p3 SNPRLSWARppfP+Hl89WT3D13MSzngHAXCtpZRyoHLqAxi44mixjNaaQ2Q+7SaMadLOIKXo3NmIG q9lZpnM9QI3F X-Google-Smtp-Source: AGHT+IELXO60Bkh4b1mndJoBmPnXdfq6ZucHN67LrRRe4LU1C0jC34ARCKyyjKcMMDGnIY7QGNL+HQ== X-Received: by 2002:a17:90b:48cd:b0:2ee:fc08:1bc1 with SMTP id 98e67ed59e1d1-2f128044e4dmr8387605a91.37.1733970289370; Wed, 11 Dec 2024 18:24: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-2f142daeb5asm112583a91.12.2024.12.11.18.24.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:49 -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 v12 01/10] perf evsel: Expose evsel__is_offcpu_event() for future use Date: Wed, 11 Dec 2024 18:24:11 -0800 Message-ID: <20241212022420.1035999-2-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 2025 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 41CEF13FD72; Thu, 12 Dec 2024 02:24:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970293; cv=none; b=OSiYVsYrjCINrYFpE4anSlTkKETA4NNs7u/MpXXdtrFuD6PyCXUAbXUp77+TgUIFkU1/GCNe36jJfrps1s1ngNvktvu5YyHx74ucsQkaQJ4Bt8kdLeY1dNcVSSP1cIBrNN3+WIWHru8EswfSyD3CRJCwzDyRZdzNdvUszm/vIsI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970293; c=relaxed/simple; bh=CtXvBuHZ10l+NOVrLXSjeix2nXsWB6v1qq32icek0/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dXtqkBsJ9SA/BJZ9d9FBfsHwempcqwWZjmTfRZ0iKFqfz15q3e0zNLCtGAHYm/z5/eQZmBKnbt9HzhzK6gUO5NmNC8QyM4GJRdT2ZiWetKTrQ9HLwkUZMAO0uPVuJnhsVf/kRJ2gqEJpUHwrtidmGAHreK3+cbwPcDYxMIu8Bps= 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=Wm3Ogs9I; arc=none smtp.client-ip=209.85.216.50 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="Wm3Ogs9I" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2ef6af22ea8so80937a91.0; Wed, 11 Dec 2024 18:24:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970291; x=1734575091; 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=Wm3Ogs9IS6wknDlnh+e4qjswodhuQpnVNp2QMYsgDo/0yU9iXpWSJkpToLuUVmcLtK pxr/A5YPVM8WdPXWKxLU9YXQ0j/bzU3Z0FnafCfCHQPXyox8VSTjlNylR5Vt0zUErMSg xPVtzFq/oKwKxyeHmk6F0mjLCS1r/XwB8DXxVy/rc2Wn1wXa1X6Kg1y8Fkr+K7LxMTFb e146EtJ5ZE/w41TNWNyyk/m37DmLMNe/v9KO3R9iR1jdkTDHccaz7Hvgw4r4qXgxOl4a svsSyX+xn+qJhkIp8ZB7m0zeVPuiKpqjhWz+GRtbJHlfXPn8vmKRhjzgKNkDiaOw27Ws LKeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970291; x=1734575091; 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=htnnejndgdywO0Zc1kxYnLBEo/f3B1N1D3BsZlJxGNATXcrii2EVmlXuArbzlHwUdC zfLxXxG8obVs2zBH+5t/tBntafMat3IhJo/4jDPA/ayN1xQwobwkYx7ae6LMBl9DIpIx x5YQJyVcTwI6XPZUBmnDPqffpfbwH5a6DT49r+luLEt6z0hAUoaw+NwF6Yv8V+snxjk0 jcW9N/BWKNufFmrV9dQ2isBM8ad3wRhJwxegdNDfA1CeCs/yWYzefSFpJqEP8HX6briu FFOj/vv7ybrhJDz8RcTt5B+WHmO3uC+Gcdne1O9/lIoRFQBhTXQNjDoxtMgfTz9WN+hC WSyg== X-Forwarded-Encrypted: i=1; AJvYcCW0Vo919h5twRnkCswIJ4FiLdI0p6ClKmsytiRN3pBle2X/uoPlWgZdZMxbR3l3+dXzeEUah7OCh1ggheMDhCx0Og==@vger.kernel.org, AJvYcCXvz5jkJDbLCGGFu1q0YAyNlcK+5WIGfvz2kiHKkM9FbGDIoL9YNfPnxuQ3bwdYumheNcoGBONRYYvj4Ik=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/N62LoHMeVgornGvYav2V/7Ox1GMhO+05N1dUwygd34SytUNX 61wi1pmn3M3CcwTfcGsnLHYUs7ww7FqaoH7NMvapnvPRnjFKsxGk X-Gm-Gg: ASbGncvbGRFkytnDZp8/qUgIwEzowuSOLkBJ+rBxJkYJqFccYMS8e0tlsLI8klKntWR EgufFV0IpGy/cKXQGFJoVTTuqbrupekRjiAyXxJ6QfWrSR9VeEqo1R+RNASvAlKvSprreMYUogj xVFuoL4EUUdUhj6z5hR8y47K54Pa3h3nUBKblZ8VMCom5hkd2zxlNFyQ/a6XuPGojQtIC5cEmp4 gNpuGVAY0zmkBwRFxKaH3Dw+lfL25pTzwK2sgE9i4AjrGW/gfBvAnisv3tCOv2Dv/qR5l6bD5iD Y/TAU1IK+WeX X-Google-Smtp-Source: AGHT+IE+/oat2IgwgeCHE3rUz+5HuC4oZYmkyEpFxUt2JkzzjN1GQ3Yt6oatxYmBWIM7KfyzHBF4HA== X-Received: by 2002:a17:90b:5111:b0:2ee:9d49:3ae6 with SMTP id 98e67ed59e1d1-2f127fc46ffmr8343469a91.10.1733970291386; Wed, 11 Dec 2024 18:24:51 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:50 -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 v12 02/10] perf record --off-cpu: Parse off-cpu event Date: Wed, 11 Dec 2024 18:24:12 -0800 Message-ID: <20241212022420.1035999-3-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 2025 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (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 DCEC1152196; Thu, 12 Dec 2024 02:24:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970295; cv=none; b=okrMztc7TP7HeH1p8EEXec8kWEk3mLVLWFePnG4AYzP4bUPKuLxEw7fMKqMxYaRQM49m0sEvXys9bSOltkCEfdBloGqTChCkWsA7kcyJ58HlrX/JD6zzKhC2ZcNEsvTz742BrFVOnaZyXz4oRwebdG+v68tY5ZypRUgH3KRQFuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970295; c=relaxed/simple; bh=X78f+c1TDnm2CEdrRJd3WavyM72MSbW/aHQcCoAKZRk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CAIk/yO70dDSr6KbkFhWmnjAgVOQTdmKqVjGC4GxZUzRoFGzADiM6N/MHHu/DkWJCcZo7NComTHQAQ4Gfa4/WABgxGMfbg576I59cod0F5dFb3d6ZgW2m83brKu09SBBQ7m1DfYQDrqY1w12R6TsdeTpGlpyunkcJ5FkFybxgbE= 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=N9MjJ3nw; arc=none smtp.client-ip=209.85.215.175 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="N9MjJ3nw" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-7fd2ff40782so143527a12.2; Wed, 11 Dec 2024 18:24:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970293; x=1734575093; 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=iRKO0sSW06Oh7i/UgLwemlC4hofAQlpyGMLJXo3S+e0=; b=N9MjJ3nwc/9DSOXjkBFlpXnEzCcTsOvMPTGHWzJzCZB5OCL1s/szdY4KutHfQF8s7M NYEr2spc35TWgoEud7arlbX8heWAI9a37/UcXiE9RrCPqdFC2zrGf6LYS8yzc/TUEpMi JDT04NDAYPHCdhZ5JlIjrVwpN/USAZG2y1kel+lDv1Fa0IRAs5iUOt6+PJyy4q5F9IyY LsEw3KNZzEMsfoRytLCsSPaS3nWDOTU1ouMVxDcytgtqsv2N/eCnSjQbf9ZlM+m8ZCS0 SrM8qfGELubHHF9Azr0Ji37lQgFNf4o8uorzcMD831CSADYWTH3PvKS02fI9u2yngkdF +/Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970293; x=1734575093; 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=iRKO0sSW06Oh7i/UgLwemlC4hofAQlpyGMLJXo3S+e0=; b=QwueeYcMt8odd+DvFjU2UQp3ybp3CeFl0ZLotK3uqyX8SlRoIHmnlRXSV6TDE+j6wQ 9iTcCwi8MpjLLUjz4Xgf+rp4FDQuv5SIrff+VKEDVtJr+IjKJumHNsYtKv6cKZJh2SxM RKo9TeKmenGc5U1ufJI1/DTl0vdn1m1RK7Nam1MMHInz1mZWYSrQ98MGc8JaFStOe9eL oqQ+lA6haeJh5ipxxISNS2itlkbW5dT9qIH9U3ic/HKKV0ukiSRhsKUiBMSUw5qgowcO eqQot3x30x6eRMN2j7CCTziuCVVICIqfvIgyu3hkz9rDEJScRbLU7WrNtm3X1scs/S+4 9eOg== X-Forwarded-Encrypted: i=1; AJvYcCVVHH1kfyLyuUaH4dCC1xrcpCOcnK78q+9s/2JnOhX1ryceu2mXKxlEHwUqtZ++8k/4tsWQyv1G7i1eapvGgrlGbA==@vger.kernel.org, AJvYcCWNOQnGzQICX6rajTDhIyJUaAkIMchEqDgpNDW6sM4kIxaS2ujtgR3Nvn3Do13ImETlbLjc4NrsMI0l3bE=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs2NpkqJw9OIRgJ7tk8mwWymtW2OuLC7InuUm+h1rlD//KaoC9 LB1ZKsZhkgeF6GMIvGEkMmSwnbv89MMBMtnzv2B2h0Wu5Xjoet9T X-Gm-Gg: ASbGncuDevlZ2bZZva4t1AzCZzZla1jl06NKz36oaIg+i1aJjn7k3LCLrRXEzVXFXIq xQ2SstcthsGCSg22hl4vFT3zc4Z2EX4qN0/uN74CAICImb3tT82/pxB8MnS5WVO0Kd/+fjX+SVh Uw3NhNekaricQXC26uB9lzuntGAaRoWk8JeYx8mcdWCL1Y0//M6H4o89WD5rnpnt0DYQpRdIchJ rrA1T/zRvSYMqwfmZZ3swuvA8320vbLt+494A+D247BYvPQu+o/M3iS1IAmukpTmNqEG0fWzYn/ 4XnehAj1Q5xJ X-Google-Smtp-Source: AGHT+IG1OvB6kBCuTKYtRXn+Xq0Dcnx6LNv5Hbou76sPYhOuRUhxuSh1sIxwVOjYMQgo7SnyIuJxTw== X-Received: by 2002:a17:90a:db92:b0:2ee:fa3f:4740 with SMTP id 98e67ed59e1d1-2f1280e1420mr8518639a91.35.1733970293135; Wed, 11 Dec 2024 18:24:53 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:52 -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 v12 03/10] perf record --off-cpu: Preparation of off-cpu BPF program Date: Wed, 11 Dec 2024 18:24:13 -0800 Message-ID: <20241212022420.1035999-4-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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 | 23 +++++++++++++++++++++++ tools/perf/util/bpf_skel/off_cpu.bpf.c | 11 +++++++++++ 2 files changed, 34 insertions(+) diff --git a/tools/perf/util/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c index 9275b022b2ea..84c3bf6a9614 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 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:13:30 2025 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 800A115AAC1; Thu, 12 Dec 2024 02:24:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970297; cv=none; b=BYePfIJDzwHYOACCzYO8k1cznBa7dlCE4rngZgQ8GeCEcH58326UMaSStmIzwShV1+NWFyXlG8Bf3zvAvpRn3c7SmuSeCHDFdPUXYKb3QBSEns5MuurbgIT/OZ9Ji7hSzmV2FlZ5Jm0urssPKIuigVjClzybUKkKvAT0VzKlsN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970297; c=relaxed/simple; bh=FhYBFcBipaHcJVExkC+3V5vt7nolG31xdwTCXFsCPv8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nLETQJs7eUrehXDv4FlAHuv1r0LXyy6FqAWqu1AORuPUoT8CGS1U9XK/YRF1BBzmsLYwQIDeBYq2zgPlgi33acCVpCqU9KghsYDv9H/mfHRSEQIaolcIn2V33fy6if48eGhCqPr2pAu4iIsHeNiRSaiR1/pZq5eKYybgC0haqno= 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=ZwL9X6j/; arc=none smtp.client-ip=209.85.216.52 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="ZwL9X6j/" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-2ef760a1001so75520a91.0; Wed, 11 Dec 2024 18:24:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970295; x=1734575095; 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=ZwL9X6j/JKQEX9HD4179QuRa69TxZajX3AqIOvU1XJJEaTos0mr0Ujm9VuyPDr82W3 o6o41qrU59z/ktzxCf79HID1FY3V9/V4RcCvojPIyfAzhpgkrB8lABxOUcFKStWZUgFF o2keMFLxXMagzuycUJPiRoTZ2nndUXt571EHwnLqk9fj8EbZimj2PV7m0vUt2UNCLo5t z0aRDSGuIPpcKB7fzMzMw5iyvLNSpv9LlJ30Zw8VIJZy1hPsvZ9Y42dVDEaVYdBszpLf 20/1S5FlCjQys0q8TRyiVgtIPq4Bnin2cNfhNLeAJofAVQHi9yfm5tHIG+lvlYLNp4NH MDbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970295; x=1734575095; 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=FFpyeUnIRvijp9MYUdtt9yrrI3ZDRzUAbOYoR/3RYKforL0N5pXo3KA1MGpd8U/Wyu jZ3MQ3Xk596PzKesOA/84b0UQvUsDrxvyA/VkAdmzzMRg/HJ2RhdxZPlgFwJpkg11ydg tySZ6Eswp39Ab3GbX/bA1TtYHCE+Qi2BZqQm5XIz0MMXarLk6ebZS5MYp2F/jPkbdk76 oAa9p8ETPtx7Ei/Os32PiFdbYkfNGL9Qq2S+nmxdhlbousof/6yr9HG1H9qGdq+CylOs 9II3jlJc0CZWg3wa1N/DpznkdGIS9VQQTncDKr1JqVHatBYtZB/tfia+NRURThyQPFXP 8ROg== X-Forwarded-Encrypted: i=1; AJvYcCVMa3CHkmkDSHfBXl5o4z9ceWJ5bw/O//mDLHqO093APkbe/V+mOoDt9R9Jvy+CJmqNDbdxCwCT6TeysY7kzB859A==@vger.kernel.org, AJvYcCXg/zE17Hoh8HRn6TptxSOR/BKQt8L5reMFBMvwjCEnosVFREE/2Gn5zy0SygwO/FdXXzC5MDO+k23yUFQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzNeNFLAn2F2+B4c510IHDAO3fv26WvpmKHkj9YWS9l17mrSpVh WX9ViGnAI9B+Fv9y6C/O8zIC7VdKrOIr0w+WTtzQeOUygXoGHSqz X-Gm-Gg: ASbGnctlPW7JY8uQ1G9fMgT8YnCfV+c13k4oqSmxM1a5wslfaYQB4ciycTmXZFE6z+x kM/W2FaqO7l7DqYbbfpzljVQOTvlfKKL0J28OGUUuqBzTgxGpTtNiWg3Z66wEPDegHuJwX6PVak JGijqa2P2rbebOdSBAQeiSnSPRJdZQkFBHLcOKM9AIzR3+lV6ApDzj6VVi7A1OcevHh46ics2Wr vP4WzeOE4rXu7ilsjrGs7Kb3xnGP5Ct7q47qKdF3dvjqZ3SCYYQrpGuvItruJUOd+L+dqDD0AJh aeC6F2n0CCgu X-Google-Smtp-Source: AGHT+IEGvTTnx0S4DjO8wD+wECnZ6dMM1Vujj4+bhatBYMiMAJInJfZWijGvVA1WFYk6LKmTJccQMg== X-Received: by 2002:a17:90b:510d:b0:2ee:7862:1b10 with SMTP id 98e67ed59e1d1-2f127fa547amr7989950a91.11.1733970294812; Wed, 11 Dec 2024 18:24:54 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:54 -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 v12 04/10] perf record --off-cpu: Dump off-cpu samples in BPF Date: Wed, 11 Dec 2024 18:24:14 -0800 Message-ID: <20241212022420.1035999-5-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 2025 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (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 3E778168497; Thu, 12 Dec 2024 02:24:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970298; cv=none; b=Y3Sy9OR0EF3Xjw06MYqeOW+kFCAJJg+1f4mmQMrkaK/xZMKJVTLk3vqvNB2MBVWfumudmPkbj11Xw5aC0JdQyZztDhtaujnAhM2XQ3yDry7QK6primUGmIBv2OtZA+LNcgnMPMBciM99ppKRHFQvbZg1UjKTNIEafXpYHvZ4JXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970298; c=relaxed/simple; bh=qS0cOrCuQAGNC6iJUTgJsbjM3SMEBq/GFor1cJW9EjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gl0nCtpvdMIDxhe6gizvgTBW6bOFoJi5IGQGpAZhfAUBZVJNAHwWZ8SQG7daJOQTFcoVmd2Mq0VdnNJ2DoCouOzpG+D2lQQ0vzsqqBexXmHxuE4TJJTuWwmPsbWXDwdCAnP7D4cXRFkfhMWQylwTmcEjzDTvogK8NfiwA0WUz6I= 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=d2IEzD3S; arc=none smtp.client-ip=209.85.216.45 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="d2IEzD3S" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-2ee76befe58so74663a91.2; Wed, 11 Dec 2024 18:24:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970296; x=1734575096; 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=d2IEzD3Sp4lCFkN9ZQRq2d7q/jJYgsWUcjHSLDEa+xDcbb3xxGGc2oCaosT1VKQM2z I8P2YWK3n2wAz1AR1C3aC5OScHpG2u+tEsXHGSE6cQqLBInKKROm+wzEdhowZiY5lB3b hOReDtH9eLg5ZZ3rjfqcioXuKBm9Jj9a3d91/tVwQWJXdmjbSdUbw9xZuINcBxdLSKW8 Rpj6iXILkI15v7I5eNiOhGV8Sqn5CLJKq8PVVkXpSBfJLg8h8iHzeTeQl45RShg9F5q+ lWlQqAo8MGZ4ZBsVH5X/hOnlK3hCBLT6MqZoOBLty27/wVJdUUxqMBMR2R9G9HwnYfpo jdVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970296; x=1734575096; 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=kqoLm5OaF/5mC47pnDTQNLCBsOU8Ql2pfLZc75P5AMUSSTPoHa9cqOQzf9ZUVqwBk4 5ABz0rvDJeqdvvsObHzgtvvZYkrffOOYTt9ufDZFR+rqvg0patds/vvNelo3nMB6019d Cq1KfXN9akObkLNI9uzwSkmc6jt+flrET2SbQ7D9efA74ZNvGyDAofQNNchhHhfdtKuf psRfVif7mQ9g0g6BEk5UKK2IhNnuHL4OGukku1DVCbb/AqiPOR7iRptGSMwseCo9Mk+x USuAAPgvVMdfCoCyZEE0Hv0mVNeEhoH2lCXR1nKvxPSiuefPPM1aXqh9dpGXGmnYkKV+ FhVw== X-Forwarded-Encrypted: i=1; AJvYcCU3qVx8gUjHvBBY34xlWzo1TvljFV+L3hp+91Rlq3O+BsSVrCMtzoQ8TDxA2lOQ8DAqzclew7XV7zhuMxKgjcTYjQ==@vger.kernel.org, AJvYcCVjEwREbALiAVytnHSL8bAwV0JzavkpAsAUND63IxXh07/kIWpcf7VcoRzZcgvgKEGW8vTmewviktRfwKY=@vger.kernel.org X-Gm-Message-State: AOJu0YybMvVQpF/+LjGRJ2/dXHt4qK8roCVSgaNFp8dOchcR6rpUGSO1 0OWwKGmdfbgYenwm5Agt+xVeUZkic/4EzzuvZhFIZDtn5r+UQp85 X-Gm-Gg: ASbGncuiSRivmw56g9GUZvwJZzbKV9xYE2FBY6MGjD4J3+486IPBoSRshr6Fn7+eqBU 3Lff2RKNsyMXwINxQYCbU34iGWbPQjncV8J/DKLDS/e1PHPbuDPbj2dgPRJSz2iKrpZZeR9c7yq AYYci//KujIbdzHjW1y9j5gWh4ZJf2pJT/8OAKnQcnpSq9tWHDA36jSpoQKaiZc4zcAhp7xEshb QXuijTLhZTAU+pzg5/efNPF6M6a/+qwjvszVtaiNZF4rSSyGN0uXsqsL7zlbDylJSjyoTlt6psE TDLpexVgSBwz X-Google-Smtp-Source: AGHT+IFEYpJwuYNcHuEdAd5hBIXCKiR0yxS3z/KkRBIcZdCQS+7EkGEfb17R8LRX3lzU93ieeFkKbQ== X-Received: by 2002:a17:90b:3d0b:b0:2ea:4a6b:79d1 with SMTP id 98e67ed59e1d1-2f139293f4bmr3314874a91.11.1733970296450; Wed, 11 Dec 2024 18:24:56 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:56 -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 v12 05/10] perf evsel: Assemble offcpu samples Date: Wed, 11 Dec 2024 18:24:15 -0800 Message-ID: <20241212022420.1035999-6-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 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 D356E13D881; Thu, 12 Dec 2024 02:24:58 +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=1733970300; cv=none; b=JE79UMrxIpF5yX+vV1Tu0+ogTxvowSbj9bLPmdP235cZ01qaA7d/71ehberTLhNQKavX8FEVz+7W/Cgdwig4KDLT6rGrA1tFPXrcLGwP+ol7kno+/f4UFvteJ7mvInMpvusnRAS/xEHOKNCPKdIeR5dwARJWzNddoZO4jZxwAG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970300; c=relaxed/simple; bh=e6fI2ZVl4IzPXnFdTWlY97syscDRQIiFgkHg3JcX4HA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YZ7eKeULHIQq03LuuqoJlFlDqU2oaXSoFxJNTSY2SY5Gzfb2LBpNlQuL4UVC2GcSI6+4ekL2Pt4Vwg00NPYfnjlY0mG4BcM6kbgCSm+z+7sXl/TZp3yYSFRsv077H/zXQDhveYtsbRV9dahrnbq67hM8OYfBeYAE6otDlH4yc0c= 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=Q4lXyWoR; 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="Q4lXyWoR" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2eed82ca5b4so66596a91.2; Wed, 11 Dec 2024 18:24:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970298; x=1734575098; 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=Q4lXyWoRpzzEc5I/dyiwn3uDL+lB0TIuAj+frbAfPhjtWOsojJrrVsey7fQhlZNku+ nWN3dM/FgtU3a8jtR5FRptlFyiO33143/RE0YLcXlOqHrw3Em0GFahSQ48E30OD55nnZ NEmYifS21m4SGq2UNHFlEn1OAmbEaiR9hp0mpUjEvU0iOKBNgk+nWxgFF36T5AJvaPo1 jHhyTzXBJNSUsa5mIlBDvhm8nnPkyLH51Bdz06aY5j+ZiAomxoXjHyxWxLMyUPRP+RJg sraTh8HFcNuL8NxiPHNeDYsZsX3I95MUFOISZW3Lhm41f+00BHdjPswKsDt1owmSpiEZ MaIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970298; x=1734575098; 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=g5DfJ/VKDEsyPPUK2aAxG6Guw2+p/ULfA3Qth5lbaxSZ0PrcCTyK1OzHUytLLiMvHV 9cTknfDwSdY+V+ighOvcv5mG/gjDiTEIrZmYG059orZ5BIPO5kwkILVpa4e3E+IbmemH oHVFsB/GDks1HeJYV83p5GgozfS7Mf5EiQgGm4HhkTGOyxN8RxSaiNQTdf3hl/Q/f9tB dZvOrv5rbgd6Z/m4oujCsXvjAF6MtEA797OOpwsokDc4whprsI3vqYPg2n1sv7mkvGgk YleTVria4uL3YejzXcGxdaPhZUg1/wHY0MQYvAo+Z/GSsNLHv1r0RsXchPWUjN1DRVi1 miUw== X-Forwarded-Encrypted: i=1; AJvYcCV5UJEgTNA3CsfvbGEu/fw+imiTLRtvJerA+XUvREYiLITgs50EZfk4dlhrghY47n5PHFKDO2PMmxdyj5QsjJ9qqw==@vger.kernel.org, AJvYcCVz/vkeGdnlJ3W7aAQxAp+Uy9fJuFsuAf+M5cPyZscPQsxtWR0HaK+zBfjbpyzSNnpBkp0JiK9InM/MJAc=@vger.kernel.org X-Gm-Message-State: AOJu0YxH5WzBVpvzMuL8tIds7AX1qaFpe+xvzV0BFH1gWdHXon9AEXVF 7oerNNQlywB/1NcgMdnmtXR+wxSyiLDdunpTaeFTdvQGLdTp/I8Aoq76SjA9 X-Gm-Gg: ASbGnctGrxqFu45BMhuNGtoqruolofLlphVtQ5a972jWL/ifVEURbbTNVsXa+rrF+cq Uo62gIpX/H3B+r7oBniNM7Tqwx3/Sj9WnIZ+dFnhZo8gYd+HJjSK1v77KKK12E+ipUhEDMhg7N5 a9n1MkfYFOz7NbgfO8PtU1whXeeR7IJ8sz0njkb0vc8heJ7LZXaEnTpnSk5zzmXwvykvRRB9vyp D4nLKX9Jo5Xj3AVcLMHSimgHWFmZ+ma3CsDFxntyhHmUO/TSVapOViMsGmqOvJCPfJ2FzGGclxl PRThDEpkdKfX X-Google-Smtp-Source: AGHT+IFw4mUIouJwApusjzHKMyp6o3wRPJj73PqHImU2VuMn/rfXhfHyWeBhY3yXomyPnnF7l9De9Q== X-Received: by 2002:a17:90b:5405:b0:2ea:bf1c:1e3a with SMTP id 98e67ed59e1d1-2f127fa5e12mr10370446a91.12.1733970298104; Wed, 11 Dec 2024 18:24:58 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:57 -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 v12 06/10] perf record --off-cpu: Disable perf_event's callchain collection Date: Wed, 11 Dec 2024 18:24:16 -0800 Message-ID: <20241212022420.1035999-7-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 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 7657317E918; Thu, 12 Dec 2024 02:25:00 +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=1733970301; cv=none; b=MkHBhGa1rOX8S5IjuBJxj0X4NtRX76knk6FKcphST+3n1epUiAZ+YDcGKCT0UsfxHDrQ+JKeUVi42+WQeSIEKxFs0LujHL1f1aWJavl27EWcUyZafe+E8rwCku/uzp4nBA3IYz/XcZ/hh2Y5qDAjQ+s/RqHMC1P6lTcGcYrBSmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970301; c=relaxed/simple; bh=jPBZDIKyif/LhOPbutvjTXCG2gTELlQErVsQ7/V8AdY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uWYuHC0+o6camfJ8mCddYJG+AjDM62HbxMEjUWUUtQIbag9se+j8bwo+cUg2QIhzljKHd+bzEsOIoV4bT9fn+HGn271DtjqorCldZI1krag/dzJB9cyZaOoiy5HoVHJbbrtn7Uoic0nT/O9wYsl9zaPu+RCOeTYnr0tStY5fwcY= 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=PElm7Rid; 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="PElm7Rid" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2ef6c56032eso53936a91.2; Wed, 11 Dec 2024 18:25:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970300; x=1734575100; 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=PElm7RidlX4pxbZex4SiRzaBgtzDIzRPa0ZDg8EdpN1dh8OTtdDNcreUvZOxrw6ss7 aLF2rHpwzToDaC+rn4WsYDj3+ee2XmvH3mxvNIi7eHqPIpaSyroGrJMtWfARgWJr37PF JSM+ARXhC0zwAI+j7m58aVbgKqALWZvNO0fLuTc5jrEwsMI+35mxyN0IJpwQK2WavJZs TPPdzTfxI8hJX4MlxHfei0FlVVjY1Pgrxuon6d7KDS3zbV6zz391hZvl7Qnor33YHEvg Zvihu9pOXZ7WbCtM9zFHTknrFYKCZ7ND6P3ZyAUENQD09S0X6Sk2ljsiZtc/NQ1L6cfY BeyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970300; x=1734575100; 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=aU6Ge77RTBj1Q8F2I6YHO7sZEfO7OkQ503HPmEqNZ9XRpWeYwAOR+YMMHFES5Sf307 J9FyJGh5vH/qI5aCck5HAu2gzJdIrR3xxncSJw8WULJtoluK1+8L6Z2Rq+CfoMsu4zwx 3KzIv+Q1uknz5YjwfXNrwHwMVV33Ru6IvNBlTxbIcH06g1Y6bglcNuxliKsjLsUKNcjM VnmuwGYk47ugD7XiGWFPRnab9Q4ItjIWl+bJPgFrr6yFRuv64V5vm2owtgjmLk7DA8DP KMc8Vhn8NCDaeTmrLgRaWCfuU19rxQbppLZy6CezQv505/Jvevy3hMsrT1K1hMn6+dK8 eJEw== X-Forwarded-Encrypted: i=1; AJvYcCVTJsk7KZO8+PYJePucrqv/SQ7W23P7Rt+13g7cPJ+zDDbtL19V2MEC6Vlk72ShJekFUJCc/H+s9Xjr45U=@vger.kernel.org, AJvYcCWL5simJChDdZHbE0nBxJPomnyxrEGqZSb15pB/TpRPxatUMg+eFBFPHr3ZtHrKfstdkmV2wYm1c0vv802U/ZRUAA==@vger.kernel.org X-Gm-Message-State: AOJu0YyBW/hN6iOyCtPQ2XoCDaiprhZmriy26p/OwU2CIelaTupKOlej EFGIeTHW3DXbE5kn/30+dAeGdL9SO4qAzAuzZnvSbprWmCefa9Sf5uS4b000 X-Gm-Gg: ASbGnctgHRhFyI4sUjWPTOvvfFnzpjlKqnUzEgFtkcmt2IrCnXgIpc0rSFYWkyhEZCR 6hhEVICYRSuu3fnltLRR8Sgiycoos8v8NhnkSQ1FnUfJx1pmVEnxCuTGCbfadEMzJ8NsSMbzedE ZMb4HC0sFT39ZUBsFw0ZbJW2PpYuM2AOoLX08chQCvlQMi5XNxmLO7nl/N857HAx9Gfd0LyiY02 JJPk7oUvTNrbPh1Oc43Zf86/kJNZ6ERrwHrfLhZ6h3r6UcUVGH8SUJaO/RsoXLIm6vLhodp73C/ ZN/S/tsm2UsL X-Google-Smtp-Source: AGHT+IGQHTQxrZi7uklCn2GbWSCeAH7VLJEJVKcf4ZWiCTXklJm6if+7rxocUUYieHi/8Cluwjh78Q== X-Received: by 2002:a17:90b:2e48:b0:2ee:741c:e9f4 with SMTP id 98e67ed59e1d1-2f1392938a2mr3230366a91.11.1733970299752; Wed, 11 Dec 2024 18:24:59 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:24:59 -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 v12 07/10] perf script: Display off-cpu samples correctly Date: Wed, 11 Dec 2024 18:24:17 -0800 Message-ID: <20241212022420.1035999-8-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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:13:30 2025 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 4BFE11885AA; Thu, 12 Dec 2024 02:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970303; cv=none; b=cdLcGlGoKWsijPF7x0SNH+TRiKWoRmmZcldS2w7r8zfcjm37xjx0nrd/5wcsNbYmFdimCHEHwo0wxYnBXusUg0c18m3vNAXzhkuQMCGBsq4s5MAxkAljMPb7KqfPo/2h/8Nx6QzTsvrkkRffjSgchLFL+WhZwP5VjGsUwrDY9o8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970303; c=relaxed/simple; bh=lwpItHlU96z4UGlv+o5kLmRFuWMmSjHuiiEw79vAX2k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OUooxeaoCdUCquC+vS9y5r9z5zJd6BNgweqhnM/7KSlsvRYFiKIR085tTKtbnAz7U371Auxjs7baQuxD7ySmCzvspPtp2Mf4tjZl5z5h+useHGDzh3HRzWMe4mHWj0cEfB6AgyvIGefP+tnsSQn+tjTUAsHhoROmARKn4ADUmhg= 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=UlK/LiE4; arc=none smtp.client-ip=209.85.216.53 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="UlK/LiE4" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-2ef714374c0so96307a91.0; Wed, 11 Dec 2024 18:25:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970301; x=1734575101; 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=jcAu/W6kHIkTq88lSfam6h5x/9TA0/DITGh4yas2uXE=; b=UlK/LiE4hflUoh8BbIWq6eHXNo7bniMdfymuNpaSVSBsoiW7GBBXDk0ZRZAVfXAU/h tpKczx2CChCGLsI4O8KKi/YNA9yVLILBrQ/Bshq4yHwfB2uDddaIshqyLyKe+RUq0LtO OUZKM5i8fFjmk+YILON9XDX1VqjVpRc22pr1xcGJXqoQb/9i/Rbvl20b4NoftFIzlj/r l6sr+dj8pZCKdsUESczcf8q5h0AF0t2mdk+7O9a8mih6WnWeO2AcVljy11ae6PRXDrpP +i2By8eOAxJnzN0CjtdS+bui4uN13tuOPbjsz9Vnwy5yCwyC2qVIAiimGfXkQt5BrYpu rhPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970301; x=1734575101; 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=jcAu/W6kHIkTq88lSfam6h5x/9TA0/DITGh4yas2uXE=; b=FHbTmZ9tFjIEaPHV5WRGiFdk/qkKVXyUvaRpYpT6Xn39dkgtusipchYM1wMWahvUVo fFR/la1a+iyaw2tbs66GpzxdDlyfN3F3waZfCwqHxVquzCbBvz5xmBkgef/p2JyTE4Bu borg2PQ8+Si1qgWU0v8atBz/9p5B3rphwAphowIGvmAGscgQxWWbiy2iqZnX+q8rID2t MInih7LGHnY5NvCX1X2DX/gyxAlW9z0Z/vUD1Po1q9hBtTHlewM4HSlL0byugzPHEwmm 4NS7tDt+qpXjRxshEuYkNAnpOVOaoNzKPD80SfPz7ThRpYbYLrsYY3UQl1PMKEakjQPO wS9Q== X-Forwarded-Encrypted: i=1; AJvYcCU5PmTydJMSuyB48dnfStpUtulFP8JsZ1YCjmziGtKT/TkYcM3FpXGfr8rw/lXYZokNeEPPqQNQEIY0DWY=@vger.kernel.org, AJvYcCXrY+zXvxP1wYKbR4/aMXSSnEULe+HPa6DiD8HQVNJBJj91cEzzvAdqYQ0w76nikOD5Kk+1q1wufIczvxVsiJHHVg==@vger.kernel.org X-Gm-Message-State: AOJu0Yz59maEHiL6tsSS3YvzyJiNkZNtj80ne6Lu9QWQDsGfuBVmOcaM UtiL4RK3CCnlM3rOg5rGqcb1LutTUx3z4W6hVdi8ESpivuXHfOt6 X-Gm-Gg: ASbGncta62NFyvHY0LPgJ1LDnXevoPmEg4JBH3Oqgn1kGTU0oXS7uNtWyCd4O8LqY48 zRbLk8m1nA9N62t4tQGz6Kd+G1PZxVO5B0Tx77BhM2giHE1wz/8+45HJvWKzHE1HNsEVRafdTDe SGQRPA183nMmYRP/IwOw10IVLxyyyxa/x/InWJkOTwqNI2yDDKAJ/FsMAJVRZJRvI0GZbYO37py IkXEt2huDnwD1WmiFGmpSmn1bl4KdBC8x1hRTfHWa3DRTickkzbGMvbk7NzHhcDqz7PrBm7phMw h/ht20KGwPfW X-Google-Smtp-Source: AGHT+IE7w714CujGIQKGjhkJ2iYDP4ZnIQCCgB5bZsYlNyn+OqmvKi4m+hF+0DyIu4aD2J4Dx+1wWg== X-Received: by 2002:a17:90b:1d03:b0:2ee:8253:9a9f with SMTP id 98e67ed59e1d1-2f13ac54753mr2362343a91.11.1733970301486; Wed, 11 Dec 2024 18:25:01 -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-2f142daeb5asm112583a91.12.2024.12.11.18.24.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:25:01 -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 v12 08/10] perf record --off-cpu: Dump the remaining samples in BPF's stack trace map Date: Wed, 11 Dec 2024 18:24:18 -0800 Message-ID: <20241212022420.1035999-9-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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 84c3bf6a9614..2e7e4ae43ffc 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]; @@ -307,6 +309,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; @@ -346,46 +349,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:13:30 2025 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 EBD161891A9; Thu, 12 Dec 2024 02:25:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970305; cv=none; b=KV50S8p0mnqPCA72FscBtgK4xaDzHecx7SRGMdNKYJkV0CTnsYjQ+JXD+BRGll3PsMlVSVIZfmiLRuckMnpRkkk//h8M8iKGvi0Ld2O8dMUeGvcGI1XbUvRcWoKoNHVPD8rx5tSecZai88N5pL+PkyJIqxW5+M9UcYQF7Q+8mg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970305; c=relaxed/simple; bh=sXShppuk91lG1gcVC4ZBQW0g/2laIvfgKYRovt48150=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C5VL1WW1brgpjTIyDXG/HMbLNap7hs+/bJEUX+J4RG/i7U1szfGeR4sc8XjJhhBNaitbp9lRygiZS8ckp7qYwtGMbR33jwFg6HjqB63hl0+k7eZgoJG71nZkafg6uWACoOrtlwVpRgvqXUpHsUqVCdDpJjnVCA62YJRM7tjiJMQ= 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=TErHzxyb; arc=none smtp.client-ip=209.85.216.50 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="TErHzxyb" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2efa856e4a4so60816a91.0; Wed, 11 Dec 2024 18:25:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970303; x=1734575103; 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=2fS22MoLd8wNO6s8nIhAnqT6Lq7LzbIV7Mpi5Zi+JLU=; b=TErHzxybE090b517b+4IBiTytsG8gNtXgsXssGNsqdufGZbnd1ctAOCrL9sAZXBLn6 gyQD+o/e31n532KcubV1pKcjbL0O+VJYEAWD25H/l1UqtF1jgiVBtDy2XMFNvj4ZVv7V +tlXf+Z33QxFuE71UKur3tchgkEFFzCC9+vMy01AZp1ZFEa/U7zk/yp42f9i86kgIKDl OKRAh8sb97ie6Yr7kyncDheAldTKShl3+ageNp+US6b0h6cwMaziFs/rpLfU0Mdq32wP MrhQ4odpoG2j272uRSYgKzhknsXDmgTsYdrgu4cBKHwOPrXptW+luwU8pLoTmnWKpWfj rLhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970303; x=1734575103; 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=2fS22MoLd8wNO6s8nIhAnqT6Lq7LzbIV7Mpi5Zi+JLU=; b=FNV6aJqGxiKQC6wcEmmZHFBH2oKXnMyQ7eORCDUisFftL9gyeRO0qnSsPwgCvRnr63 /Rk7oxTjBZ8NFgEBuT1w2To2oNF8tp0QDocxrYvcyA+gyyic0d3msQzzXLz2eKucX3ja u0zmpKE6tzSELqEn+KQoPXNNswjm0AgtHNNMjMY1ByBgK9Kvbd9bp5ShkZHZS1GIXFlA PANT1gj1RveGzPfjYaNKfYQM35+1h/GUBpyD6Y4HGZhbZytcIBEoEf8kDhkv4P8vUYrD wJxRfO7FLenv6A1PwE0IdRmSKI3eCU25z2g+3VkAd0IEaAuttNxefIHIkVNun/yBhXWJ UFWQ== X-Forwarded-Encrypted: i=1; AJvYcCU39KghEbbgamC7BOrxJHLVAILHa0SXWsL68VpvnE/LD9WNogZXU3bqA8LH4TLASSbyV1YIESM/oC3LtJuZ73kauw==@vger.kernel.org, AJvYcCWJ7ReIdjomUVZW5qfpOFp0T80FX+xZEduSHDeT0NDwHhFEASV1XjQfg7rFl2ts9qs5I9gGBlsOxUGYTlc=@vger.kernel.org X-Gm-Message-State: AOJu0YziGdZLjEMoP+DxFxmb7cVOyjjjwu98PKvq8hfrcnyakj++Tpoa lvKV+vLWHUqos3DBMTWbkpe0eG5FRXThqa3ZunlIagXjNKsM9/Dj X-Gm-Gg: ASbGncvfQJDUcWJQ8yehjNpPTvxCS7f/8jf4C1+nZcd2Hc+6Ah0TDaE3QZFUCz74EAO PGbjw2QPLrhQQf2l4jtxDWMpBcVao1/e7hDEtg33szu79wOHUP4WSc84rzyr/8NXKHMXLn3e34J +vjK8VJ96Y/T685MvM3HDSKy6OF1czUofJBxxgLZSY2l5d/1pW2oWpmPc3ljvvNKEe0dRdQrRmx P8sU0M4ep8GkTB8lpZcweSDgTbFnQqzWiC5Cvw+3Tb8n4HXrrByxrBlPDGdU+xMWkZUZ42YrFAu 6n1giHycHLMy X-Google-Smtp-Source: AGHT+IH+b3LrfT0YaB0UdI0f2DjsgF73u7+XWHbZuV7kdoN+tIRR7OalvRPIZy6LPzqFdxOA05z9RQ== X-Received: by 2002:a17:90b:4b88:b0:2ee:9d57:243 with SMTP id 98e67ed59e1d1-2f1392574fdmr3312387a91.1.1733970303161; Wed, 11 Dec 2024 18:25:03 -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-2f142daeb5asm112583a91.12.2024.12.11.18.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:25:02 -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 v12 09/10] perf record --off-cpu: Add --off-cpu-thresh option Date: Wed, 11 Dec 2024 18:24:19 -0800 Message-ID: <20241212022420.1035999-10-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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. 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/bpf_off_cpu.c | 3 +++ tools/perf/util/off_cpu.h | 1 + tools/perf/util/record.h | 1 + 5 files changed, 40 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..62183a6857f2 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 * USEC_PER_MSEC; + + 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/bpf_off_cpu.c b/tools/perf/util/bpf_off_cpu.c index 2e7e4ae43ffc..c3ac19393c0f 100644 --- a/tools/perf/util/bpf_off_cpu.c +++ b/tools/perf/util/bpf_off_cpu.c @@ -14,6 +14,7 @@ #include "util/strlist.h" #include #include +#include =20 #include "bpf_skel/off_cpu.skel.h" =20 @@ -286,6 +287,8 @@ int off_cpu_prepare(struct evlist *evlist, struct targe= t *target, } } =20 + skel->bss->offcpu_thresh_ns =3D opts->off_cpu_thresh_us * NSEC_PER_USEC; + 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/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:13:30 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 B44ED18A6A3; Thu, 12 Dec 2024 02:25:05 +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=1733970307; cv=none; b=pMPRw0rmWh7B8vAp1HaGpYXMsR8z6BXaujNrr8A2jQB72fLmxgfHHLK3OdKMyOwqwb6lhMzST0lG132enUIGH0lG1BL9nTVGdd20VrvzVmxYte4ys9INcRsQp0ZvImG3FWvHh1i5WPdfHXsbWZ8pw5I3fHavzh46oP5yLYasFFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733970307; c=relaxed/simple; bh=fk3U5R0mb2SGsJQOBzOHol5ZzILTnf2AqVHElPU/gK0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D/uo0GVWPKsA64mOOfqAKUOWvHsXVfQU8RQkmsM6q2SEZeUYbUAG22UB1kQDjWlNeuAktGKw8YiCa0VYj7dClHmQyxKtTaNt24EdJJ7dChAbV1hXyewX+PPxDFXnAcHiYpBbWqGiBJ1wZDwAJCFiDVdJYuAkukVmDDXDHmTYDFc= 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=bI6GJZs5; 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="bI6GJZs5" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2ee8aa26415so79283a91.1; Wed, 11 Dec 2024 18:25:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733970305; x=1734575105; 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=bI6GJZs510eATWRo7bD8ur2tcfPc8pgdEbppAWhqfqqNvqopBwKlhT2mht7xQPGt90 OVy+Qg9BRMU47J73olRZYmp0nL1F0gltUHDKR2xDedYMxRaR4PVjPvosWS74cH6GivFW z6E86Iztgu5Ub4q3lRO9fNKz5Qm1Zf7Hcd6hXwOOUuOglDXvIXn8W8iA78xNKFhsyBBM uXq2dLglGIXOUmxV209QYgwAtiPqqtpJftY/NnBBUpeqrLZh+DBegIF55mcdRXqVqVsu QfQ071HVfSrap+wHvS5Mu/8SdYoKIXHR+5vohQ6ekOo5kfNH7nhA9Z28hHe1cAKnpaA6 +INQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733970305; x=1734575105; 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=kVXoOV/eLCWg/p1MuYL2RKIRjNKjKT2mwKmDzixD4tohloHgu7eZ9qfzCifJCW0vj9 Nq0BsVjTfDAdm5O8ufap82DdcPQ/Sx7eUqb3kf+2Rkx+PVJhQx+UAucCfLmkn2LHVji5 Sv44UoBd/sZWY800OGJXtzn5XbKxQnT5pLRKZ2eThOV/9hx2N2i/pWCN5komCrjhKbhp gFmHfpc1fpUJxUB1XF6Hl33BOHUuWJ5cLZmIg+P0/BQbnWIXIKOkhA/OluyCxKV+kF1U rM629O9eaWpE3wsKZxWuhEFLsKCDyVzOLB+XfvFDisSaoegTVjQjbPKqcZvDP7JDX3hT 59NQ== X-Forwarded-Encrypted: i=1; AJvYcCV/SI7vDOLwDNeVyuxLjo3MU0xA8MGn3KCdnQwJdD3WBiNRQ90GdJ/VYxH56xy6zrxC2WmuRb3owpi7lO8=@vger.kernel.org, AJvYcCWInBPUMVKx6e0J64aEmd9/+MHwSXWQKYHgvM5f2meivpFjpfbFuNG2vlMW76oTEFlDVNYFyz8FS0aTRpdUC3tk8w==@vger.kernel.org X-Gm-Message-State: AOJu0YzeTwJUuCAHcgukYZlMUDIVR8QhNLpAkW6iC9a7AnVUhmN1ERnt /JFnu3PmhwJ6oqxPJcWh8ySA9P3U8/diAuKBtK5Q74wb+4/BTC0X X-Gm-Gg: ASbGnctXLx0LrsEYROrRo77Ib46sFWbD+gS3XpVW4+vqCQuSw97kgEBR4fttU/rysOD w/siCiTw9e/S++Cu7NwYO6UPuOuDHCun7I9GblPz/QLOCX/ZYeHruDffyEDcPaIPPdWBs6Bkw3g wPfi+sybWHgux6oUHtAYOYKzFGLfo9FvJ/e4elXw9UVqOVXIBPb3bnrNWdf1PystwgagHkCO9Ph zirf4qTR/3nfaAL9Sut4jUftObxrxLbf9UR9JIcTkuWYaopGedxcXRt765hwcQrhdssfSnj9Xgo M0RgY6gQXAa5 X-Google-Smtp-Source: AGHT+IF5wwfvTE4vovgmTarTXkpaFYUmrXYHiP9OBr1D0rATwpyHCq3JtYtGz9GbgDTGcOQk+ScoaA== X-Received: by 2002:a17:90b:3d0b:b0:2ea:4a6b:79d1 with SMTP id 98e67ed59e1d1-2f139293f4bmr3315366a91.11.1733970304917; Wed, 11 Dec 2024 18:25:04 -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-2f142daeb5asm112583a91.12.2024.12.11.18.25.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 18:25:04 -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 v12 10/10] perf test: Add direct off-cpu test Date: Wed, 11 Dec 2024 18:24:20 -0800 Message-ID: <20241212022420.1035999-11-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241212022420.1035999-1-howardchu95@gmail.com> References: <20241212022420.1035999-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