Problem with CPU Load Measurements and gcc-arm-eabi optimization.

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Problem with CPU Load Measurements and gcc-arm-eabi optimization.

Leschke Serafin (lesc)
Hello Everyone

I just encountered the Problem that the cyg_cpuload_create always
delivers 100% on my System. After a bit of debugging I figured out, that
the whole for-loop in idle_thread_main seems to be omitted.

I could fix this Problem with declaring
idle_thread_loops[CYGNUM_KERNEL_CPU_MAX] as volatile (patch below). But
this has maybe some consequences I am not thinking of, as the variables
are now always synced to the ram and no kept in a CPU register.

Do you see any Problem with my approach?

Regards Serafin

Patch:

 From 2799f68a5e508c6bece6ec85b1e201282983b98d Mon Sep 17 00:00:00 2001
From: Serafin Leschke <[hidden email]>
Date: Mon, 17 Nov 2014 13:51:23 +0100
Subject: [PATCH] declare idle_thread_loops as volatile

---
  packages/kernel/current/src/common/thread.cxx | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/kernel/current/src/common/thread.cxx
b/packages/kernel/current/src/common/thread.cxx
index 86a3dc4..bd1aa99 100644
--- a/packages/kernel/current/src/common/thread.cxx
+++ b/packages/kernel/current/src/common/thread.cxx
@@ -1211,7 +1211,7 @@ Cyg_ThreadTimer::alarm(
  #endif // CYGNUM_HAL_STACK_SIZE_MINIMUM

  // Loop counter for debugging/housekeeping
-cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
+volatile cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];

  static char
idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE];

--
1.9.1


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

Reply | Threaded
Open this post in threaded view
|

AW: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi optimization.

Richard Rauch
Hello,

are you sure, that you are using current version of eCos?
This issue should be already solved. Current version has "volatile" keyword as you proposed!

Richard Rauch
www.itrgmbh.com


> -----Ursprüngliche Nachricht-----
> Von: [hidden email] [mailto:ecos-discuss-
> [hidden email]] Im Auftrag von lesc
> Gesendet: Montag, 17. November 2014 14:07
> An: eCos Discussion
> Betreff: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi
> optimization.
>
> Hello Everyone
>
> I just encountered the Problem that the cyg_cpuload_create always delivers
> 100% on my System. After a bit of debugging I figured out, that the whole
> for-loop in idle_thread_main seems to be omitted.
>
> I could fix this Problem with declaring
> idle_thread_loops[CYGNUM_KERNEL_CPU_MAX] as volatile (patch below).
> But this has maybe some consequences I am not thinking of, as the variables
> are now always synced to the ram and no kept in a CPU register.
>
> Do you see any Problem with my approach?
>
> Regards Serafin
>
> Patch:
>
>  From 2799f68a5e508c6bece6ec85b1e201282983b98d Mon Sep 17 00:00:00
> 2001
> From: Serafin Leschke <[hidden email]>
> Date: Mon, 17 Nov 2014 13:51:23 +0100
> Subject: [PATCH] declare idle_thread_loops as volatile
>
> ---
>   packages/kernel/current/src/common/thread.cxx | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/packages/kernel/current/src/common/thread.cxx
> b/packages/kernel/current/src/common/thread.cxx
> index 86a3dc4..bd1aa99 100644
> --- a/packages/kernel/current/src/common/thread.cxx
> +++ b/packages/kernel/current/src/common/thread.cxx
> @@ -1211,7 +1211,7 @@ Cyg_ThreadTimer::alarm(
>   #endif // CYGNUM_HAL_STACK_SIZE_MINIMUM
>
>   // Loop counter for debugging/housekeeping
> -cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
> +volatile cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
>
>   static char
> idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREA
> DS_IDLE_STACK_SIZE];
>
> --
> 1.9.1
>
>
> --
> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

Reply | Threaded
Open this post in threaded view
|

Re: AW: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi optimization.

Leschke Serafin (lesc)
Hi Richard

Thanks for the fast answer. This is a little embarrassing, I managed to
find the commit you are referring to:

http://hg-pub.ecoscentric.com/ecos/rev/041821fb5427

The Version of Ecos I (have to) use is a port for the Xilinx Zynq Platform:
  https://github.com/antmicro/ecos-mars-zx3
Why they not just make a ecos package for the hal - instead of forking -
I don't know (I'm quite new to the industry). Their version seems to be
built on the ecos-v3 branch in which the above mentioned commit does not
seem to me merged:
http://hg-pub.ecoscentric.com/ecos-v3_0-branch/file/7d8c61e6225c/packages/kernel/current/src/common/thread.cxx

So maybe I should read a bit more about the ecos release model to find
out which version I should use in future.

Serafin



On 17.11.2014 18:47, Richard Rauch wrote:

> Hello,
>
> are you sure, that you are using current version of eCos?
> This issue should be already solved. Current version has "volatile" keyword as you proposed!
>
> Richard Rauch
> www.itrgmbh.com
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: [hidden email] [mailto:ecos-discuss-
>> [hidden email]] Im Auftrag von lesc
>> Gesendet: Montag, 17. November 2014 14:07
>> An: eCos Discussion
>> Betreff: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi
>> optimization.
>>
>> Hello Everyone
>>
>> I just encountered the Problem that the cyg_cpuload_create always delivers
>> 100% on my System. After a bit of debugging I figured out, that the whole
>> for-loop in idle_thread_main seems to be omitted.
>>
>> I could fix this Problem with declaring
>> idle_thread_loops[CYGNUM_KERNEL_CPU_MAX] as volatile (patch below).
>> But this has maybe some consequences I am not thinking of, as the variables
>> are now always synced to the ram and no kept in a CPU register.
>>
>> Do you see any Problem with my approach?
>>
>> Regards Serafin
>>
>> Patch:
>>
>>   From 2799f68a5e508c6bece6ec85b1e201282983b98d Mon Sep 17 00:00:00
>> 2001
>> From: Serafin Leschke <[hidden email]>
>> Date: Mon, 17 Nov 2014 13:51:23 +0100
>> Subject: [PATCH] declare idle_thread_loops as volatile
>>
>> ---
>>    packages/kernel/current/src/common/thread.cxx | 2 +-
>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/packages/kernel/current/src/common/thread.cxx
>> b/packages/kernel/current/src/common/thread.cxx
>> index 86a3dc4..bd1aa99 100644
>> --- a/packages/kernel/current/src/common/thread.cxx
>> +++ b/packages/kernel/current/src/common/thread.cxx
>> @@ -1211,7 +1211,7 @@ Cyg_ThreadTimer::alarm(
>>    #endif // CYGNUM_HAL_STACK_SIZE_MINIMUM
>>
>>    // Loop counter for debugging/housekeeping
>> -cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
>> +volatile cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
>>
>>    static char
>> idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREA
>> DS_IDLE_STACK_SIZE];
>>
>> --
>> 1.9.1
>>
>>
>> --
>> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
>> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
>

--
Serafin Leschke, BSc in Computer Sience UAS Zurich
Research Assistant

ZHAW, Zurich University of Applied Sciences
InES, Institute of Embedded Systems
Postfach
Technikumstr. 22
CH-8401 Winterthur
--
Tel: +41 58 934 69 79
Fax: +41 58 935 76 87
E-Mail: [hidden email]
Web: http://ines.zhaw.ch
--


--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

Reply | Threaded
Open this post in threaded view
|

Re: AW: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi optimization.

Tomasz Gorochowik
In reply to this post by Leschke Serafin (lesc)
Hello,

as an Antmicro employee I would like to add a few words.

First of all, we're really glad you're using our eCos port, and we're
thankful for your report.

Nevertheless in the future I would suggest to create an issue on our
github page if you have any problems with our port. We'd be very happy
to help, and this way we can do this much faster.

This fix has already been merged into our repo, but not into the
master branch, it was on a branch called master-next. Right now
however we have merged it into master, and the newest eCos version
(checked out from eCos CVS today) is present on the master-next
branch.

Tomasz Gorochowik
Antmicro Ltd.
www.antmicro.com


> Hi Richard
>
> Thanks for the fast answer. This is a little embarrassing, I managed to find the commit you are referring to:
>
> http://hg-pub.ecoscentric.com/ecos/rev/041821fb5427
>
> The Version of Ecos I (have to) use is a port for the Xilinx Zynq Platform:
>  https://github.com/antmicro/ecos-mars-zx3
> Why they not just make a ecos package for the hal - instead of forking - I don't know (I'm quite new to the industry). Their version seems to be built on the ecos-v3 branch in which the above mentioned commit does not seem to me merged:
> http://hg-pub.ecoscentric.com/ecos-v3_0-branch/file/7d8c61e6225c/packages/kernel/current/src/common/thread.cxx
>
> So maybe I should read a bit more about the ecos release model to find out which version I should use in future.
>
> Serafin
>
>
>
> On 17.11.2014 18:47, Richard Rauch wrote:
>>
>> Hello,
>>
>> are you sure, that you are using current version of eCos?
>> This issue should be already solved. Current version has "volatile" keyword as you proposed!
>>
>> Richard Rauch
>> www.itrgmbh.com
>>
>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: [hidden email] [mailto:ecos-discuss-
>>> [hidden email]] Im Auftrag von lesc
>>> Gesendet: Montag, 17. November 2014 14:07
>>> An: eCos Discussion
>>> Betreff: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi
>>> optimization.
>>>
>>> Hello Everyone
>>>
>>> I just encountered the Problem that the cyg_cpuload_create always delivers
>>> 100% on my System. After a bit of debugging I figured out, that the whole
>>> for-loop in idle_thread_main seems to be omitted.
>>>
>>> I could fix this Problem with declaring
>>> idle_thread_loops[CYGNUM_KERNEL_CPU_MAX] as volatile (patch below).
>>> But this has maybe some consequences I am not thinking of, as the variables
>>> are now always synced to the ram and no kept in a CPU register.
>>>
>>> Do you see any Problem with my approach?
>>>
>>> Regards Serafin
>>>
>>> Patch:
>>>
>>>   From 2799f68a5e508c6bece6ec85b1e201282983b98d Mon Sep 17 00:00:00
>>> 2001
>>> From: Serafin Leschke <[hidden email]>
>>> Date: Mon, 17 Nov 2014 13:51:23 +0100
>>> Subject: [PATCH] declare idle_thread_loops as volatile
>>>
>>> ---
>>>    packages/kernel/current/src/common/thread.cxx | 2 +-
>>>    1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/packages/kernel/current/src/common/thread.cxx
>>> b/packages/kernel/current/src/common/thread.cxx
>>> index 86a3dc4..bd1aa99 100644
>>> --- a/packages/kernel/current/src/common/thread.cxx
>>> +++ b/packages/kernel/current/src/common/thread.cxx
>>> @@ -1211,7 +1211,7 @@ Cyg_ThreadTimer::alarm(
>>>    #endif // CYGNUM_HAL_STACK_SIZE_MINIMUM
>>>
>>>    // Loop counter for debugging/housekeeping
>>> -cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
>>> +volatile cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
>>>
>>>    static char
>>> idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREA
>>> DS_IDLE_STACK_SIZE];
>>>
>>> --
>>> 1.9.1
>>>
>>>
>>> --
>>> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
>>> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss