On Fri, Jun 15, 2018 at 3:41 AM, Herve Jourdain <herve.jourd...@neuf.fr> wrote:
> Hi,
>
> Actually, I meant "works" in the sense of "does compile" - as opposed to 
> armv8 where it does not compile, which is why we're having this discussion in 
> the first place.
> So I was merely suggesting to not modify previous oe behavior for the db 
> package for previous architectures, and just add the removal of 'swp' for 
> armv8, where it matters most.
>
> If we want to look at it in details, based on the "ARM Architecture Reference 
> Manual ARMv7-A and ARMv7-R edition":
> 1. SWP is the way to go before ARMv6.
> 2. SWP has been deprecated in ARMv6.
> 3. SWP has been deprecated AND made optional in ARMv7ve.
> 4. "The SWP and SWPB instructions rely on the properties of the system beyond 
> the processor to ensure that no stores from other observers can occur between 
> the load access and the store access, and this might not be implemented for 
> all regions of memory on some system implementations. In all cases, SWP and 
> SWPB do ensure that no stores from the processor that executed the SWP or 
> SWPB instruction can occur between the load access and the store access of 
> the SWP or SWPB."
>
> This latest part means that it may or may not work in SMP environments, it 
> depends on how the system is architecture around the cores - most likely how 
> the bus system is designed I believe. So it may actually be working fine if 
> the system/bus designer has taken that into account.
>
> This said, I believe that from point #3 above, it might make sense to disable 
> SWP for armv7ve as well, since being optional means that it might be compiled 
> correctly, but still fail at runtime, depending on the choices of the SoC 
> manufacturer.
> So my recommendation would be to add:
> MUTEX_armv7ve = ""
> MUTEX_armv8 = ""
>
> To disable 'swp' by default only for those 2 archs, while keeping things like 
> they are for previous architectures.

Thanks for your long and detailed explanation! Adding together the
time which has gone into this thread so far and the time which went
into a similar thread in 2016, it perfectly illustrates the
maintenance effort which goes into enabling this architecture specific
micro optimisation.

  https://patchwork.openembedded.org/patch/133590/

> Cheers,
> Herve
>
> -----Original Message-----
> From: Andre McCurdy [mailto:armccu...@gmail.com]
> Sent: vendredi 15 juin 2018 09:39
> To: Herve Jourdain <herve.jourd...@neuf.fr>
> Cc: Khem Raj <raj.k...@gmail.com>; Ovidiu Panait 
> <ovidiu.pan...@windriver.com>; Patches and discussions about the oe-core 
> layer <openembedded-core@lists.openembedded.org>
> Subject: Re: [OE-core] [PATCH 1/1] db: disable the ARM assembler mutex code
>
> On Fri, Jun 15, 2018 at 12:10 AM, Herve Jourdain <herve.jourd...@neuf.fr> 
> wrote:
>> Hi,
>>
>> So the issue is whether we want to change the behaviour of previous 
>> architectures, or if we try to fix the issue only for the architectures that 
>> don't work.
>> Until now, the db recipe was enabling the 'swp' optimization, and that 
>> behavior could be disabled on .bbappend if needed.
>> While that works fine until armv7ve, it does not work for armv8, which has 
>> removed support for those instructions.
>
> I don't know if "works fine until armv7ve" is correct. Although the swp 
> instruction exists for armv7, according to the link I posted yesterday, it is 
> not guaranteed to work.
>
>   
> https://community.arm.com/processors/b/blog/posts/locks-swps-and-two-smoking-barriers
>
> Or do you have other evidence to suggest that swp is safe to use for armv7?
>
>> Therefore, there is a need to fix it for armv8 - and armv8 only - whereas it 
>> can be safely used on previous architectures.
>> If we remove the use for all ARM architectures, that might create some 
>> regression/issues.
>> If we just remove the use of 'swp' only for armv8, we ensure it doesn't 
>> break anything that's running on previous ARM architectures.
>>
>> Cheers,
>> Herve
>>
>> -----Original Message-----
>> From: Andre McCurdy [mailto:armccu...@gmail.com]
>> Sent: vendredi 15 juin 2018 00:03
>> To: Khem Raj <raj.k...@gmail.com>
>> Cc: Herve Jourdain <herve.jourd...@neuf.fr>; Ovidiu Panait
>> <ovidiu.pan...@windriver.com>; Patches and discussions about the
>> oe-core layer <openembedded-core@lists.openembedded.org>
>> Subject: Re: [OE-core] [PATCH 1/1] db: disable the ARM assembler mutex
>> code
>>
>> On Thu, Jun 14, 2018 at 2:48 PM, Khem Raj <raj.k...@gmail.com> wrote:
>>> On Thu, Jun 14, 2018 at 1:01 PM Andre McCurdy <armccu...@gmail.com> wrote:
>>>> On Thu, Jun 14, 2018 at 12:24 PM, Khem Raj <raj.k...@gmail.com> wrote:
>>>> > On Thu, Jun 14, 2018 at 12:12 PM Andre McCurdy
>>>> > <armccu...@gmail.com>
>>>> > wrote:
>>>> >>
>>>> >> On Thu, Jun 14, 2018 at 9:40 AM, Khem Raj <raj.k...@gmail.com> wrote:
>>>> >> > On 6/14/18 5:10 AM, Herve Jourdain wrote:
>>>> >> >> Hi,
>>>> >> >>
>>>> >> >> I believe I solved that same problem by just adding, in the
>>>> >> >> case of
>>>> >> >> armv8
>>>> >> >> (which I believe may be the new architecture you're referring to):
>>>> >> >> MUTEX_armv8 = ""
>>>> >> >> This way, it allows previous versions to work just like they
>>>> >> >> did before, without having to disable ARM assembler mutex code
>>>> >> >> for architectures that support it correctly - up to armv7ve I
>>>> >> >> believe.
>>>> >> >> Of course, we might need to also have a good definition for
>>>> >> >> armv8, which is the object of another thread.
>>>> >> >
>>>> >> > right thats a better approach.
>>>> >>
>>>> >> SWP is not guaranteed to work on SMP systems... and even if it
>>>> >> does, performance is likely to be worse than the pthreads version
>>>> >> (which can take advantage of the newer instructions).
>>>> >>
>>>> >>
>>>> >> https://community.arm.com/processors/b/blog/posts/locks-swps-and-
>>>> >> t
>>>> >> wo-smoking-barriers
>>>> >>
>>>> >> In general, use of hand optimised assembler mutex implementations
>>>> >> in user space isn't something to be encouraged - use pthreads (or
>>>> >> maybe a gcc intrinsic) instead.
>>>> >>
>>>> >
>>>> > question is about disabling it on old arm machines, do we have
>>>> > data where we know that other sync methods without swp works
>>>> > better on
>>>> > armv5 and lower ?
>>>>
>>>> On armv5 and below a hand optimised implementation using SWP is
>>>> likely to be faster than pthreads. No one is suggesting otherwise.
>>>>
>>>> On SMP (highly likely nowadays for armv7 and above), SWP simply
>>>> might not work (aside from the fact that if it does work, it's
>>>> likely to be slower than pthreads). It's not really a question of
>>>> performance there, so the proposal to only disable SWP for armv8
>>>> doesn't seem like a safe solution.
>>>
>>> Suggestion is not to just do it for armv8 but To keep it there where
>>> its beneficial
>>
>> You can always argue that micro optimisations are beneficial. The question 
>> is whether they make a big enough difference in some real world use case to 
>> be worth the maintenance effort.
>>
>>>> Using pthreads unconditionally is safe and easy. Unless you can
>>>> prove that hand optimised SWP is really a big win for armv5 (is
>>>> anyone really running a performance critical database on an armv5
>>>> system?) why not keep the recipe simple and use pthreads everywhere?
>>>>
>>>> >> I think the original patch is good.
>>>> >>
>>>> >> >> Cheers,
>>>> >> >> Herve
>>>> >> >>
>>>> >> >> -----Original Message-----
>>>> >> >> From: openembedded-core-boun...@lists.openembedded.org
>>>> >> >> [mailto:openembedded-core-boun...@lists.openembedded.org] On
>>>> >> >> Behalf Of Ovidiu Panait
>>>> >> >> Sent: jeudi 14 juin 2018 13:55
>>>> >> >> To: openembedded-core@lists.openembedded.org
>>>> >> >> Subject: [OE-core] [PATCH 1/1] db: disable the ARM assembler
>>>> >> >> mutex code
>>>> >> >>
>>>> >> >> The swpb in macro MUTEX_SET will cause "undefined instruction"
>>>> >> >> error on the new arm arches which don't support this assembly
>>>> >> >> instruction any more. If use ldrex/strex to replace swpb, the
>>>> >> >> old arm arches don't support them. So to avoid this issue,
>>>> >> >> just disable the ARM assembler mutex code, and use the default
>>>> >> >> pthreads mutex.
>>>> >> >>
>>>> >> >> Signed-off-by: Li Zhou <li.z...@windriver.com>
>>>> >> >> Signed-off-by: Catalin Enache <catalin.ena...@windriver.com>
>>>> >> >> Signed-off-by: Ovidiu Panait <ovidiu.pan...@windriver.com>
>>>> >> >> ---
>>>> >> >>  meta/recipes-support/db/db_5.3.28.bb | 13 +------------
>>>> >> >>  1 file changed, 1 insertion(+), 12 deletions(-)
>>>> >> >>
>>>> >> >> diff --git a/meta/recipes-support/db/db_5.3.28.bb
>>>> >> >> b/meta/recipes-support/db/db_5.3.28.bb
>>>> >> >> index 093ee44909..15b4155a29 100644
>>>> >> >> --- a/meta/recipes-support/db/db_5.3.28.bb
>>>> >> >> +++ b/meta/recipes-support/db/db_5.3.28.bb
>>>> >> >> @@ -59,18 +59,7 @@ FILES_SOLIBSDEV = "${libdir}/libdb.so
>>>> >> >> ${libdir}/libdb_cxx.so"
>>>> >> >>  # All the --disable-* options replace --enable-smallbuild,
>>>> >> >> which breaks a bunch of stuff (eg. postfix)  DB5_CONFIG ?=
>>>> >> >> "--enable-o_direct --disable-cryptography --disable-queue
>>>> >> >> --disable-replication --disable-verify --disable-compat185
>>>> >> >> --disable-sql"
>>>> >> >>
>>>> >> >> -EXTRA_OECONF = "${DB5_CONFIG} --enable-shared --enable-cxx
>>>> >> >> --with-sysroot"
>>>> >> >> -
>>>> >> >> -# Override the MUTEX setting here, the POSIX library is -#
>>>> >> >> the default - "POSIX/pthreads/library".
>>>> >> >> -# Don't ignore the nice SWP instruction on the ARM:
>>>> >> >> -# These enable the ARM assembler mutex code, this won't -#
>>>> >> >> work with thumb compilation...
>>>> >> >> -ARM_MUTEX = "--with-mutex=ARM/gcc-assembly"
>>>> >> >> -MUTEX = ""
>>>> >> >> -MUTEX_arm = "${ARM_MUTEX}"
>>>> >> >> -MUTEX_armeb = "${ARM_MUTEX}"
>>>> >> >> -EXTRA_OECONF += "${MUTEX} STRIP=true"
>>>> >> >> +EXTRA_OECONF = "${DB5_CONFIG} --enable-shared --enable-cxx
>>>> >> >> --with-sysroot
>>>> >> >> STRIP=true"
>>>> >> >>  EXTRA_OEMAKE += "LIBTOOL='./${HOST_SYS}-libtool'"
>>>> >> >>
>>>> >> >>  EXTRA_AUTORECONF += "--exclude=autoheader  -I
>>>> >> >> ${S}/dist/aclocal -I${S}/dist/aclocal_java"
>>>> >> >> --
>>>> >> >> 2.17.1
>>>> >> >>
>>>> >> >> --
>>>> >> >> _______________________________________________
>>>> >> >> Openembedded-core mailing list
>>>> >> >> Openembedded-core@lists.openembedded.org
>>>> >> >> http://lists.openembedded.org/mailman/listinfo/openembedded-co
>>>> >> >> r
>>>> >> >> e
>>>> >> >>
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> > --
>>>> >> > _______________________________________________
>>>> >> > Openembedded-core mailing list
>>>> >> > Openembedded-core@lists.openembedded.org
>>>> >> > http://lists.openembedded.org/mailman/listinfo/openembedded-cor
>>>> >> > e
>>>> >> >
>>
>
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to