Hi Stephane,

Your change fixed the problem I was seeing.  Thanks!

- Corey

stephane eranian wrote:
> Corey,
> 
> I think I have found and fixed the problem. As I was debugging
> 2.6.30 on Itanium I found a couple of issues. One of them is
> identical to the one you reported.
> 
> 
> It turns out that:
>>>        if (!test_thread_flag(TIF_PERFMON_CTXSW))
>>>                goto skip_all;
> Is bogus because current is not the task we want to test on.
> It needs to be as follows instead:
> 
>>>        if (!test_tsk_thread_flag(task, TIF_PERFMON_CTXSW))
>>>                goto skip_all;
> 
> With that, I think Power should work again.
> 
> I have also fixed a bogus initialization on set0. But that was
> inttroduced just last week by my vmalloc() changes.
> 
> On Fri, Aug 28, 2009 at 3:54 PM, stephane eranian<eran...@googlemail.com> 
> wrote:
>> Corey,
>>
>> On Fri, Aug 28, 2009 at 3:05 AM, Corey
>> Ashford<cjash...@linux.vnet.ibm.com> wrote:
>>> Hi Stephane,
>>>
>>> I have made some progress in tracking this problem down.  The big picture is
>>> that pfm_arch_ctxswin_thread is never getting called, so when the thread is
>>> switched out, and then back in again at some point, the PMU context is not
>>> getting restored onto the PMU registers, causing the counters to stop till
>>> the end of the run.
>>>
>>> pfm_arch_ctxswin_thread is not getting called because of the following code
>>> in perfmon_ctxsw.c:
>>>        /*
>>>         * TIF flag was removed since switch_to
>>>         * context is detaching, skip everything,
>>>         * keep oncpu=-1
>>>         */
>>>        if (!test_thread_flag(TIF_PERFMON_CTXSW))
>>>                goto skip_all;
>>>
>>> Apparently the TIF_PERFMON_CTXSW flag is always cleared.  I haven't tracked
>>> any farther back than this yet, but was hoping this might trigger a thought
>>> or two in your mind as to what might be going on.
>>>
>> TIF_PERFMON_CTXSW is only set in pfm_preload_context(). If you are testing
>> with self.c I don't see how this can be happening at this point. I
>> think you have
>> to instrument the places where the flag gets cleared.
>>
>>
>>
>>> I also noticed that this code appears to have changed from 2.6.29 to 2.6.30.
>>>
>>> Anyway, I'd appreciate any thoughts you might have on this.  I may not get
>>> back to looking at this till Monday afternoon, so no huge rush.
>>>
>>> Thanks for your consideration,
>>>
>>> - Corey
>>>
>>> stephane eranian wrote:
>>>> Corey,
>>>>
>>>> On Wed, Aug 26, 2009 at 1:55 AM, Corey
>>>> Ashford<cjash...@linux.vnet.ibm.com> wrote:
>>>>> Corey Ashford wrote:
>>>>>> stephane eranian wrote:
>>>>>>> On Mon, Aug 24, 2009 at 8:48 PM, Corey
>>>>>>> Ashford<cjash...@linux.vnet.ibm.com> wrote:
>>>>>>>> stephane eranian wrote:
>>>>>>>>> Corey,
>>>>>>>>>
>>>>>>>> [snip]
>>>>>>>>> Here are a couple of tests you could try and run to narrow it down:
>>>>>>>>>  - taskset -c 0 self
>>>>>>>>>  - syst
>>>>>>>>>
>>>>>>>> "taskset -c 0 self" doesn't improve the behavior.  The results are
>>>>>>>> still
>>>>>>>> all
>>>>>>>> over the place.
>>>>>>>>
>>>>>>> That's strange, must be something really central.
>>>>>>> You need to enable debugging. Careful as this has changed again in
>>>>>>> 2.6.30
>>>>>>> because of the dynamic_printk stuff. The good thing is that now you can
>>>>>>> turn on/off individual printk.
>>>>>> I'm not familiar with dynamic_printk, so that will take some research.
>>>>>>
>>>>>>>> "syst" is giving me an error, which may be something completely
>>>>>>>> unrelated:
>>>>>>>>
>>>>>>>> [r...@elm3c4 examples_v2.x]# ./syst
>>>>>>>> cannot set affinity to CPU0: Invalid argument
>>>>>>>>
>>>>>>> Weird. You have a CPU0, don't you?
>>>>>> Yes :)  I'm still debugging this to figure out what's going on.  No
>>>>>> results yet
>>>>>> (took me awhile to get systemtap running due to many pilot errors)
>>>>> Ok, I tracked the syst problem down.  There is an error in syst.c which
>>>>> manifests itself on big-endian machines when syst.c is compiled in 32-bit
>>>>> mode.
>>>>>
>>>>> The bit vector which is used to describe the cpus that you want to set
>>>>> the
>>>>> affinity for is an array of 32-bit words (when using the
>>>>> compat_sys_sched_setaffinity system call in 32-bit mode).  syst programs
>>>>> a
>>>>> vector of 64-bit words.  On a little endian machine, this wouldn't
>>>>> matter,
>>>>> because the least significant byte of the 32-bit or 64-bit word is always
>>>>> at
>>>>> offset 0.  But on a big-endian machine, the least significant byte is at
>>>>> offset 0x3 or 0x7 depending on the word size.  So the result is that the
>>>>> bit
>>>>> vector is interpreted as setting the affinity for a cpu which does not
>>>>> exist.
>>>>>
>>>> I think nowdays, we should simply use the libc cpu_set and call the
>>>> regular sched_setaffinity() instead of having a custom version. That
>>>> was from a long time ago. Hopefully, the official API will work on 32-bit
>>>> big-endian systems.
>>>>
>>>>> There are a couple of ways to fix this, and I will post a patch which
>>>>> contains both versions.
>>>>>
>>>>> So, after fixing this problem, syst does produce reliable results on
>>>>> 2.6.30.
>>>>>  So I am assuming now that this the problem with the self test (and
>>>>> others)
>>>>> is that something is messed up with the per-thread context code.
>>>>>
>>>> Yes, most likely. That is why I asked you to try taskset -c 0 self to
>>>> avoid
>>>> switching from one CPU to another. But obviously you can be switched in
>>>> and out.
>>>>
>>>>
>>>>> I will be start working on this.
>>>>>
>>>>> - Corey
>>>>>
>>>>>
>>> --
>>> Regards,
>>>
>>> - Corey
>>>
>>> Corey Ashford
>>> Software Engineer
>>> IBM Linux Technology Center, Linux Toolchain
>>> Beaverton, OR
>>> 503-578-3507
>>> cjash...@us.ibm.com
>>>

-- 
Regards,

- Corey

Corey Ashford
Software Engineer
IBM Linux Technology Center, Linux Toolchain
Beaverton, OR
503-578-3507
cjash...@us.ibm.com

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to