Re: LWLock optimization for multicore Power machines - Mailing list pgsql-hackers

From Alexander Korotkov
Subject Re: LWLock optimization for multicore Power machines
Date
Msg-id CAPpHfdv7PrXat6Uokg6LMxf6e8bEmwhBD2VRWnK-z4ANKDMyrA@mail.gmail.com
Whole thread Raw
In response to Re: LWLock optimization for multicore Power machines  (Alexander Korotkov <a.korotkov@postgrespro.ru>)
Responses Re: LWLock optimization for multicore Power machines  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: LWLock optimization for multicore Power machines  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
On Sun, Mar 26, 2017 at 12:29 AM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote:
On Sat, Mar 25, 2017 at 11:32 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> I moved PPC implementation of pg_atomic_fetch_mask_add_u32() into
> port/atomics/arch-ppc.h.  I also had to declare pg_atomic_uint32 there to
> satisfy usage of this type as argument
> of pg_atomic_fetch_mask_add_u32_impl().

Hm, you did something wrong there, because now I get a bunch of failures:

ccache gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -g -O2 -I../../../../src/include    -c -o brin.o brin.c
In file included from ../../../../src/include/port/atomics.h:123,
                 from ../../../../src/include/utils/dsa.h:17,
                 from ../../../../src/include/nodes/tidbitmap.h:26,
                 from ../../../../src/include/access/genam.h:19,
                 from ../../../../src/include/nodes/execnodes.h:17,
                 from ../../../../src/include/access/brin.h:14,
                 from brin.c:18:
../../../../src/include/port/atomics/generic.h:154:3: error: #error "No pg_atomic_test_and_set provided"
../../../../src/include/port/atomics.h: In function 'pg_atomic_init_flag':
../../../../src/include/port/atomics.h:178: warning: implicit declaration of function 'pg_atomic_init_flag_impl'
../../../../src/include/port/atomics.h: In function 'pg_atomic_test_set_flag':
../../../../src/include/port/atomics.h:193: warning: implicit declaration of function 'pg_atomic_test_set_flag_impl'
../../../../src/include/port/atomics.h: In function 'pg_atomic_unlocked_test_flag':
../../../../src/include/port/atomics.h:208: warning: implicit declaration of function 'pg_atomic_unlocked_test_flag_impl'
... and so on.

I'm not entirely sure what the intended structure of these header files
is.  Maybe Andres can comment.

It seems that on this platform definition of atomics should be provided by fallback.h.  But it doesn't because I already defined PG_HAVE_ATOMIC_U32_SUPPORT in arch-ppc.h.  I think in this case we shouldn't provide ppc-specific implementation of pg_atomic_fetch_mask_add_u32().  However, I don't know how to do this assuming arch-ppc.h is included before compiler-specific headers.  Thus, in arch-ppc.h we don't know yet if we would find implementation of atomics for this platform.  One possible solution is to provide assembly implementation for all atomics in arch-ppc.h.

BTW, implementation for all atomics in arch-ppc.h would be too invasive and shouldn't be considered for v10.
However, I made following workaround: declare pg_atomic_uint32 and pg_atomic_fetch_mask_add_u32_impl() only when we know that generic-gcc.h would declare gcc-based atomics.
Could you, please, check it on Apple PPC?

------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company 
Attachment

pgsql-hackers by date:

Previous
From: Pierre Ducroquet
Date:
Subject: Re: Other formats in pset like markdown, rst, mediawiki
Next
From: Robert Haas
Date:
Subject: Re: Parallel query execution with SPI