Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp215449rwb; Thu, 22 Sep 2022 17:03:21 -0700 (PDT) X-Google-Smtp-Source: AMsMyM62jEyIF6AbF1fVsicRd7hnnylnAb7krvkEcgXf006BO4IGY166XaAQfDZ0jYKDZw4LK6Ux X-Received: by 2002:a17:907:2723:b0:77c:8beb:643b with SMTP id d3-20020a170907272300b0077c8beb643bmr4993516ejl.86.1663891401107; Thu, 22 Sep 2022 17:03:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663891401; cv=none; d=google.com; s=arc-20160816; b=HWtqw1/I8s/b/AvNbRJb34Cg8zviFgLX6IVvRz9I0jkxHIEhm89F7LQTlqxPkrcHe1 Dk+2eE2mGufpj9z0WSS3QXUbE4uHSrM56Kbsfg4/B5IgGop3zd7vur6Izg7Aak+jo2VW 1D87lYzjtX86zKc/gDVPp5+f7OBdVYgaf61CgVXftwl1cLoqc68j+Flq4Blov7LT+Myd 9RutoV/PDR0coW33+vRRXGeIuHrTa2fTrSr9AjtJQGh73nACBvk1UaHkdKrfJISTUCKD wSv8VidYMwBXngesIHDA7TIAof41Z4pTJWmI4DLW9hD7jNkH/FFzQW3LjDWabMMLuVJO E/gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=pEWu0cZtC5bQpAC76TrU39sQH99ByOhozrqgLO6bDiY=; b=ozjbv3HSBUXdldfQWleVGHL90dHFxo07uaYipuTjA845f57QwtD9+1yE6i+d/BknUS Ade7Mb3Jhm8mpFsX8/OytewClqUkEksa7Ph6QtnKeFCulU4wHD9zol7x4j+5TAFk9vFM nQ998fj8rdM2lA44TXeCEcS8ntm8dNM/uZcP2JcOshxr3KoezIduaXsnGGIQILcekS4d VqMB0/TE6HNCcsYMurPRm9tu5g8RLfcUsZGdDHOXnonjEmH8PxtM9NZjWKBYY+OKzgnj 1xdppD5yRlC6K91GdKzeqTG/mlUI+Cb+tKBOgBIQDqts4yFfimn9BQ57EY8Vo/o1/dvP pclA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=VbDDokgh; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z4-20020a05640240c400b0044875bb5c8esi7332351edb.488.2022.09.22.17.02.55; Thu, 22 Sep 2022 17:03:21 -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=@google.com header.s=20210112 header.b=VbDDokgh; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229810AbiIVXzU (ORCPT + 99 others); Thu, 22 Sep 2022 19:55:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229677AbiIVXzR (ORCPT ); Thu, 22 Sep 2022 19:55:17 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18E77AB4F9 for ; Thu, 22 Sep 2022 16:55:16 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id t7so17856715wrm.10 for ; Thu, 22 Sep 2022 16:55:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=pEWu0cZtC5bQpAC76TrU39sQH99ByOhozrqgLO6bDiY=; b=VbDDokghUbDy1JsHhqfa5yfdgJSLZ3Zmy3hLc51e8fTubphxO+9Kx5uT6HpTyl07XU mvn/zOgEdbQiQE46fEE3ttFLIJmdlsVwErTFarnQwHzO98VEgaTaM901wB/JzYkndOpJ xtT/rLZIpPXY3j/re8io1Od+IgjlvCkpjnN/dleCybU1IpQ52MjVAtgnBvGB/nuRTa6n A8GDTTnWnWUO7eIFSDkWkYNjLhe+HXfcOuTeHMHrTvRYB4wvORri4cjFF5rvEeRI32ET 0XshsKczKYPZY2prXjhbOpJSDkagtNXdQ3BP740Tr1Iui75SwL2L8AyQFHz5vESZHBaW MNEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=pEWu0cZtC5bQpAC76TrU39sQH99ByOhozrqgLO6bDiY=; b=3ib14KHdbcVsIMfk6ZPa1b8ZC3NFX24xke8wAwOh5nn+iDmCwd6eCAWLI9FNllXduU dAohrH5MgCeDzRbsy9cr9qeePZLb6r/8vWVfWYF1zxFszSaxxooaWqoc8CDmTeHP1UXb 5vd4Io/RaD1unHqFt96HFc5jZrQ2yLe+P8BbgA7GiNbrSPFeAXaVRYyUtqGq/W2MYfaC h58J2+uo7G3gAoOgzbdR+cvIjmIwjdGEeSxrFFdCYVU7tJpRz/3Kp+aaUQl7kc1wnSfC aqSuTwgc87NyuDrkfFChM410SztIYGgBrZrxRQjxt4EZ5NE8VvbojpjC9DRJbIx0qHiI MLlA== X-Gm-Message-State: ACrzQf0qtfbacAtMyTjgw1Ykt8Yel67RCslxLy5t1TczKuF5u8j18jNC DVkgWzZKGwiD0Pmt8QQLZuS4X4P15QMIkdirnYDW8A== X-Received: by 2002:adf:e4ca:0:b0:228:d8b7:48a7 with SMTP id v10-20020adfe4ca000000b00228d8b748a7mr3377917wrm.300.1663890914444; Thu, 22 Sep 2022 16:55:14 -0700 (PDT) MIME-Version: 1.0 References: <20220922205302.749274-1-namhyung@kernel.org> In-Reply-To: <20220922205302.749274-1-namhyung@kernel.org> From: Ian Rogers Date: Thu, 22 Sep 2022 16:55:02 -0700 Message-ID: Subject: Re: [PATCH v3] perf tools: Get a perf cgroup more portably in BPF To: Namhyung Kim Cc: Arnaldo Carvalho de Melo , Jiri Olsa , Ingo Molnar , Peter Zijlstra , LKML , Adrian Hunter , linux-perf-users@vger.kernel.org, Song Liu , Hao Luo , bpf@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL 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 On Thu, Sep 22, 2022 at 1:53 PM Namhyung Kim wrote: > > The perf_event_cgrp_id can be different on other configurations. > To be more portable as CO-RE, it needs to get the cgroup subsys id > using the bpf_core_enum_value() helper. > > Suggested-by: Ian Rogers > Signed-off-by: Namhyung Kim > --- > v3 changes) > * check compiler features for enum value > > v2 changes) > * fix off_cpu.bpf.c too > * get perf_subsys_id only once > > tools/perf/util/bpf_skel/bperf_cgroup.bpf.c | 11 ++++++++++- > tools/perf/util/bpf_skel/off_cpu.bpf.c | 12 ++++++++---- > 2 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > index 292c430768b5..8e7520e273db 100644 > --- a/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > +++ b/tools/perf/util/bpf_skel/bperf_cgroup.bpf.c > @@ -48,6 +48,7 @@ const volatile __u32 num_cpus = 1; > > int enabled = 0; > int use_cgroup_v2 = 0; > +int perf_subsys_id = -1; > > static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > { > @@ -58,7 +59,15 @@ static inline int get_cgroup_v1_idx(__u32 *cgrps, int size) > int level; > int cnt; > > - cgrp = BPF_CORE_READ(p, cgroups, subsys[perf_event_cgrp_id], cgroup); > + if (perf_subsys_id == -1) { > +#if __has_builtin(__builtin_preserve_enum_value) > + perf_subsys_id = bpf_core_enum_value(enum cgroup_subsys_id, > + perf_event_cgrp_id); > +#else > + perf_subsys_id = perf_event_cgrp_id; > +#endif > + } > + cgrp = BPF_CORE_READ(p, cgroups, subsys[perf_subsys_id], cgroup); > level = BPF_CORE_READ(cgrp, level); > > for (cnt = 0; i < MAX_LEVELS; i++) { > diff --git a/tools/perf/util/bpf_skel/off_cpu.bpf.c b/tools/perf/util/bpf_skel/off_cpu.bpf.c > index c4ba2bcf179f..e917ef7b8875 100644 > --- a/tools/perf/util/bpf_skel/off_cpu.bpf.c > +++ b/tools/perf/util/bpf_skel/off_cpu.bpf.c > @@ -94,6 +94,8 @@ const volatile bool has_prev_state = false; > const volatile bool needs_cgroup = false; > const volatile bool uses_cgroup_v1 = false; > > +int perf_subsys_id = -1; > + > /* > * 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: > @@ -119,11 +121,13 @@ static inline __u64 get_cgroup_id(struct task_struct *t) > { > struct cgroup *cgrp; > > - if (uses_cgroup_v1) > - cgrp = BPF_CORE_READ(t, cgroups, subsys[perf_event_cgrp_id], cgroup); > - else > - cgrp = BPF_CORE_READ(t, cgroups, dfl_cgrp); > + if (!uses_cgroup_v1) > + return BPF_CORE_READ(t, cgroups, dfl_cgrp, kn, id); > + > + if (perf_subsys_id == -1) > + perf_subsys_id = bpf_core_enum_value(enum cgroup_subsys_id, perf_event_cgrp_id); Should the "#if __has_builtin(__builtin_preserve_enum_value)" test also be here? It feels a shame that bpf_core_enum_value isn't defined something like: #if __has_builtin(__builtin_preserve_enum_value) #define bpf_core_enum_value(enum_type, enum_value) \ __builtin_preserve_enum_value(*(typeof(enum_type) *)enum_value, BPF_ENUMVAL_VALUE) #else #define bpf_core_enum_value(enum_type, enum_value) enum_value #endif for backward clang compatibility, but I could see why an error would be preferable. Thanks, Ian > > + cgrp = BPF_CORE_READ(t, cgroups, subsys[perf_subsys_id], cgroup); > return BPF_CORE_READ(cgrp, kn, id); > } > > -- > 2.37.3.998.g577e59143f-goog >