From nobody Sun Dec 14 19:12:12 2025 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 D20F11F0E38; Wed, 11 Dec 2024 22:00:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954429; cv=none; b=Rx042fr6luNWWMDxMZzXRCcM5DS+exJ+wYLA04GMc433T0u83+Gt//4ILFp5hBgIuE+V7/3WNWJAB9XGofTdFqk2TUCyqBpxv2WRSTiNhE2ib0vZIyuizk77DstrsOubuPxDAw0UyGVWDxz++KmRfUWQMloy7JaXYP6Q7OK+vHM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954429; c=relaxed/simple; bh=5zwcrkCXWGsnxL/5mROAo6TlhYsXoTqe91xEFV/fnQY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u2vvnhhL//65lztt/h/eXJ3KG8rMoz6ylN1HffckTOpnEw3JmXiR24LvLEhmFSYEoLqKczr9ZFV+aWZugIEOaKABFbfn0dFFAQlBYdKh4eSstxdWqnK3Hu5VFp3Rp6D5jbC0XABPmsDB5BIzaYG+KMQkGppWG9ZmUOZp0H+cMic= 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=J+FCCph/; arc=none smtp.client-ip=209.85.216.43 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="J+FCCph/" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2ee76befe58so6458902a91.2; Wed, 11 Dec 2024 14:00:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954425; x=1734559225; 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=J+FCCph/q+I19c42/vq9WNgTBVMV0UX0Go6hrAt/ikBHjULNJ2cs68BlBxn472VwzN Pny5tWJVvZOIVQfCzaEFYpD4W8IF9jjDPhvtPDbR6DVrdxco4Bp081FgtBYYag5TlVW6 JfmYH3s7vnaN7KG1u9FPAusazUMwTaY7WO46XnsiIVYCuYH6ABVmAGAy9K5pbH3NpRDR NZLzDZfTMKVu5ozuCsF5nsSy+PH1ce7fMHLx9qlBTNtlscas3bj7v15PUWscQLAWjaha k6JWwQW/OlUp4Ehl9iTzZ7G0aoSQ6FhBOmE7T5WkZTqlnjDITgW0S1RxBOm5jBILO+x4 Fcgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954425; x=1734559225; 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=QnajtwKgQiIC+DGSmr+4vW2R03W0LY53/cvZME/EIj5tShPDzkduO5B7REHLp5KjK/ NNFk01L3e1JGBuIhzXUQrge+dTREg4M+yEIGluni6huSLiL2gleVncNaCCd3qe7S7tby +Vt+aHVMdVHDMln8isJQZZnOu3lR1UPf+lHRIF+5edFh64jsJDVVoGQt1LdHJV5m1VeQ ZVp0dx+zO02B8bofq9qCQw8hdBi62bCQ6dQj2qhOeoLP5m0Bxsd5YSEd6DBgM+x5P/r4 JApgChdIoMyqAnNlPmg7dcgfeXHd34IRb9vea8jrOYUOazHZZ4RiK/3lYL8zqUfiWpXR mIAg== X-Forwarded-Encrypted: i=1; AJvYcCV0ANj0mehCHAk8zk3NF6yNRyWByVnRDKlLHeCsJv2LGCROopiO+JB7jJW61QUixJJg5WwaUjMnG5CwSm/myciE0w==@vger.kernel.org, AJvYcCWwPl46zMlm7VuG6TqUF7wUXnSEb/sUZMTvohkBDDt8tznA3rLOEFqtiT5AgaKStKJ/AhXnqw7zdaIL5lA=@vger.kernel.org X-Gm-Message-State: AOJu0YwKAIiguX9bMV/3q8eMUiCPK5zr8k8r39dUKohB6f6PvAVnrcKm 4WLaqG00IkkZrFEQR3aFXvdkXHJJ85rs/TDZBqb7le61O+oUd4Nf X-Gm-Gg: ASbGncvdXlt9DVuPz35h51eaH3uLL8V79T6xg9kQMjNnmllrA6yrlRQrFRsrsoNkGxl QVy3RbLiV3KSjmn7XdoUaPOrnXKUypn8+CQkA5MphCBq42vuMCctcEvCuzKWmRf3fzeXvQu5OGz Svi9/1dvv3iSuIAKMeFv+Z15don7FJdss7BgGaClZOe2ZURtOLVJzxB6X6tBrr8A197Hvz6dhsr EFzfBmYvgrmBvCUhRnysTEMyP2bx2EVinXa4h6G/s3JUgqwTBijZJR4sXLLpB4+WpyUtgSaeaYL B0F4juPJRA== X-Google-Smtp-Source: AGHT+IGW1olFgrsbQA3hNizzmjvjXTfDBsfMOxMvF6cfacYAeRtwZf6z2IUusMfdvJVBl+sOrQyA9g== X-Received: by 2002:a17:90b:2dc7:b0:2ee:c291:765a with SMTP id 98e67ed59e1d1-2f13925b1a7mr2447114a91.8.1733954424984; Wed, 11 Dec 2024 14:00:24 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00:24 -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 v10 01/10] perf evsel: Expose evsel__is_offcpu_event() for future use Date: Wed, 11 Dec 2024 14:00:05 -0800 Message-ID: <20241211220014.931479-2-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 2025 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 846A31F0E46; Wed, 11 Dec 2024 22:00:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954430; cv=none; b=VvIamDZSvOMxakQk3oO/Q37jQpZ+4hbaY1n7qGQixv1MKOxqqx5HF0G+9Pg0VC/vyp/lRRAmiIs0+xMQB09nx4lV91nuX4lvU0Jh2fW3lWl9sCYYuHE/3hysk8aXSjIyIWxRe0ISeJ7yE9G8dX33PYwa9oWgQGMhM3GntTqN1Uw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954430; c=relaxed/simple; bh=CtXvBuHZ10l+NOVrLXSjeix2nXsWB6v1qq32icek0/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=np101ve6hnIhDsUtiLL/A3QkKh3MK4KON8QzIxtl/amwDEkgTooiYN2F7cO3QxsbSRu5blA0c3QVGxjIvcxkH/tSF8oNThh7cJzAG1HPfPadRo2YwgthgOmAT5+Kxebb+FGXc1bHYDFF85PiByfto8+rGJe44BBa1c/IgrFD5fI= 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=Up8M8qFR; arc=none smtp.client-ip=209.85.216.48 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="Up8M8qFR" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2ee67e9287fso6474206a91.0; Wed, 11 Dec 2024 14:00:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954427; x=1734559227; 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=Up8M8qFRkXLpN+Tr2myPHI3MZgoZ5fHcSmt9Oq3EtoaEfcapYWaW/sTLK4BWCZvw0p MBf58ftYCWAn9ecssb+rlDHsqY/0WMz2iVH4wcldoX2rxTtcF4pWfTLw3l4hucmSYjB4 PFeaRtoVwpNnC79rgl7iE3w1WWZWujOBuQe56JhLm7gLAal2fbJ4clVKG/foa3ua2wek u02K/UeYSVSMmVk/x4Q+VSitoimFsNm4wmJcvjp3Iqq4hmM6C3IaA1v7w2NQS23MNMSj 8Pv26XkpD+FiF0ehBCxb2mwPh3G5tCVxFldKK3ca1i/1m64iQ5pjOz266vT1ZU+REmZb j1ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954427; x=1734559227; 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=gSiL9D55zA5u8nHoQZWtD7ziRmtdJn7YjDsvQIaIPACH5k60t7nwljG401HO1aY5PE BRIH62OcOUND2kgu/HoCMVsnW2SN7l253El/X29V71Vv94gpfODKU0ZNg5Zf1QSltKfa zghQto0/5/Ld8XlVyYrkJbmwjM0AUgsEmGoxsTQBLRT81Tz9gpsIbCthyCtya7xElH2n 0bYhCuxneW91pLsRi17FW9gaOwvP57OQt2/M9X5318nSpR37QAiIwWAWUOk+u6dUm4xv FYV3xk/3Y545eZ/Gft4C35QppA/FXeRsb7BfhU03GdgaGvzS5ZLx8b2B0k8WthI/lXCR vyKQ== X-Forwarded-Encrypted: i=1; AJvYcCUQzfa1ffVA0ZvFkwVRHI/EsSfCVswQwbIbJRtc+dIOjmMiUVWPk2pltFsd+JhuqE/leTHF3rAwkIT4RJo=@vger.kernel.org, AJvYcCXh5k03EZN40bfiJIcQt7BsWxFxvpN/n+GS0ZVVLSXxCtU3Pvth5F+PHUHbxqgfcU8pQS9yvGKJuYGmFpB08+Ph4g==@vger.kernel.org X-Gm-Message-State: AOJu0Yxq/gELcjNNnKcm6rNRC4Olal0M/gtG+o5H2Ag/0/xo/OXlYM1v vwPxlT371odbRWziemhH93PCmK/6k4WMTdA1ALOrgDZW4ZjOhs71 X-Gm-Gg: ASbGncu5XTMqUYOHW3NzthPJwxba+RemYSmT01iIgqzKFZXKZqQqvyn3Uq/zdVgIGww 8YhK058vKRkz9XEjrWWNAoS+f7EB+tC/qsXdm29zqmrhZaWfkG1xWOYNkY6yHSF8rs7kJxHpbnQ W2B39RUm7jTuXmuXjvRwCLGa3Pa5nAr2FpFF6lGOEqcA8MVWEhDEtWZcdDsr02AWtDA2Z3EO15d MCxc7ulnHX2mdZa3Uwu7dTU9Z7ITcNgkGyg3WtkxPqXDFogfM6/9zuYZZ7e/BwlP4pIhTAnHezX /IvZpNzU2PKj X-Google-Smtp-Source: AGHT+IEDsSxPcgfQb9bNl2NO/QR3fp1cPbntSZEvXw66a5BKeUcxj2+9sdup9A8MfZTpDFIB0cu+9g== X-Received: by 2002:a17:90b:1a8b:b0:2ee:dcf6:1c8f with SMTP id 98e67ed59e1d1-2f1392b75c9mr2567585a91.16.1733954426563; Wed, 11 Dec 2024 14:00:26 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00:26 -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 v10 02/10] perf record --off-cpu: Parse off-cpu event Date: Wed, 11 Dec 2024 14:00:06 -0800 Message-ID: <20241211220014.931479-3-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 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 1CA3A1F0E51; Wed, 11 Dec 2024 22:00:28 +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=1733954430; cv=none; b=ZcEPPxjhnXkO6i2rWfrFT7/erL9muLsh3vE6fFvhtYxJcEx0O/yBCZbIsRWTNXP41INgdxREXgdHBjqu+rKKYCYxP5WBgpSK+NXjrtNZ4zUWGYuWVH2HSCe6VeEuU/2sGtirx9GO5CY+M8jI09SgnuWn+awe8Amj7kvpOGGgoAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954430; c=relaxed/simple; bh=mTlC+dsjuz20TP9NXLl05x5MvL2ZF8LuKq6YVidbn2M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hocc/84pJa65puQRIBE/nKMPdpH5HNtL++uaiLDk3v8PWb6KNRzbuHOV9vs/LYE8/MBHFw5DdrPkHSM+fQ4YKV0bzbvlQ0fSX4/oPj7yEFrCsR/JSOsFtAtHI+MeiDSqevtu5BAQRyOIQG+rM8+kiB/R4uy0VsROzh2rcrD8Oyc= 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=Qh6aVmU7; 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="Qh6aVmU7" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-7fd49d85f82so3121203a12.3; Wed, 11 Dec 2024 14:00:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954428; x=1734559228; 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=Qh6aVmU7YaeKLoAp3rrHhTgjiy/ZqFuN2jwyRStiu4EbGDkhAIHO7LIAvE3dLUKTT0 4P7KRYzkY9PQvsfgg1XN5hh/MRrh5ONJDFUoUWElXTDuCDGy5tRdZbP5Fhk0JULaO++j o+8U+tXaIcjGaGwJlic/3nw/rpLw0G9gn5Jw4lSyJooI4Pyi5TZHWd1wGfMYukRmB0+f giYk/J56JT/SvbezixQaAJa+01FyABZNCY9su0l/l8xfl12crSkUKgdCUQNj3D5euKgI fRQlR0QF3Qr35LFa4njZQlmjj7NEdRFMKkfGyu/OpnHwYET+f3PTlXkyRzrYH2YN86me XbrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954428; x=1734559228; 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=Moyw/K7qIO53ZBGO2UNQ50tbeoPhs3A0DUi3i7luiu6bN1sOQWEZOX9aZ9etjnGjf6 zSBIEwNNycZVafBgCV8d6OyZ+Pkxq5AGeS3J9WX1IWicEq4ESebFCBfV0mBX/rNDens2 2JGzXwf4UQ3emzuzATJxQKstQefrHviEQ5SWrWEyZObJ8lSOjfH1ZomIhNJQFGX0Ihtv bjMAe3VVC+WB/VEbMfcdGJ4NWlv10bVeQVk13lf/T2ySZHG8B75+0J6TNLDQs83+rJZm Mu8aR5na1RNwjsyX2bQ5SC/4e2dJVcf1Wx1edkAPN1pcNGXzmpnwbGs++EQVnubXY/Ab udGg== X-Forwarded-Encrypted: i=1; AJvYcCVrpwsCdnapKjdQCekipOcVjTxoj8uI7w5VBTXlXaYsBDS+qJEHQxAhXOPSPx0gHiDHfaHwlWGL/+sRV/wRacWwLA==@vger.kernel.org, AJvYcCXUXOB2g1gq4c1NqEQXEqW+ICQNoLjYZNDpAqSzj1i9yfWlkxyaQ6kVeTSxrOVylVwxMxajXva87yxXD2Q=@vger.kernel.org X-Gm-Message-State: AOJu0YyWABug/AhmxOT42HvJNz/AxWzV4WiMPsKAHqzvPswNww/KJVQO QuTmXa+RNGqA00nEHhDs/HhDHBvR67jMj1/TokiT5aiiSCmjPwVn X-Gm-Gg: ASbGncuvYJ9M3rDWP/UrckGHyslpDlxBKujO9DLFRpM/xVyT3driM/wZWR/61zJ1Bt9 xJ2j7NsflTAhGlISc/ZKL3VnVxUM1cjRbOXHuWKamlzlt2vDw/CNYrPL4EIIkjrUUtcPSNtoe0i EDfu35iYScmEMo0HgrLBSOwE3XRAytIqeWOCSdRc5g7JsaIeFJpneNH2Vt7onrdBnhzvwMJkoWH dNH0kFBVIwwRr5TLqMG2iknGZe6MQQ1CcFex3FaQcRuMcNYdyv56jfZ7rZEqx52XPWUIxtewn1g yVRcRiIkdQ== X-Google-Smtp-Source: AGHT+IESIqEvocXn1x9xaKJN69LVMNhEL6INdMAGav0xpPmZeFPIiCm5MGR853yyWvWaziXwP4Cspg== X-Received: by 2002:a17:90b:5405:b0:2ea:bf1c:1e3a with SMTP id 98e67ed59e1d1-2f127fa5e12mr8993110a91.12.1733954428269; Wed, 11 Dec 2024 14:00:28 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00:27 -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 v10 03/10] perf record --off-cpu: Preparation of off-cpu BPF program Date: Wed, 11 Dec 2024 14:00:07 -0800 Message-ID: <20241211220014.931479-4-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 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 DE8D11F2394; Wed, 11 Dec 2024 22:00:30 +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=1733954433; cv=none; b=euwT5oXmv+A/wG/u/UWtDn5b9ppsOBlLDbr3+pAA6nFVm20ofOXPQEWoE3qjlZlCWbn47erw66J0xDFy9mzVP2LQUx9nihhb6n/0Rza5TXnZJ6kH9cxh05Y9hdI9KoRrEVnuo4a5I+vq007Xa+KkFIo4Nfby2LAZJRACXIvaC1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954433; c=relaxed/simple; bh=FhYBFcBipaHcJVExkC+3V5vt7nolG31xdwTCXFsCPv8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q1Sgzn2Td4W0YSgyE1O3RCTeIFv4woFK6cuC+MyG+NP0cgOqNpmd0Q9NagetPYb9joBmN8T0PRSXftAZkaUFllx9J25CAz2OOkRtNOnNDU/BMWj4Z7QvUYoj3WD3PSXj6B3q29t/AAWQPt4WKLPDe+j4Q8u0+YY/SK13gI6Erf8= 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=TohcHrKA; 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="TohcHrKA" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2ee46851b5eso5236289a91.1; Wed, 11 Dec 2024 14:00:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954430; x=1734559230; 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=TohcHrKAM5ZWpJ3WdrMMZo0pLd8dw3nnv+bPkblqxqxmrQRgH+noNkJUsWJqyq1LAG 7uitpU5ZRCo9POQ3+hdb/1jddy6ox0HbAuLaS07Cd8DS3L6FtB7qaQZfmfqo28sqHYUI WnmlfEyQSVNoy3KSeexrjdm53zbt029CMZJSvl3TU+eYjyRl7xCuGF/r7HBCiO6ijIYf S6j70mGJ1nW8T37VH32gCH+DRDl0vmQhc60+v/fI+OZIUuE+Ll8jhLn9VbI4UqfjQy+s QAEoU4kM3xx0RGCfqBOwzVa2v2p3nAFHBm1DaVE1uW2tI/De71wh6K8nPRIXoqE9NS/Y SvxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954430; x=1734559230; 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=O3Me+Em9dWmwjJUjxjkE84m2TLWINU3SMHy5hfz/Qzfs9zYPo3qQEKPJIoLhFm0FON K0eIeA+JEZNTiKalDpUdd+4z85yVY6FiUlvBYjcc++VynyFkNbakXm6TC9QGOYrRjoG7 Hl4c0hRSnskk8KKDGA+lYZrHxGwzCSOw70ojjk8Bww6+rB9jCaaGlFdMOSPd5bTUP6Fv hQ+uqT+YLvcNcYZRmDN/T2YiUaqUVWPAyOGtomvmwr2u9zCXFtWVoMFQdAm7lvszRRZD vqFOuhVC8ll1INFau20uWCO7GoWbnOW006olfGPWFDYm1d+jv+i7IM96v7HrDdfNI++A m1qQ== X-Forwarded-Encrypted: i=1; AJvYcCVPRcIbbueKfwC2WusJW6Bye23lLUen3OvTbctD8GxZdkP/JLtKQ2YOzRVFPHhMCKO+B4la3TD5dpsnBUA=@vger.kernel.org, AJvYcCXhyEjqkxnwTNh6oq7471KNsJLcKHW2JNS2r6WS5GBKWG3xsvSJjH14FsJ3ZgARZbsv+VVoqxLxpdi+CLMZfgb2hw==@vger.kernel.org X-Gm-Message-State: AOJu0Yzqa95EAgNGe4fBlT7thaa27Rf+XLMil7vhQtMN3NWYar6unnwE hjqV7/xEWeZjywZSG10dZjhwKO6XM/iJbLB+fqqQqXqwWO4J3NyT X-Gm-Gg: ASbGncua2P5x6nRs+4qMWhoPsL6HCwOzW3+IWmCI4O1mgC9RBSOvDhxglC3LL1XYDne IPsjL9K86heE05NHOGKQGlsW6dYDIwuv3Mjy3B5nAnqVbFdVoBCr4Nbp6OrftpPg/J2GogDHROr EWLPH98V3C0x4i3HVDC46dbxh/GW7e0zDzHV70hWyHxPuAvW/MR33WUSFntidVTJ7SrKNnepB0q 4tfZfkjOn3td8esx47QH+O2LXelG8atmOW0ktqk0Pk4+CCXehy7ORRvkEWSRtLE1dRaf/PzbXlM qFLzAWo5WDhv X-Google-Smtp-Source: AGHT+IFdL6uyvHO9Jvm4Aof7MSYriKqxrG1J0os80HsE1QNsKh8D4B2zDKgEnEIRb9CiiAr7Pz7ofA== X-Received: by 2002:a17:90b:3502:b0:2ee:3cc1:793b with SMTP id 98e67ed59e1d1-2f12803555fmr6170771a91.26.1733954429915; Wed, 11 Dec 2024 14:00:29 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00:29 -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 v10 04/10] perf record --off-cpu: Dump off-cpu samples in BPF Date: Wed, 11 Dec 2024 14:00:08 -0800 Message-ID: <20241211220014.931479-5-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 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 6256C1F2C46; Wed, 11 Dec 2024 22:00:34 +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=1733954436; cv=none; b=esBO4AERE1hvG+vm0OkDoqZwlkE+9f3MP5qiFee/cPmFo3eD/20lL220qBYQW8cWOFiD43ssTv0n2Ahws92WJrGjvIWGbwuWWMVllFd/JPGrvOfeYTgQBjVI26mS2wD6MyoBFvcBFUGzYFpcfxwPym17uu4krajZ32wv+Uitutg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954436; c=relaxed/simple; bh=qS0cOrCuQAGNC6iJUTgJsbjM3SMEBq/GFor1cJW9EjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UHwyugOxHMpXw/osYuCA8ABrasKAVogTR/fx+dzVka0rLCs963aj6S/9dySC6/WyeN3y2RrUvpR2y/QOAFX7gUydXMQygI2WHAy00oZD1qvdhwKRWnwSj66IHAd5gtFjqSlip5Q5WTkZ8Xr6qwhC9GN90JfMKWRZkRDJbY/mbTA= 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=CnFtbLRs; 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="CnFtbLRs" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-2ee989553c1so6174330a91.3; Wed, 11 Dec 2024 14:00:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954434; x=1734559234; 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=CnFtbLRs7mbkEH5A+beBsEU7/4DDBQlsaewBHeUPlm0hGcRthHOhWUx+56Mt1D89sS pkaDA94DDEYycEI8Boru20ni+VkuLoB/r3O/JINkn/fWWoQsJBKKkPpDAWWnzzWoBrFV IbRmR8lAbVE6mBPMa7fu4J9ciGgGPcIvVqSpwqeSXjHL9hEUxmtekIx0LaOCVeCkZY+0 Hp1EVukLXyi48uxaMru9lJ5yF1uQJ2qFDK6pGlvgA0Sm5Ul7A7e/O8sP/spSDOo2RRcb HEFl/+cNOKd/YSJcY64hBPV5WBOVD75F9JC0KiKVAPmVjvap9WsI1Naa56QaFckCf1aY X/rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954434; x=1734559234; 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=e1iV0ixULlNxZ3BEvPfBVsGCF4vcnyrItDpP7L6MFNP2xFpkLt7idXOUYnA8FKSbzq IMxNR9NFsyBD2Zfxh/UM+2VpklHXyhKn2fWIvdRvY+HfxN5DEXJd2sIarD/mUFvGuNmO gHft+UdMCdJdj1hjhhSG3icro4V5erVfVX+5D+RkwE61TFNVMn1uChKOmH+q9GOeWc0H ng5sIQoDey+/kDe+opMy3xnBcDaaRJnfLttBbNP7UGieeu+emJt4vI8wpA0xRDfWb0wB /Usf8ACiFzbRQFwnvLs2ltsgJ1GlV4FBjAKvI4lLwqxmdscR5ExMbUUKEQjFITBsTK6I fygw== X-Forwarded-Encrypted: i=1; AJvYcCU2hRdeLRu6y54mBSz/5vxl3OBVvoK1n0XGKvXMHnZAlbOttpaGTAUB7iQ/Qjm5PmSPp0LzZwUBnUgZLS4=@vger.kernel.org, AJvYcCUByAKPGHh/l5QLEKW+NSgmDYPpB399UGt4j74yx3FEDAkxM1wfftaoTl9ZW6D+RJW1bHGa0vR+t7ySU8fQTMBQ2A==@vger.kernel.org X-Gm-Message-State: AOJu0YyxDRf0PVzaIAfWi3fvCV85SCSdL0PgVgqlOvIteeMcTXGzmSZK mVxQBMz6CtNE9ABOLsgToUKkG/VwI0mhaNh3oERyCPznxBsHsyp/ X-Gm-Gg: ASbGncurPMzopDCeEIeYZREVvQyw8IDfDMSF+N5fiWqgRUTR2nLhfvdP5gRY38D7GiI zJtmQLucqhBaeLaZ5uzDYZclpAKTCVWz2gkd6bG9eRbtK5h+vDBVj+ahtcGYE8uOBzfnILJX9W9 cwAGid/6lENZXqzU+Dahri1EyGh3FtJ04pWFZSs12YpnfQRA6pgnNFuF+j4GvO9jg8AnAY1btSt ynel8o0et12wEePIugCa3V+twpotRlui5gn80Ct6PE64yxdk+fypVPVaZHFeMnvqMXF1PRZNuOJ QHHrk/bj+g== X-Google-Smtp-Source: AGHT+IHXZXobPmFsFepTq3tKAJr3ZQSElAlJ+hjWoppGi6PixxorsUq17k9/JzkBk1d4aVr1kGj5nQ== X-Received: by 2002:a17:90b:1e4f:b0:2ee:ab29:1482 with SMTP id 98e67ed59e1d1-2f127fb353bmr7928854a91.16.1733954432102; Wed, 11 Dec 2024 14:00:32 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00:31 -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 v10 05/10] perf evsel: Assemble offcpu samples Date: Wed, 11 Dec 2024 14:00:09 -0800 Message-ID: <20241211220014.931479-6-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 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 9B52A1F2C4D; Wed, 11 Dec 2024 22:00:34 +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=1733954436; cv=none; b=rPRfjULq8ybiHBCOASAAnoLDITlTYmjg/FkhSs8PW/U0u8Wn5RNGh7HB28IYJq+gHyPjjuqLfH5R7KZIxKvDa18X8+uSu2K36vQjK2eptWOKvO5Q8Ww3l99dgYfgvaMHhfED5sG3qnb7s4CJJTVL38Zwu3vOaPzuMfTtTOkXoo8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954436; c=relaxed/simple; bh=e6fI2ZVl4IzPXnFdTWlY97syscDRQIiFgkHg3JcX4HA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iE7rHWW024XcEiTEGT3gjtHiQYfjYRozmAFhEPV/neq+xc+I7K5oOGeT2u3CSgzLxueOADUUOf0Z8YnQXOJGFbWBU6roJpnPKHvHsm3MBj3JWWk1nzUNOr7oRO4TWJLupkBf3ffA6GbR+nUXxh59rxy0GqNH4nJ9YzpyxM/kwCE= 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=Eu4NIT/W; 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="Eu4NIT/W" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-2ef87d24c2dso3739045a91.1; Wed, 11 Dec 2024 14:00:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954434; x=1734559234; 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=Eu4NIT/WdrSwiRF0EawoU0opIzyCOdLXoHX8Ueq6Vezt2ie9q/qfycMf6Zb5/YUSTk +WAJs9uCB2GgsK6F6m2ToFHzOi08IMlWYwRj3GruVKryaygL1Fz2GGs/8H/PdbfhFAct ousBZ/jevRnEVjHx4JtKd+4iU09xxF1xpcUMuQK6dKtF0RgCY1x7gWCH/RcQQ/1cMr9L qJtqt8VJ5kzkhm26mdE4ZVJRuXyyU9p0CgiIc43+/PMBhKaVzQ8yWrRhWTw5g/FV9Pee /RWVvep3qCEtAMnrVxwBmUQrdeN/Pl/titSujswvU4b07qPVQwMieyvkcvzYAdkrNRSn HmkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954434; x=1734559234; 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=lYWGZ9yJm08APaRbp1guX5l46kZvrwWxoE3pfkAn8l9bJ4uUFJ05rg4tgx3TSEuO30 xviVJc1Qxb/ZkKCkBjUrCj2fdT860XHD5lpj7j0aqTcHT38ZFVPbQKZZBjqjvxHf+UYU oFGvLHT5R8PPLGPVAba5oa7aa9LNmFFhuuV/cCA2JG78D5dxo9hSrTa1X2TlV/dQT7Tk H/D2ndXdvwnwNOnl47cucoMNAcPu4ZldYRvmtB8GpT3n8DLwRMAedXN6xRfNDoOdGf+d 4mtWI/xkJ/a9vgeNnsJK2qMDnAUHRyQyFLSifGba+fJN94P10GuFC3PHRgP1Rf/dqkcR iK9w== X-Forwarded-Encrypted: i=1; AJvYcCVpGiWbZGeGIyaIm+WkGgXf4qDGjtuHwK0BYf+w/+d4JuBNOy5XRRavU8iRJh/XdWi5/fjCjPJsaIx5TW4=@vger.kernel.org, AJvYcCX8hl04uZVu+QEhnefpmK1jw0e3lESgJ0HQZbNlmHb3+zI1Bv3h5TMTtiMo0zLhyWv4i42xHFVtoG90ejjUxQd22w==@vger.kernel.org X-Gm-Message-State: AOJu0Yy0+uVRebiiY+bhSsGsZql03RXLeDomaANlhYtwg1pQsLWkqJCA aRAFqb7GmX+MEpyh1OFatv3RJVqY5t5yJGgtj+WcBi7jvSmsEsPs X-Gm-Gg: ASbGncu8q256RaRyBvHuYda5p7D2ZDqdvYR14c2aumsxUmvHenzNjNgDGpyNgOYmzUF rUgkKzGvgfvvSQrrGl8j54fJ6DsfPUCFy9gaazypfgjAEgsCgF6asUUNeMGNzvCuslv9XAzj0s4 Zc9+JobwgptJxKEmFeX4q+yRIy7J+giXzhS5DiqgoIyN1v28Nhfq1T12QQ8pmrDfsoBYTennO1G vHspnlfqZhPZpu/yxXjQ9DVVnYpbV6cjhb7OqDCJsopPwcqShNw4D4qFxY5mRmCJjszR81pynXk F/XCiwi2nQ== X-Google-Smtp-Source: AGHT+IERYp4Pl0GlWUBTyplf2m5GLj6yolBx/7piUJgiOxDHy/hDpbKoNNumrhiIOdKte2mO/W3B6A== X-Received: by 2002:a17:90b:3b4f:b0:2ea:a9ac:eee1 with SMTP id 98e67ed59e1d1-2f127fbeb87mr7298016a91.10.1733954433817; Wed, 11 Dec 2024 14:00: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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00: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 v10 06/10] perf record --off-cpu: Disable perf_event's callchain collection Date: Wed, 11 Dec 2024 14:00:10 -0800 Message-ID: <20241211220014.931479-7-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 2025 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 2528E1F2C55; Wed, 11 Dec 2024 22:00:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954437; cv=none; b=XBRC3pp6ZkNY3iw8uyC4Zbh4y//ooVSxDoqD+FSp2sXofgQZrAhaBmMEFMPB5lvhxngHNzKQyHVg/2Il6z+erJivt0Qc9WLwyB7ndwXp6UjYm5tn8o99MZzJ+Sv5wFg8sO69nKbno4R2SeATbanOBShVIFpGM2+IxYcWr1D1Pdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954437; c=relaxed/simple; bh=jPBZDIKyif/LhOPbutvjTXCG2gTELlQErVsQ7/V8AdY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=u3eMmMQAXGmTVkaLWIa1AVyDHb+FZVudet9ZBG34xd4DlPGj6cL53mpt8sEalrHhl2B1X6IS70r+BQRzDVBOpRRsCj7PxOf3vDXN0I8lY65reTnbJczwHwAv4VGOmdiU29MTUwwaw2zIVAdQVoxmbwbAJFZhW35swFD5R4JYNtk= 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=bg9Pm2MW; arc=none smtp.client-ip=209.85.216.43 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="bg9Pm2MW" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2e56750bb0dso5223846a91.0; Wed, 11 Dec 2024 14:00:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954435; x=1734559235; 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=bg9Pm2MWZQzgrU4XfE1AiwslREggTKsTujo6SwnrRWSOTqHvYnDBhcPBSyA0i9Z4VS 7JtlS/HZVj8vIMaeCTlnJANI0WDcYj6luGZtHomz2HB3Gb2+Meqwf/MSe20v/FGxvZrq 9BwSnr5CafCVRqavYFPAHxeH70TD5IrUNqY5oz32O2+t47Hl2aW4uQH3pchqhQmoGJrJ H5IhuvgdLtEAAyWB9r6/LFfFlXDHuFNMN+w87OvNBmm93thaJlZ9ynC6zuxLugpX/sNN sFoSH9/gjU6+Kne9Lk05BBwYw3k+JQi/UmnhyJub2H6H7R2xOZ/mIQsRrkXzMyIXHh7q /0lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954435; x=1734559235; 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=xFK/H7BBJ6kEwwSlucZHkxUdZBa9WXIJWhdw2rqrCGbBMuOD1qSKCbn2rgwWEui2DM R92ZWaJM3Cy21svk99xSGtm7FnexRke7XU/E4V9Y7XbtUbdYWiGuiTTeda9qYjX/b38F 8aAvL82kp44N/aaOjwaruZWQa45IVHtkGLX3g2EvJR60gDFqvQLAh4SeWvgt3qr/fJsB fQgMR1QtoiT80qVnMMxIOcJvT0DW3mgfLsUbcPoFdSqXd4QsD64u7+43MyKQaaEWFCOY y0OuGWLx1wh8K10BQeDsLxF3T27GvgqFu77+lYWl44ZmApNX+UktFBpYoRJin1qfVGGr Myow== X-Forwarded-Encrypted: i=1; AJvYcCW8VYcTShgamSJttuLDXLTXsq8MmGSGCkfm3cqBfUH9yD9P9mo5PE90ef240q7tdICMxOQBuWRaRAyHmOtzY0pXTA==@vger.kernel.org, AJvYcCXLlR+gJYUeltXyFt7go8NcJXSUmbpjwvnQ9Xm6XY+I7CUHKYb3HKmPpob6c37Ecp2UdqgLCBgQVAQnH4g=@vger.kernel.org X-Gm-Message-State: AOJu0YxXDX/bA8jsdKeo+ZS1YV9ukyET5JP52ZxtQnoTTXw8sVzm4Ya8 35MP43wZnZR+Agqjwh28t9bSSkaWLEbJJWTRWwXPkhtP7ACLUT1A X-Gm-Gg: ASbGncuVsYPe42r1KrrEfHFKZagtdG1QswerYLElk4Tv/wouEhkVZHkB616wjf7hFhI 2j2Cl8APPameLOyw5Md0IAqEH1FL2BIfEAmokZr4YFC6mfVs40RuKM1rhOikRmQSv9liUJiutBb z1heb1ajFTeQ8pbkmwdWcu332zrKDseiJdbR+f9IINrLD0D9wTwTQajSUER68qT3h96sX97wtLC 7SWWTfmdYzl6YKVGv/hNAgSKORhF1HV5guVn+eEDw6Y4vj3nRkU4myVVEsnF1TWh9z0V7MSfIHt b+VFCPfxJA== X-Google-Smtp-Source: AGHT+IEgI5PfKlxqpWLad+waN66KbwEob3o1cEWdplgMrEhXiiRaFLYkAWy9yffzog/K41IbAFhuAA== X-Received: by 2002:a17:90b:51c9:b0:2ee:4b8f:a5b1 with SMTP id 98e67ed59e1d1-2f128031e61mr7132275a91.24.1733954435430; Wed, 11 Dec 2024 14:00: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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00: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 v10 07/10] perf script: Display off-cpu samples correctly Date: Wed, 11 Dec 2024 14:00:11 -0800 Message-ID: <20241211220014.931479-8-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 2025 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 D19D71F37C9; Wed, 11 Dec 2024 22:00:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954439; cv=none; b=SnHvOZUPg1bwfFspoAPCv9nACCEEyBCSzNb8VGZF+OQKUBNyz5a0I3QmoTPDjLEIK9bzyBwenoPz1HQ/VOnVbMjZ90T4jOh80yKD/Y5LwWCoa2qRyE/sMFjqBhIt85DdWqyrTQJoZc9HwCxstr4WIVPV6VqVa//wp9ZlYOnYZTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954439; c=relaxed/simple; bh=goTdjk11qmBk6a5P1AA+giS5yljV5oLTjYAh1YgVF+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eutmhVE1TOlc8xjc7DSO2u8vfoJ59dFWX4wOzxEO+VYAIzGKMbE1dgAcd7IXtQNr5Xg26bCMUwzxqVRBsq/yCQkkjt6pcP3+NKDU9IuQlM/60W0qR7Gx7sJX+dxKyodsLFc4VTnmtcnKAPOAI/0nfFX0t8upwuQnR+ZbRDqMilo= 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=ATEi6aeZ; arc=none smtp.client-ip=209.85.216.48 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="ATEi6aeZ" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2ef70c7efa5so4080468a91.2; Wed, 11 Dec 2024 14:00:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954437; x=1734559237; 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=ATEi6aeZtfFIB5wHujNLRBnBKbminH7YL+DgRRavnqpXELdKPaEe7JIMYfAMdu4Wop LGSROYCKz57uwJBAlNZAS/u1gzPXMD/b1Dgz7U50N5SzHIlLHmSP2M0Xi6GcPusstUHU Ug7LUW7cmg+MIUGfqDn3wQgqJyneKk8YSphPKz18+2PhRwktmZ0iWkTgxjrY/4DSl2Yp WxnelqXsxlvhPIPgdyLYdzbIWm9AxXLa8kOYyP11jViyB2DunA9qRAPQHHi72a+j0rQF syMHi7L5Goo77TMS/vDpAxDyDc95Rx+uOmzw7/jTdjjjVX1nzSWns9PRwGHMeV/mkkzU aKcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954437; x=1734559237; 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=Y2NA5/MMj5xyKvhF/pG9U68Y+Ie+6gS3Lhqz4weGW4sPSU/HgvSeYmbk8Ovx33K+2k mA8i0+sWfqd6vgnYq91+WjPJFFCz/umJqHj3YGgyYEDZqOuqr5u38tEkJuL4Yoncaryu ae2M9IytpsrwvpR2p4Cb3e4jfK1jkDsLkQWPFjj32dJD30QlAWcD5nRh6aEgl9K9vF+f bUQmNUX5vXuwC3DZYXISjddAstbEuHkpcDP/q0sWQrjLUHSgDOFBcDRUebNUlMOVRih0 E5xzqb7Fy/K8bSREvWCAr51AkcF3xotUyspHJdTXV5VqnjZ9sMzqObk/HlPEoSPYcoIC I4qQ== X-Forwarded-Encrypted: i=1; AJvYcCUoicjsgGaJo9wI5NovtLnA0b1cL9WhRFWSST9RUTwCm7MeZFw9cBCjEllkqSYsdMYASHM0gKdIDVn/qQ8zpTwG6Q==@vger.kernel.org, AJvYcCXnlhRfOOVeJOUWsRI3b6GnXC6eXYVf7WBSXxHtxT8WBOict5xobMDEsuev1YpqpGACJMkHX7daVcXQI2s=@vger.kernel.org X-Gm-Message-State: AOJu0Ywbq7taDM8MYWgc8U8pOAG/PAFxxpbKlPFcIE481DJTu71Dvlfd OEiFEAc5Nc+Wtr3A0tiHIuQ1hzsZvCpNbMBVedkj5O7feTOE7pqt X-Gm-Gg: ASbGncuir+PYzB663wlYrdhe63urWID44ziajlAgiJEQ1yYas6Vx5msrxzVgs5AZT62 myyzsD6/4vgw/Km2QLo56bTobEJuIbzeIN+zUY/Xbp7YqLmpuu8zSHLv0k3GrC51y7X3PlHUVMO XUogR5Dg0FcVdH5PxJ6RHs5FY7tTqs9BdhorJHhjWoP4UyP4VamTEw55CSGuHKmvPara4ZIM8z1 4E3uo+K3+G552/GAK0sAkRclikz2Efv+8t2Ow8g1xh3uaHxyTq/0kDfbQ21S7xDGctar4TVxSmJ qn/t79r3Jg== X-Google-Smtp-Source: AGHT+IHpNgluicFatyt1Ht9/5l9c7EW3bCB0pLr2d9tguk/ehE0k3pxWArTwymRCVaou9OSI01qdRg== X-Received: by 2002:a17:90b:3e82:b0:2ee:94d1:7a9d with SMTP id 98e67ed59e1d1-2f12804a1cdmr6273017a91.32.1733954437077; Wed, 11 Dec 2024 14:00: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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00: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 v10 08/10] perf record --off-cpu: Dump the remaining samples in BPF's stack trace map Date: Wed, 11 Dec 2024 14:00:12 -0800 Message-ID: <20241211220014.931479-9-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 2025 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 0DC3E1F4E33; Wed, 11 Dec 2024 22:00:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954442; cv=none; b=bLUUZTm6Vcxa1LQvLLQcK1SrfvQi37I8dBlTHHQ66AkZBvQrMO7RKGp9KE1m1x5KAHEvxW13OsWLKt69hE5WWQIhABTimT7xB3vMlobfuBMh3pjqL/uyekQDYfqz28euLfTIZCMJThr5P4nRaau8f7+34U9y/UwNmKR7dNGZqD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954442; c=relaxed/simple; bh=foSgLTZyTs4SVotNFY43ppSIAy4gTLpyUpH0qpfuhUE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fokQb04dSZ6HM1I1JG6T3h6+SW4oexgeRfq4qsw5QIEGSbkqksxTz4qYYC9M/wFRcVew2gnNUW/wl6ZIV5URCFmTx6YBXjbXGt7iDGC1XVBL9obaOIZQ0YUT/ZPJcXiG9pPA0TucxUsjNHdJL6QczdxdoYEoFHN3Wov3hLBmrYY= 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=HGDSEVbi; arc=none smtp.client-ip=209.85.216.46 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="HGDSEVbi" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2ef748105deso4217950a91.1; Wed, 11 Dec 2024 14:00:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954440; x=1734559240; 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=HGDSEVbiyyotLbz+Vc25aX9yZlo1vN0NiXYPRpzfXllsZVgB2+UWCVt1nuYF9wPfNl vMOTbbJi40R8OEXteosrcoUhTkBh52AlnzvoaA4FFFEzYQqUU9Mg9OmAED0BZAJ7i6RD VJuCFabsyTD/tCU5pegRIJjlf9StFnCBMZPIjzj2muKTAWP8OMESjJ5HRngoXA0D4LRd 4kPXC0Tyw2V9FmW7GNIlJKgtrdoiybGo3nsFjzgIiRWsiejiR0uQL93zXQWNynpXRQM+ BjKEbFv6Ca9zf0Z+VmvENUtFfm++ct/jLLQFgLRSB9+H73hou8OvDXTHxC8Gys8IC2an OfKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954440; x=1734559240; 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=JzScrypK/drIPdvX7y2MTsPP63w6+x69RK0Lm7e4TmT9KwYMv+Kr01L/Vpy06k2pcf +EDQaKWhGmRg9vQjZl5TFOzD8WJiSBSUVoIa46HXOobwFgqV8/nPWYw0rvxuRQ9rrXnA EEyI1SrhoWKVEbpdSnKyBAYC/vxIWpBJD5usjyC6W1f8DYoAuqqDqMF6onAZlDqSduU2 uuBHwlJLbrQW7mnWUSaX97qQJJOIalmHDH0C1+tHUNupoLkhEB1JCQKI85fFa0N2+YF1 LTf8S9DY2pOgt2GUoHZ1Re/DqxdaslkuWaIyhKJlTMKuHxkWHoZR18VeDnEWHvSbAqKO hYuA== X-Forwarded-Encrypted: i=1; AJvYcCVTHnxSSiD8mhqcKZbp6aO9wt3wV/sMocoVyBirWAS+PYCFvfWwJ3FzEU/eXA13MWpQfqPHyIwTYbuRA7yrloVkGQ==@vger.kernel.org, AJvYcCWjY+q6a5zpX/aDW8n0vS4nVveDSMl3neFLqSuoaibSlVwhb73gHdXahFOnegFyUkUYJ3X8WL8ffDOm144=@vger.kernel.org X-Gm-Message-State: AOJu0Yzv9A+P+yM5UFS/449MR4NcVpHg85bhZ0huemUVMeVcnkrVmxA+ 77lKhagyNdJqetlrdKuIg64xCGnwvv1W7ecV2HImoTiGKuDPdM8A X-Gm-Gg: ASbGncvCoFQyTM9+3yBH3iQ0bBcqMUpAu3W/RqeJrSLcvkA6CL6IIfxqRfEDp7DDTA9 I5ghlI4OcjDmuKbY9mkTjGmlYYGrXR9CWSBPU9wWJU5C/C5wn1JZYmFOJLr6zxKJksldKneNu5o UzePELDvmKFnTvti2uhrYusHfDaKnXcy1wFzJvBksmb9wn/4jVBDYrWLrLCS7NGCRgpeceD2upU 4e1nid/Fdrf5K0EWlxNYUyWsrjAJ8Y6AxK4pRb9VxytUTUGWkVeS2Pa9EuIyqgTbNZVFJmm6UEg HxBRocygjQ== X-Google-Smtp-Source: AGHT+IFtUs6o96Ickeac4oqzX+YjBtxAhxZqPF3v+ltsT/W+Uvq3y4hhAvnDY8edquGxWcpVqE7ksw== X-Received: by 2002:a17:90b:4ac4:b0:2ee:e18b:c1fa with SMTP id 98e67ed59e1d1-2f13930ba5cmr2039691a91.28.1733954438773; Wed, 11 Dec 2024 14:00:38 -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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00: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 , Arnaldo Carvalho de Melo , Ingo Molnar , James Clark , Peter Zijlstra Subject: [PATCH v10 09/10] perf record --off-cpu: Add --off-cpu-thresh option Date: Wed, 11 Dec 2024 14:00:13 -0800 Message-ID: <20241211220014.931479-10-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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:12:12 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (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 388071F4E35; Wed, 11 Dec 2024 22:00:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954442; cv=none; b=PDSDljn/Mz/xhg2KrN8ig2TUcGhq0DcDwxNUfdKWSu3EFPMp0sqtcUpg2zqaT6X9+R8NoMjFXeXFx/NhMfayaU913RPxBH3LBIddR8wz9itOoh8R+vQGSzy5E2KEUGvgsZqw4EqiV1PyGxL2Npfqe1eSBSWwHk7kduxvm7CuBqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733954442; c=relaxed/simple; bh=5nGYyxgY3B9mVbxCdPzUtVeTM5bCMbgiAaUPIEyAA9g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LkoCpg/vbcglcU18yTCAINLcVbYM1KB9MhsF0MN50nytlEwrVrm6KG9FrojXRLckmNBHiPDwup1N6YmP+UM+bvbZG3bP0aVp76pQ+SxeAu/zld7u09JYsWTggW5pl7idjNdzkm099BM3ufhOp2XlRJCiW7DjwiGv0qAsC5xSSCA= 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=O3SExPcV; arc=none smtp.client-ip=209.85.215.169 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="O3SExPcV" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-7fc88476a02so5882072a12.2; Wed, 11 Dec 2024 14:00:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733954440; x=1734559240; 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=J85GkjASuqbDMp7TzMhDbcWcWzC+KLekepi7rqoFfYE=; b=O3SExPcVxrfohGXwqNfpFPvPZQiwkiubSVthMeo1AV4H7yNKA5GnF5wuExOMx6iXEH lSlWpxiXDfan6YIJ483aTOd0SV2cCdYhid7xVGOrt45ysNi65K/FLX716lk5cT+VPEVS TzZ6F2ftdXJ5esDtNZzT0IuKqg1+f8Lia/GdqlH7ZpPqWmuSNn3ftfozzQ7kcTK3Llc9 AOH9z0K5VhN8HGkmaowKqBqALSlde6cD9Y04quUCSHJ4XMNTYxvdYZxiiEWTKQRkuDhS fwRxUPrU1+U8qH/VwuOg/yFIG6GFz8ZpRNWh8KzShAikis3SPhph7Ytt8qE0VaxPGkdq NxMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733954440; x=1734559240; 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=J85GkjASuqbDMp7TzMhDbcWcWzC+KLekepi7rqoFfYE=; b=muh0zLyOWPR0AJ4rpiBVt1aGBuByaJwK3U1rS5RdVEQaf3QXzdU9DLyGGI5GfXdRDG LqWtfuuf/57yr5ln40WU2ZiOLeeJmbWAL7M7BwoM3ri3LVNktmu5ofmn4nH/tIw5KfgB gSb6YqZvHNPhF2VvrUXg9pVZwZ52Wvmcc6qiw+fDpE6U7frkpD1z2hyDDQJk3c5leDXn x1RBMNXRag+1hi6YHkNu3HLubUwhdYt6iBxJkgO5rF851K7csQd9ojyXI/I8lS13+Bj6 k5rWKRvXUplRHHSrNfHjfK9JZeeu9cRkFzSw8b40rYPc7CIzZY6i4ZD6qbSZMXx1VGnN zBpw== X-Forwarded-Encrypted: i=1; AJvYcCVejvHNOKQzsx0iA0nTGZub026jJOgWKG/L38YU52k4rD3pEwhMELOsV46wNBrIkRii2+ZqQZ/zmBhXJxsKpcd4kQ==@vger.kernel.org, AJvYcCXtuNCdMciR8sBq6T8cP5HXm5t3Vhxv3Pdk7+MLTIzjSnhcjPR1/ccFzQCD/DQy0tlfvVywZEGIh9IVpLU=@vger.kernel.org X-Gm-Message-State: AOJu0YwRtEbkdGZAilO2ziNKnpwsCzJ0CJ2OUURydmvt1ziGPMAFYLHc Eo+iJ0SQnd+IS16+1zXiIljVMhB8BtutsbeBDFRMBuKI7+m5i745 X-Gm-Gg: ASbGnct29djp8inUxC/ihGcMBO9vSI+NIqeqeAw/FeXTNoSPSR/HCsKjR7tHQsCRBVh u7vP5R0b9+0qoOxAfEYtyIo6j6TgBPDOlrgRuD+wRfGUpb5GxJ14Jf9s3G4pInDe0uDnZOyiY1m ZOYo0I3yqdG7KcID88NOitFkG8KGjFdrlzUr2afg2v6aFK4bD1VrxbZmsxcyjlyEInKuD7P6TWy VBwHQT9srs+/21PFTvI3LhdEIZ0fv+alaab9u9bY9vmm7B0Y2Upz8EQMZLwaa5rtUJ68o68ucPD 931NtlO3jA== X-Google-Smtp-Source: AGHT+IE5zRLXj6fZiOzJz4zq6e8BaXIwZJ6K35XFacR4S+Xhp2Y7p5AtXZxQx6N6lhVAmfHCywYdbg== X-Received: by 2002:a17:90b:3c4f:b0:2ea:61de:38f7 with SMTP id 98e67ed59e1d1-2f13930bd0fmr2448831a91.29.1733954440336; Wed, 11 Dec 2024 14:00: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-2ef2700cccasm13912665a91.22.2024.12.11.14.00.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 14:00: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 v10 10/10] perf test: Add direct off-cpu test Date: Wed, 11 Dec 2024 14:00:14 -0800 Message-ID: <20241211220014.931479-11-howardchu95@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241211220014.931479-1-howardchu95@gmail.com> References: <20241211220014.931479-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 2000000? 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 200000, 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..8719130fbf70 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 200000 below, t= he 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 2000000 -e dummy -o ${perfda= ta} 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.999999s + # -D for initial delay, to enable evlist + if ! perf record -e dummy -D 500 --off-cpu --off-cpu-thresh 1999999 -o $= {perfdata} ${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