Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp60777rwr; Thu, 4 May 2023 14:55:15 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6v1GFI7fgLAxNvf6mwtJ4HV8CPW7kXoYR+JlN5m7jfQ+gTDnfKBKe3GSWJa5j7by2r9eOV X-Received: by 2002:a05:6a20:914c:b0:ee:a720:c707 with SMTP id x12-20020a056a20914c00b000eea720c707mr4813076pzc.18.1683237315015; Thu, 04 May 2023 14:55:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683237315; cv=none; d=google.com; s=arc-20160816; b=oU6MGn3pkFFFq9ZGbIaq2CkDFh3JaEB3cb75sQXOAxSntNC2ZC/+fVZB3ZGtNIp/oT pKc/CScCoN7wOPg9smdYWIOdN3fs0kI2+MIHWPC+ZNZBSy+1pF9J6K5kBX8hhSSii4eQ xjYTbhmogxG50OBxu9CjZBH/1PHEPZt8E3nbdsSXa4vT/U7iBzQVGAp7Pmt945/Usgz6 43NP1/KW2pmSYYaj5qR7TJinwzAnzLgnjSTpwkdCiigck7yxGsUZwbKZU8XnNnRoU0LS EYEQyDQM44MhrViRvjttqJrl7YuWNi+MFV6tyanVUPwx3L8pJBqDx34v41p+tr1zYBhE ZY7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=rLCyruhNlD4bNOFNNRrSLVK/DMAUusCVH8qhdAf2CaI=; b=rEruu6uxGH0HAZLPBOntrYvB+y3Vx79vS0pdFuw6zvCkcUlAd+e3pB3xR7+kHm99fd 8imrbym+qREAPWqdZmOsHKk/JunpT9umdPt9fFbjfoQ0vHimxM3kg58QWLRVDvFo4a05 e7OC0GVUF2+MAHGlFP+tRcj6iOQ0VkGMlb9fM0fuvVcqRn4zlH4/kmGIbx1oVfzpbVoX /TG3h5+SWITF4qERSrNBhPsbw9RD7g31rkY9Vs8K6RZM7NgiJy1zj+8tKZicnw2Iofl1 7FWVfRjHJSW4/jBKF+vglHIptLEFMmKMhaVqY5D1cnbxGAi+CNS7FtPL58TZnCl7E3Hd f+eA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rMdA9ogt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m9-20020a654389000000b00524b56d9e63si407477pgp.324.2023.05.04.14.55.00; Thu, 04 May 2023 14:55:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=rMdA9ogt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229905AbjEDVs4 (ORCPT + 99 others); Thu, 4 May 2023 17:48:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229502AbjEDVsz (ORCPT ); Thu, 4 May 2023 17:48:55 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B19E61154C; Thu, 4 May 2023 14:48:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4D42F60FF2; Thu, 4 May 2023 21:48:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 64255C433D2; Thu, 4 May 2023 21:48:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1683236933; bh=E+tiJRiug8u/AhLbDq1jW1M9EjtSX+RGcxzT9cXg0OA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rMdA9ogtCuMp0Sz7JLCENwEd4AWatDFzw2WAwjb5ktcXxWjfNKWW7bZyOUArAd8HU UL4OumyNy3crnSxBKNshymYNbVbX4lOa279OubixiBydpm/RRHSWJRaHtCqz6uspVU NEc6KhOBq9ve6ukXju2/z1noWgOV2W56EGYwUupQ02PcTJikJf+YeE3DIAqvxPQ53s WQlvgBJ5hkCpGo7m2vYt5L3CXYee/mEUSciL6LXLUCvyTBXvoOvtADzcgsDvF2MbAq UlavxJ2HQQSMEpKZFr9hn0h/eFbXP+IsaAuHElYt2IWahMLk64u0OWUJQ/YRUgoLFc W35nmYHgPCemQ== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 4C6A0403B5; Thu, 4 May 2023 18:48:50 -0300 (-03) Date: Thu, 4 May 2023 18:48:50 -0300 From: Arnaldo Carvalho de Melo To: Andrii Nakryiko , Namhyung Kim , Linus Torvalds Cc: Song Liu , Andrii Nakryiko , Ingo Molnar , Thomas Gleixner , Jiri Olsa , Clark Williams , Kate Carcia , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Adrian Hunter , Changbin Du , Hao Luo , Ian Rogers , James Clark , Kan Liang , Roman Lozko , Stephane Eranian , Thomas Richter , Arnaldo Carvalho de Melo , bpf Subject: Re: BPF skels in perf .Re: [GIT PULL] perf tools changes for v6.4 Message-ID: References: <20230503211801.897735-1-acme@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Url: http://acmel.wordpress.com X-Spam-Status: No, score=-7.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Thu, May 04, 2023 at 04:07:29PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Thu, May 04, 2023 at 11:50:07AM -0700, Andrii Nakryiko escreveu: > > On Thu, May 4, 2023 at 10:52 AM Arnaldo Carvalho de Melo wrote: > > > Andrii, can you add some more information about the usage of vmlinux.h > > > instead of using kernel headers? > > > I'll just say that vmlinux.h is not a hard requirement to build BPF > > programs, it's more a convenience allowing easy access to definitions > > of both UAPI and kernel-internal structures for tracing needs and > > marking them relocatable using BPF CO-RE machinery. Lots of real-world > > applications just check-in pregenerated vmlinux.h to avoid build-time > > dependency on up-to-date host kernel and such. > > > If vmlinux.h generation and usage is causing issues, though, given > > that perf's BPF programs don't seem to be using many different kernel > > types, it might be a better option to just use UAPI headers for public > > kernel type definitions, and just define CO-RE-relocatable minimal > > definitions locally in perf's BPF code for the other types necessary. > > E.g., if perf needs only pid and tgid from task_struct, this would > > suffice: > > > struct task_struct { > > int pid; > > int tgid; > > } __attribute__((preserve_access_index)); > > Yeah, that seems like a way better approach, no vmlinux involved, libbpf > CO-RE notices that task_struct changed from this two integers version > (of course) and does the relocation to where it is in the running kernel > by using /sys/kernel/btf/vmlinux. Doing it for one of the skels, build tested, runtime untested, but not using any vmlinux, BTF to help, not that bad, more verbose, but at least we state what are the fields we actually use, have those attribute documenting that those offsets will be recorded for future use, etc. Namhyung, can you please check that this works? Thanks, - Arnaldo diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c index 6a438e0102c5a2cb..f376d162549ebd74 100644 --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c @@ -1,11 +1,40 @@ // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) // Copyright (c) 2021 Facebook // Copyright (c) 2021 Google -#include "vmlinux.h" +#include +#include #include #include #include +// libbpf's CO-RE will take care of the relocations so that these fields match +// the layout of these structs in the kernel where this ends up running on. + +struct cgroup_subsys_state { + struct cgroup *cgroup; +} __attribute__((preserve_access_index)); + +struct css_set { + struct cgroup_subsys_state *subsys[13]; +} __attribute__((preserve_access_index)); + +struct task_struct { + struct css_set *cgroups; +} __attribute__((preserve_access_index)); + +struct kernfs_node { + __u64 id; +} __attribute__((preserve_access_index)); + +struct cgroup { + struct kernfs_node *kn; + int level; +} __attribute__((preserve_access_index)); + +enum cgroup_subsys_id { + perf_event_cgrp_id = 8, +}; + #define MAX_LEVELS 10 // max cgroup hierarchy level: arbitrary #define MAX_EVENTS 32 // max events per cgroup: arbitrary @@ -52,7 +81,7 @@ struct cgroup___new { /* old kernel cgroup definition */ struct cgroup___old { int level; - u64 ancestor_ids[]; + __u64 ancestor_ids[]; } __attribute__((preserve_access_index)); const volatile __u32 num_events = 1;