From: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, rostedt@goodmis.org,
mingo@redhat.com, paulus@samba.org, acme@kernel.org,
hbathini@linux.vnet.ibm.com, ananth@in.ibm.com
Subject: Re: [RFC PATCH] perf: Container-aware tracing support
Date: Wed, 15 Jul 2015 21:51:52 +0530 [thread overview]
Message-ID: <55A688A0.7070507@linux.vnet.ibm.com> (raw)
In-Reply-To: <20150715124741.GL2859@worktop.programming.kicks-ass.net>
On Wednesday 15 July 2015 06:17 PM, Peter Zijlstra wrote:
> On Wed, Jul 15, 2015 at 02:38:36PM +0530, Aravinda Prasad wrote:
>> Current tracing infrastructure such as perf and ftrace reports system
>> wide data when invoked inside a container. It is required to restrict
>> events specific to a container context when such tools are invoked
>> inside a container.
>>
>> This RFC patch supports filtering container specific events, without
>> any change in the user interface, when invoked within a container for
>> the perf utility; such support needs to be extended to ftrace. This
>> patch assumes that the debugfs is available within the container and
>> all the processes running inside a container are grouped into a single
>> perf_event subsystem of cgroups. This patch piggybacks on the existing
>> support available for tracing with cgroups [1] by setting the cgrp
>> member of the event structure to the cgroup of the context perf tool
>> is invoked from.
>>
>> However, this patch is not complete and requires more work to fully
>> support tracing inside a container. This patch is intended to initiate
>> the discussion on having container-aware tracing support. A detailed
>> explanation on what is supported and pending issues are mentioned
>> below.
>
> tracing is outside the scope of perf; I suspect you want tracefs to be
> sensitive to filesystem namespaces and all that that entails.
Yes, tracefs needs to be sensitive to filesystem namespace. I wanted to
put together points required for supporting perf/trace inside containers.
>
>> Cc: Hari Bathini <hbathini@linux.vnet.ibm.com>
>> Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
>> ---
>> kernel/events/core.c | 49 +++++++++++++++++++++++++++++++++++--------------
>> 1 file changed, 35 insertions(+), 14 deletions(-)
>>
>> diff --git a/kernel/events/core.c b/kernel/events/core.c
>> index 81aa3a4..f6a1f89 100644
>> --- a/kernel/events/core.c
>> +++ b/kernel/events/core.c
>> @@ -589,17 +589,38 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,
>> {
>> struct perf_cgroup *cgrp;
>> struct cgroup_subsys_state *css;
>> - struct fd f = fdget(fd);
>> + struct fd f;
>> int ret = 0;
>>
>> - if (!f.file)
>> - return -EBADF;
>> + if (fd != -1) {
>> + f = fdget(fd);
>> + if (!f.file)
>> + return -EBADF;
>>
>> - css = css_tryget_online_from_dir(f.file->f_path.dentry,
>> + css = css_tryget_online_from_dir(f.file->f_path.dentry,
>> &perf_event_cgrp_subsys);
>> - if (IS_ERR(css)) {
>> - ret = PTR_ERR(css);
>> - goto out;
>> + if (IS_ERR(css)) {
>> + ret = PTR_ERR(css);
>> + fdput(f);
>> + return ret;
>> + }
>> + } else if (event->attach_state == PERF_ATTACH_TASK) {
>> + /* Tracing on a PID. No need to set event->cgrp */
>> + return ret;
>> + } else if (task_active_pid_ns(current) != &init_pid_ns) {
>
> Why the pid namespace?
This comes from my understanding of container -- having at least a
separate PID namespace with processes inside a container grouped into a
single perf_event cgroups subsystem.
I know there are other ways to define a container, however, I thought I
start with the above one.
>
>> + /* Don't set event->cgrp if task belongs to root cgroup */
>> + if (task_css_is_root(current, perf_event_cgrp_id))
>> + return ret;
>
> So if you have the root perf_cgroup inside your container you can
> escape?
If we have root perf_cgroup inside the container then even if we set
event->cgrp we will be including all processes in the system.
Regards,
Aravinda
>
>> +
>> + css = task_css(current, perf_event_cgrp_id);
>> + if (!css || !css_tryget_online(css))
>> + return -ENOENT;
>> + } else {
>> + /*
>> + * perf invoked from global context and hence don't set
>> + * event->cgrp as all the events should be included
>> + */
>> + return ret;
>> }
>>
>> cgrp = container_of(css, struct perf_cgroup, css);
>
--
Regards,
Aravinda
next prev parent reply other threads:[~2015-07-15 16:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-15 9:08 [RFC PATCH] perf: Container-aware tracing support Aravinda Prasad
2015-07-15 12:47 ` Peter Zijlstra
2015-07-15 16:21 ` Aravinda Prasad [this message]
2015-07-17 10:19 ` Peter Zijlstra
2015-07-17 12:20 ` Aravinda Prasad
2015-07-17 12:26 ` Ingo Molnar
-- strict thread matches above, loose matches on Subject: below --
2017-01-12 12:11 Aravinda Prasad
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=55A688A0.7070507@linux.vnet.ibm.com \
--to=aravinda@linux.vnet.ibm.com \
--cc=acme@kernel.org \
--cc=ananth@in.ibm.com \
--cc=hbathini@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.