On Fri, Feb 11, 2011 at 10:56 AM, Stephane Eranian <eran...@google.com> wrote:
> Li,
>
> On Fri, Feb 11, 2011 at 1:55 AM, Li Zefan <l...@cn.fujitsu.com> wrote:
>>>>> while there is already cgroup monitoring active. In that case and if we 
>>>>> do not
>>>>> want to wait until there is at least one ctxsw on all CPUs, then we have 
>>>>> to
>>>>> check if the other threads are not already running on the other CPUs.If 
>>>>> so,
>>>>> we need to do a cgroup switch on those CPUs. Otherwise, we have nothing to
>>>>> do. Am I getting this right?
>>>>
>>>> Right, so if any of those tasks is currently running, that cpu will be
>>>> monitoring their old cgroup, hence we send an IPI to flip cgroups.
>>>>
>>> I have built a test case where this would trigger. I launched a 
>>> multi-threaded
>>> app, and then I move the pid into a cgroup via: echo PID 
>>> >/cgroup/tests/tasks.
>>> I don't see any perf_cgroup move beyond the PID passed.
>>>
>>> I looked at kernel/cgroup.c and I could not find a invocation of
>>> ss->attach() that
>>> would pass threadgroup = true. So I am confused here.
>>>
>>> I wonder how the cgroupfs 'echo PID >tasks' interface would make the 
>>> distinction
>>> between PID and TID. It seems possible to move one thread of a 
>>> multi-threaded
>>> process into a cgroup but not the others.
>>>
>>
>> You can do this:
>>
>>        # echo PID > cgroup.procs
>>
>> When the patchset that implements the above feature is accepted. See:
>>
>>        https://lkml.org/lkml/2011/2/7/418
>>
>> The below commit that confused you is actually a part of the above patchset,
>> but it sneaked into the kernel accidentally:
>>
>> commit be367d09927023d081f9199665c8500f69f14d22
>> Author: Ben Blum <bb...@google.com>
>> Date:   Wed Sep 23 15:56:31 2009 -0700
>>
>>    cgroups: let ss->can_attach and ss->attach do whole threadgroups at a time
>>
> Ok, that makes more sense now. I wil try with the above patchset applied to
> verify this work as expected.
>
The above patchset seems to work fine. I add to switch perf_event from
ss->attach() to ss->attach_task() to make it work with multi-threaded apps.
The good thing is that it simplifies the code, because all we have to do now
is simply call perf_cgroup_move(). The caller does the thread iteration.

During this exercise, I found a minor issue in event_sched_out() with the
current perf cgroup patch. I will resubmit the patch incl. Peter's changes
+ some more cleanups and the fix + the update perf cgroup patch.

Thanks.

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to