All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] ARM cached,non-cached memory
@ 2010-03-02 14:27 Sinisa Denic
  2010-03-02 14:32 ` Gilles Chanteperdrix
  2010-03-06 10:42 ` Gilles Chanteperdrix
  0 siblings, 2 replies; 11+ messages in thread
From: Sinisa Denic @ 2010-03-02 14:27 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with memory 
caching on ARM AT91sam9260 arch. 
Then we were advised using non-cached memory and we've used it till now,but in 
our next application it has big performace slow down effect and I'm 
interested is this BUG solved in latest 2.4.10 - xenomai 
Regards,Sinisa


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-02 14:27 [Xenomai-help] ARM cached,non-cached memory Sinisa Denic
@ 2010-03-02 14:32 ` Gilles Chanteperdrix
  2010-03-02 15:31   ` Sinisa Denic
  2010-03-06 10:42 ` Gilles Chanteperdrix
  1 sibling, 1 reply; 11+ messages in thread
From: Gilles Chanteperdrix @ 2010-03-02 14:32 UTC (permalink / raw)
  To: Sinisa Denic; +Cc: Xenomai help

Sinisa Denic wrote:
> Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with memory 
> caching on ARM AT91sam9260 arch. 
> Then we were advised using non-cached memory and we've used it till now,but in 
> our next application it has big performace slow down effect and I'm 
> interested is this BUG solved in latest 2.4.10 - xenomai 
> Regards,Sinisa

No, this is not a BUG in Xenomai. It is an architectural BUG^H^Hehaviour
of ARMv5, they have a VIVT cache, which is the cause of these issues.
Alternatively to using non-cached memory, you can use cached memory, and
flush cache when needed. Beware however defining "when needed", may be
complicated.

A note: Xenomai 2.4.10 is not the latest, the latest is Xenomai 2.5.1
and it has a lot of performance improvements for ARM.

-- 
					    Gilles.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-02 14:32 ` Gilles Chanteperdrix
@ 2010-03-02 15:31   ` Sinisa Denic
  2010-03-02 18:42     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 11+ messages in thread
From: Sinisa Denic @ 2010-03-02 15:31 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

On Tuesday 02 March 2010 15:32:06 you wrote:
> Sinisa Denic wrote:
> > Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with
> > memory caching on ARM AT91sam9260 arch.
> > Then we were advised using non-cached memory and we've used it till
> > now,but in our next application it has big performace slow down effect
> > and I'm interested is this BUG solved in latest 2.4.10 - xenomai
> > Regards,Sinisa
>
> No, this is not a BUG in Xenomai. It is an architectural BUG^H^Hehaviour
> of ARMv5, they have a VIVT cache, which is the cause of these issues.
> Alternatively to using non-cached memory, you can use cached memory, and
> flush cache when needed. Beware however defining "when needed", may be
> complicated.
>
> A note: Xenomai 2.4.10 is not the latest, the latest is Xenomai 2.5.1
> and it has a lot of performance improvements for ARM.

Ok,sorry for my mistake I thought it is due to the xenomai.
Of course we know new xeno 2.5.1 and all about ARM improvements, 
but we are afraid of switching to new kernel(current 2.6.21) and thus to new 
xenomai, because we have short time to deliver product and thus to well test 
all new components. 
Apart from memory caching 2.4 works well for us.
We work on critical relay protection device and new potential bug isn't  
desirable at all.
I hope that xenomai 2.5.1 is heavily tested and stable for ARM arch,despite of 
some problems on the mailing list eg. native skin etc.
Al in all thank you very much we hope to see you in Belgrade soon.
Sinisa


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-02 15:31   ` Sinisa Denic
@ 2010-03-02 18:42     ` Gilles Chanteperdrix
  0 siblings, 0 replies; 11+ messages in thread
From: Gilles Chanteperdrix @ 2010-03-02 18:42 UTC (permalink / raw)
  To: Sinisa Denic; +Cc: Xenomai help

Sinisa Denic wrote:
> On Tuesday 02 March 2010 15:32:06 you wrote:
>> Sinisa Denic wrote:
>>> Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with
>>> memory caching on ARM AT91sam9260 arch.
>>> Then we were advised using non-cached memory and we've used it till
>>> now,but in our next application it has big performace slow down effect
>>> and I'm interested is this BUG solved in latest 2.4.10 - xenomai
>>> Regards,Sinisa
>> No, this is not a BUG in Xenomai. It is an architectural BUG^H^Hehaviour
>> of ARMv5, they have a VIVT cache, which is the cause of these issues.
>> Alternatively to using non-cached memory, you can use cached memory, and
>> flush cache when needed. Beware however defining "when needed", may be
>> complicated.
>>
>> A note: Xenomai 2.4.10 is not the latest, the latest is Xenomai 2.5.1
>> and it has a lot of performance improvements for ARM.
> 
> Ok,sorry for my mistake I thought it is due to the xenomai.
> Of course we know new xeno 2.5.1 and all about ARM improvements, 
> but we are afraid of switching to new kernel(current 2.6.21) and thus to new 
> xenomai, because we have short time to deliver product and thus to well test 
> all new components. 
> Apart from memory caching 2.4 works well for us.

Ok. Understood.


> We work on critical relay protection device and new potential bug isn't  
> desirable at all.
> I hope that xenomai 2.5.1 is heavily tested and stable for ARM arch,despite of 
> some problems on the mailing list eg. native skin etc.

There is no such thing as bug-free software, as you probably know, but
we do our best to have the best stability possible. We have recently
fixed Xenomai for running on AT91SAM9263, and got good results over a
long testing period, the hardware support looks stable. The issue we
have such as with the native API are plain deterministic stupid bugs,
nothing which has any influence on stability.

> Al in all thank you very much we hope to see you in Belgrade soon.
> Sinisa

That could be arranged :-)

-- 
					    Gilles.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-02 14:27 [Xenomai-help] ARM cached,non-cached memory Sinisa Denic
  2010-03-02 14:32 ` Gilles Chanteperdrix
@ 2010-03-06 10:42 ` Gilles Chanteperdrix
  2010-03-08  7:58   ` Sinisa Denic
  1 sibling, 1 reply; 11+ messages in thread
From: Gilles Chanteperdrix @ 2010-03-06 10:42 UTC (permalink / raw)
  To: Sinisa Denic; +Cc: xenomai

Sinisa Denic wrote:
> Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with memory 
> caching on ARM AT91sam9260 arch. 
> Then we were advised using non-cached memory and we've used it till now,but in 
> our next application it has big performace slow down effect and I'm 
> interested is this BUG solved in latest 2.4.10 - xenomai 
> Regards,Sinisa

Actually, there may be something we can do. In heap.c, could you try 
replacing calls to pgprot_noncached with calls to pgprot_writecombine ?

Here is a patch doing this for 2.4 head. I do not know whether it will
apply to the version you are using. But I guess you will get the idea.

diff --git a/ksrc/nucleus/heap.c b/ksrc/nucleus/heap.c
index 1c02183..d40844b 100644
--- a/ksrc/nucleus/heap.c
+++ b/ksrc/nucleus/heap.c
@@ -962,7 +962,7 @@ static inline void *__alloc_and_reserve_heap(size_t size, in
t kmflags)
                else
                        ptr = __vmalloc(size,
                                        GFP_KERNEL | __GFP_HIGHMEM,
-                                       pgprot_noncached(PAGE_KERNEL));
+                                       pgprot_writecombine(PAGE_KERNEL));
                if (ptr == NULL)
                        return NULL;

@@ -1126,7 +1126,7 @@ static int xnheap_mmap(struct file *file, struct vm_area_struct *vma)
                unsigned long maddr = vma->vm_start;

                if (heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
-                       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+                       vma->vm_page_prot = pgprot_writecombine(vma->vm_page_pro
t);

                while (size > 0) {
                        if (xnarch_remap_vm_page(vma, maddr, vaddr))
@@ -1147,7 +1147,7 @@ static int xnheap_mmap(struct file *file, struct vm_area_s
truct *vma)
        (void)vaddr;
        if ((heap->archdep.kmflags & ~XNHEAP_GFP_NONCACHED) != 0 ||
            heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
-               vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+               vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
 #endif /* !CONFIG_MMU */

        atomic_inc(&heap->archdep.numaps);


-- 
					    Gilles.


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-06 10:42 ` Gilles Chanteperdrix
@ 2010-03-08  7:58   ` Sinisa Denic
  2010-03-08 13:52     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 11+ messages in thread
From: Sinisa Denic @ 2010-03-08  7:58 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

On Saturday 06 March 2010 11:42:07 you wrote:
> Sinisa Denic wrote:
> > Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with
> > memory caching on ARM AT91sam9260 arch.
> > Then we were advised using non-cached memory and we've used it till
> > now,but in our next application it has big performace slow down effect
> > and I'm interested is this BUG solved in latest 2.4.10 - xenomai
> > Regards,Sinisa
>
> Actually, there may be something we can do. In heap.c, could you try
> replacing calls to pgprot_noncached with calls to pgprot_writecombine ?
>
> Here is a patch doing this for 2.4 head. I do not know whether it will
> apply to the version you are using. But I guess you will get the idea.
>
> diff --git a/ksrc/nucleus/heap.c b/ksrc/nucleus/heap.c
> index 1c02183..d40844b 100644
> --- a/ksrc/nucleus/heap.c
> +++ b/ksrc/nucleus/heap.c
> @@ -962,7 +962,7 @@ static inline void *__alloc_and_reserve_heap(size_t
> size, in t kmflags)
>                 else
>                         ptr = __vmalloc(size,
>                                         GFP_KERNEL | __GFP_HIGHMEM,
> -                                       pgprot_noncached(PAGE_KERNEL));
> +                                       pgprot_writecombine(PAGE_KERNEL));
>                 if (ptr == NULL)
>                         return NULL;
>
> @@ -1126,7 +1126,7 @@ static int xnheap_mmap(struct file *file, struct
> vm_area_struct *vma) unsigned long maddr = vma->vm_start;
>
>                 if (heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
> -                       vma->vm_page_prot =
> pgprot_noncached(vma->vm_page_prot); +                      
> vma->vm_page_prot = pgprot_writecombine(vma->vm_page_pro t);
>
>                 while (size > 0) {
>                         if (xnarch_remap_vm_page(vma, maddr, vaddr))
> @@ -1147,7 +1147,7 @@ static int xnheap_mmap(struct file *file, struct
> vm_area_s truct *vma)
>         (void)vaddr;
>         if ((heap->archdep.kmflags & ~XNHEAP_GFP_NONCACHED) != 0 ||
>             heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
> -               vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> +               vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
>  #endif /* !CONFIG_MMU */
>
>         atomic_inc(&heap->archdep.numaps);

Ah, thank you Gilles we've already reconciled with destiny not to having 
cached memory. 
This is good news,but as I've read "write-combining does not guarantee that 
the combination of writes and reads is done in the correct order" and we 
could meet inconsistency in data - maybe.. 
Does Xeno treat this problem properly?
Sinisa


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-08  7:58   ` Sinisa Denic
@ 2010-03-08 13:52     ` Gilles Chanteperdrix
  2010-03-08 14:59       ` Sinisa Denic
  0 siblings, 1 reply; 11+ messages in thread
From: Gilles Chanteperdrix @ 2010-03-08 13:52 UTC (permalink / raw)
  To: Sinisa Denic; +Cc: xenomai

Sinisa Denic wrote:
> On Saturday 06 March 2010 11:42:07 you wrote:
>> Sinisa Denic wrote:
>>> Hi, last year working with xenomai 2.4.2-3 we met problem (BUG) with
>>> memory caching on ARM AT91sam9260 arch.
>>> Then we were advised using non-cached memory and we've used it till
>>> now,but in our next application it has big performace slow down effect
>>> and I'm interested is this BUG solved in latest 2.4.10 - xenomai
>>> Regards,Sinisa
>> Actually, there may be something we can do. In heap.c, could you try
>> replacing calls to pgprot_noncached with calls to pgprot_writecombine ?
>>
>> Here is a patch doing this for 2.4 head. I do not know whether it will
>> apply to the version you are using. But I guess you will get the idea.
>>
>> diff --git a/ksrc/nucleus/heap.c b/ksrc/nucleus/heap.c
>> index 1c02183..d40844b 100644
>> --- a/ksrc/nucleus/heap.c
>> +++ b/ksrc/nucleus/heap.c
>> @@ -962,7 +962,7 @@ static inline void *__alloc_and_reserve_heap(size_t
>> size, in t kmflags)
>>                 else
>>                         ptr = __vmalloc(size,
>>                                         GFP_KERNEL | __GFP_HIGHMEM,
>> -                                       pgprot_noncached(PAGE_KERNEL));
>> +                                       pgprot_writecombine(PAGE_KERNEL));
>>                 if (ptr == NULL)
>>                         return NULL;
>>
>> @@ -1126,7 +1126,7 @@ static int xnheap_mmap(struct file *file, struct
>> vm_area_struct *vma) unsigned long maddr = vma->vm_start;
>>
>>                 if (heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
>> -                       vma->vm_page_prot =
>> pgprot_noncached(vma->vm_page_prot); +                      
>> vma->vm_page_prot = pgprot_writecombine(vma->vm_page_pro t);
>>
>>                 while (size > 0) {
>>                         if (xnarch_remap_vm_page(vma, maddr, vaddr))
>> @@ -1147,7 +1147,7 @@ static int xnheap_mmap(struct file *file, struct
>> vm_area_s truct *vma)
>>         (void)vaddr;
>>         if ((heap->archdep.kmflags & ~XNHEAP_GFP_NONCACHED) != 0 ||
>>             heap->archdep.kmflags == XNHEAP_GFP_NONCACHED)
>> -               vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
>> +               vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
>>  #endif /* !CONFIG_MMU */
>>
>>         atomic_inc(&heap->archdep.numaps);
> 
> Ah, thank you Gilles we've already reconciled with destiny not to having 
> cached memory. 
> This is good news,but as I've read "write-combining does not guarantee that 
> the combination of writes and reads is done in the correct order" and we 
> could meet inconsistency in data - maybe.. 
> Does Xeno treat this problem properly?

The ARM kernel routinely uses this mode for shared mapping mapped at
several places in the same address space. So, I think it works. Are you
sure the sentence you quote applies to ARMv5?

-- 
					    Gilles.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-08 13:52     ` Gilles Chanteperdrix
@ 2010-03-08 14:59       ` Sinisa Denic
  2010-03-08 15:13         ` Gilles Chanteperdrix
  0 siblings, 1 reply; 11+ messages in thread
From: Sinisa Denic @ 2010-03-08 14:59 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

On Monday 08 March 2010 14:52:22 you wrote:
> "write-combining does not guarantee that
>
> > the combination of writes and reads is done in the correct order"


No, I've briefly read general description on wikipedia. :), so I don't know 
wether it has impact on ARM arch.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-08 14:59       ` Sinisa Denic
@ 2010-03-08 15:13         ` Gilles Chanteperdrix
  2010-03-08 15:34           ` Sinisa Denic
  2010-07-11 11:32           ` Bosko Radivojevic
  0 siblings, 2 replies; 11+ messages in thread
From: Gilles Chanteperdrix @ 2010-03-08 15:13 UTC (permalink / raw)
  To: Sinisa Denic; +Cc: xenomai

Sinisa Denic wrote:
> On Monday 08 March 2010 14:52:22 you wrote:
>> "write-combining does not guarantee that
>>
>>> the combination of writes and reads is done in the correct order"
> 
> 
> No, I've briefly read general description on wikipedia. :), so I don't know 
> wether it has impact on ARM arch.

As this is used by the kernel for its mapping (when you create aliases,
i.e. map the same area several times in the same address space), it must
work reliably. Anyway, what I am interested in is a quick test with your
application, measuring performances, so that we know whether
implementing this feature completely is worth the trouble, and in that
case, we will investigate further these issues.

-- 
					    Gilles.


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-08 15:13         ` Gilles Chanteperdrix
@ 2010-03-08 15:34           ` Sinisa Denic
  2010-07-11 11:32           ` Bosko Radivojevic
  1 sibling, 0 replies; 11+ messages in thread
From: Sinisa Denic @ 2010-03-08 15:34 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

On Monday 08 March 2010 16:13:42 you wrote:
> Sinisa Denic wrote:
> > On Monday 08 March 2010 14:52:22 you wrote:
> >> "write-combining does not guarantee that
> >>
> >>> the combination of writes and reads is done in the correct order"
> >
> > No, I've briefly read general description on wikipedia. :), so I don't
> > know wether it has impact on ARM arch.
>
> As this is used by the kernel for its mapping (when you create aliases,
> i.e. map the same area several times in the same address space), it must
> work reliably. Anyway, what I am interested in is a quick test with your
> application, measuring performances, so that we know whether
> implementing this feature completely is worth the trouble, and in that
> case, we will investigate further these issues.

Ok, now we have some deadlines but I will apply and try this as soon as 
possible.
Regards...


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Xenomai-help] ARM cached,non-cached memory
  2010-03-08 15:13         ` Gilles Chanteperdrix
  2010-03-08 15:34           ` Sinisa Denic
@ 2010-07-11 11:32           ` Bosko Radivojevic
  1 sibling, 0 replies; 11+ messages in thread
From: Bosko Radivojevic @ 2010-07-11 11:32 UTC (permalink / raw)
  To: xenomai

On Mon, Mar 8, 2010 at 5:13 PM, Gilles Chanteperdrix
> Anyway, what I am interested in is a quick test with your
> application, measuring performances, so that we know whether
> implementing this feature completely is worth the trouble, and in that
> case, we will investigate further these issues.

Just for the sake of archiving our efforts, in the meantime I
performed some kind of testing and here are some, I hope, representing
results of this patch. System is AT91SAM9260 based (ARM926EJ-S), Linux
2.6.33.4 + Xenomai 2.5.3.

Writes are about 30% faster, while read is on the same performance
rate. Raw results are:

1: Results with Gilles patch, rt_heap created without H_NONCACHED:
 Writing:  11172ms
 Reading:  10232ms

2: Results with Gilles patch, rt_heap created with H_NONCACHED:
 Writing:  13207ms
 Reading: 19369ms

3: Results without Gilles patch, rt_heap created with H_NONCACHED:
 Writing:  18385ms
 Reading:  19425ms

Workload is simple, writing and reading 4 bytes at a time, int by int.
Something like 100mil iterations.

Gilles, thanks again :)


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2010-07-11 11:32 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-02 14:27 [Xenomai-help] ARM cached,non-cached memory Sinisa Denic
2010-03-02 14:32 ` Gilles Chanteperdrix
2010-03-02 15:31   ` Sinisa Denic
2010-03-02 18:42     ` Gilles Chanteperdrix
2010-03-06 10:42 ` Gilles Chanteperdrix
2010-03-08  7:58   ` Sinisa Denic
2010-03-08 13:52     ` Gilles Chanteperdrix
2010-03-08 14:59       ` Sinisa Denic
2010-03-08 15:13         ` Gilles Chanteperdrix
2010-03-08 15:34           ` Sinisa Denic
2010-07-11 11:32           ` Bosko Radivojevic

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.