Re: Inefficient barriers on solaris with sun cc

Поиск
Список
Период
Сортировка
От Oskari Saarenmaa
Тема Re: Inefficient barriers on solaris with sun cc
Дата
Msg-id 542590CB.8090708@ohmu.fi
обсуждение исходный текст
Ответ на Re: Inefficient barriers on solaris with sun cc  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
26.09.2014, 17:28, Robert Haas kirjoitti:
> On Fri, Sep 26, 2014 at 8:55 AM, Oskari Saarenmaa <os@ohmu.fi> wrote:
>>> So you think a read barrier is the same thing as an acquire barrier
>>> and a write barrier is the same as a release barrier?  That would be
>>> surprising.  It's certainly not true in general.
>>
>> The above doc describes the difference: read barrier requires loads before
>> the barrier to be completed before loads after the barrier - an acquire
>> barrier is the same, but it also requires loads to be complete before stores
>> after the barrier.
>>
>> Similarly write barrier requires stores before the barrier to be completed
>> before stores after the barrier - a release barrier is the same, but it also
>> requires loads before the barrier to be completed before stores after the
>> barrier.
>>
>> So acquire is read + loads-before-stores and release is write +
>> loads-before-stores.
>
> Hmm.  My impression was that an acquire barrier means that loads and
> stores can migrate forward across the barrier but not backward; and
> that a release barrier means that loads and stores can migrate
> backward across the barrier but not forward.  I'm actually not really
> sure what this means unless the barrier also does something in and of
> itself.  For example, consider this:

[...]

> With the definition you (and Oracle) propose, this won't work, because
> there's nothing to keep the modification of things from being
> reordered before flag = 1.  What good is that?  Apparently, I don't
> have any idea!

I'm not proposing any definition for acquire or release barriers, I was 
just proposing to use the things Solaris Studio defines as acquire and 
release barriers to implement read and write barriers in PostgreSQL 
because similar barrier names are used with gcc and on Solaris Studio 
acquire is a stronger read barrier and release is a stronger write 
barrier.  atomics.h's definition of pg_(read|write)_barrier doesn't have 
any requirements for loads before stores, though, so we could use 
__machine_r_barrier and __machine_w_barrier instead.

But as Andres pointed out all this is probably unnecessary and we could 
define read and write barrier as __compiler_barrier with Solaris Studio 
cc.  It's only available for Solaris (x86 and Sparc) and Linux (x86).

/ Oskari



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Erik Rijkers"
Дата:
Сообщение: Re: BRIN indexes - TRAP: BadArgument
Следующее
От: Andres Freund
Дата:
Сообщение: Re: Replication identifiers, take 3