From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>, Hao Ge <gehao@kylinos.cn>,
James Clark <james.clark@linaro.org>,
Howard Chu <howardchu95@gmail.com>,
Dominique Martinet <asmadeus@codewreck.org>,
Levi Yun <yeoreum.yun@arm.com>, Xu Yang <xu.yang_2@nxp.com>,
Tengda Wu <wutengda@huaweicloud.com>,
Yang Jihong <yangjihong1@huawei.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 00/10] Move uid filtering to BPF filters
Date: Thu, 13 Feb 2025 09:47:53 -0800 [thread overview]
Message-ID: <Z64wSRTXxC6CXey7@google.com> (raw)
In-Reply-To: <CAP-5=fXTLBb1+PghPCraJQcXY518Jtt3AwPLpoXvjXErW79U5w@mail.gmail.com>
On Wed, Feb 12, 2025 at 11:27:38PM -0800, Ian Rogers wrote:
> On Wed, Feb 12, 2025 at 5:44 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > On Wed, Feb 12, 2025 at 03:17:35PM -0800, Ian Rogers wrote:
> > > On Wed, Feb 12, 2025 at 2:56 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > > >
> > > > On Wed, Feb 12, 2025 at 12:00:42PM -0800, Ian Rogers wrote:
> > > > > On Wed, Feb 12, 2025 at 10:46 AM Namhyung Kim <namhyung@kernel.org> wrote:
> > > > > > It's not completely broken and works sometimes.
> > > > >
> > > > > No this is the definition of completely broken. If it only works
> > > > > sometimes then you can't use it, we can't put a test on it, there is
> > > > > no point in it. Even when it doesn't fail on perf_event_open, does it
> > > > > work for processes that start after /proc is scanned? No, it is
> > > > > completely broken.
> > > >
> > > > Ok, we have a different definition for it. Let's ignore the imaginary
> > > > users of the broken features. Have you added a test for this change?
> > > >
> > > > Anyway I've tested your change and found some issues:
> > > >
> > > > 1. It silently exited when BPF-skel is not built. Better to put some
> > > > messages at least.
> > > >
> > > > $ sudo ./perf record -u $(id -u) -- sleep 1
> > > >
> > > > 2. Even with BPF-skel, perf record doesn't work well. It did something
> > > > but failed to get sample data for some reason.
> > > >
> > > > $ sudo ./perf record -u $(id -u) -- sleep 1
> > > > [ perf record: Woken up 1 times to write data ]
> > > > [ perf record: Captured and wrote 0.045 MB perf.data ]
> > > >
> > > > Oh, I think you now need to pass -a because it now works in
> > > > system-wide mode and drops samples for other users.
> > >
> > > This is a pre-existing problem, no?
> >
> > No, it worked without -a in the past. Please see my previous reply.
> > I think -u/--uid is one of the supported target in the perf tool (not
> > for the system call) and it used to disable system-wide mode if -u is
> > used at the same time.
>
> As I keep repeating the '-u' option has never worked in the past, it
> either early exited or missed recording new processes.
I agree the early exit of existing process is a problem of '-u'. But
I'm not sure it would miss all new processes. IIUC '-u' is a shortcut
for '-p' with all processes belong to the user. That means it'll have
perf_event with attr.inherit set then it can track new processes from
them. Of course, there's a race between /proc scanning and process
creation so it will miss some. But even '-p' has the same race.
>
> The documentation for `perf record` is:
> ```
> ...
> -a, --all-cpus
> System-wide collection from all CPUs (default if no target
> is specified).
> ...
> -u, --uid=
> Record events in threads owned by uid. Name or number.
> ...
> ```
> So `-a` is implied without a target/workload but you are specifying a
> workload and `-u`. So do you want samples from the workload or from
> the user's processes? I can tell from your command line being sleep
> that you want it to imply `-a` but would that be true if it were a
> benchmark? For the benchmark case you probably don't want `-a`
> implied. If you specify `-p` and `-u` should the processes that don't
> match -u be sampled or are you expecting implicit system wide
> profiling now?
I don't follow. You cannot specify two targets at the same time. If
you use -a and -u together currently, you will see:
$ perf record -a -u $(id -u)
Warning:
UID switch overriding SYSTEM
And for -p and -u:
$ perf record -p 1 -u $(id -u)
Warning:
PID/TID switch overriding UID
And specifying a target and a workload means it will profile the target
while the workload is running.
$ perf record -u $(id -u) -- sleep 1
So the above command will profile all processes belong to me for 1
second. As you're doing system wide for 1 second with below command.
$ perf record -a -- sleep 1
You can change sleep with any other workload but it's not the target of
the profile unless it matches to the target specifically.
>
> I agree the behavior in the patch series doesn't match the existing
> behavior, but I'm not sure the existing behavior agrees with the
> documentation nor working as expected. Having the `-u` not select
> system wide, as in the patch, seems to agree with the documentation
> better. You have specified a target workload/process/eventual pid and
> you want samples owned by the uid, why should you now start getting
> samples from other processes? With `-p` you wouldn't expect `-a` to
> suddenly get implied, I'm not sure it makes any more sense with any
> target/workload.
As I said, the existing behavior doesn't imply system wide. But your
change now requires it.
Thanks,
Namhyung
>
> > > > 3. With BPF-skel, non-root users will see this.
> > > >
> > > > $ ./perf record -u $(id -u) -- sleep 1
> > > > cannot get fd for 'filters' map
> > > > failed to set filter "BPF" on event cycles:P with 13 (Permission denied)
> > > >
> > > > I think it's confusing and better to tell user that you need to run
> > > > 'perf record --setup-filter pin' as root first. But maybe due to the
> > > > issue #2, you still need to run it as root.
>
> I think that is an okay addition to BPF filters in general. I'm wary
> of having patch series feature crept into requiring the entire tool
> being reimplemented.
>
> Thanks,
> Ian
next prev parent reply other threads:[~2025-02-13 17:47 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-11 19:01 [PATCH v1 00/10] Move uid filtering to BPF filters Ian Rogers
2025-01-11 19:01 ` [PATCH v1 01/10] perf bench evlist-open-close: Reduce scope of 2 variables Ian Rogers
2025-02-12 14:17 ` Arnaldo Carvalho de Melo
2025-01-11 19:01 ` [PATCH v1 02/10] perf parse-events filter: Use evsel__find_pmu Ian Rogers
2025-02-12 14:51 ` Arnaldo Carvalho de Melo
2025-02-12 16:11 ` Ian Rogers
2025-01-11 19:01 ` [PATCH v1 03/10] perf target: Separate parse_uid into its own function Ian Rogers
2025-01-11 19:01 ` [PATCH v1 04/10] perf parse-events: Add parse_uid_filter helper Ian Rogers
2025-01-11 19:01 ` [PATCH v1 05/10] perf record: Switch user option to use BPF filter Ian Rogers
2025-01-11 19:01 ` [PATCH v1 06/10] perf top: " Ian Rogers
2025-01-11 19:01 ` [PATCH v1 07/10] perf trace: " Ian Rogers
2025-01-11 19:01 ` [PATCH v1 08/10] perf bench evlist-open-close: " Ian Rogers
2025-01-11 19:01 ` [PATCH v1 09/10] perf target: Remove uid from target Ian Rogers
2025-01-11 19:01 ` [PATCH v1 10/10] perf thread_map: Remove uid options Ian Rogers
2025-02-10 18:18 ` [PATCH v1 00/10] Move uid filtering to BPF filters Ian Rogers
2025-02-10 19:59 ` Namhyung Kim
2025-02-10 22:06 ` Ian Rogers
2025-02-11 3:12 ` Namhyung Kim
2025-02-11 4:40 ` Ian Rogers
2025-02-11 17:51 ` Namhyung Kim
2025-02-11 18:06 ` Ian Rogers
2025-02-12 1:51 ` Namhyung Kim
2025-02-12 5:41 ` Ian Rogers
2025-02-12 18:46 ` Namhyung Kim
2025-02-12 20:00 ` Ian Rogers
2025-02-12 22:56 ` Namhyung Kim
2025-02-12 23:17 ` Ian Rogers
2025-02-13 1:44 ` Namhyung Kim
2025-02-13 7:27 ` Ian Rogers
2025-02-13 17:47 ` Namhyung Kim [this message]
2025-02-13 18:13 ` Ian Rogers
2025-02-13 18:59 ` Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z64wSRTXxC6CXey7@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=asmadeus@codewreck.org \
--cc=gehao@kylinos.cn \
--cc=howardchu95@gmail.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=wutengda@huaweicloud.com \
--cc=xu.yang_2@nxp.com \
--cc=yangjihong1@huawei.com \
--cc=yeoreum.yun@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox