From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Simon Riggs <simon(at)2ndQuadrant(dot)com> |
Cc: | Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>, Erik Rijkers <er(at)xs4all(dot)nl>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: testing HS/SR - 1 vs 2 performance |
Date: | 2010-04-17 20:48:21 |
Message-ID: | 7200.1271537301@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Simon Riggs <simon(at)2ndQuadrant(dot)com> writes:
> On Sat, 2010-04-17 at 15:45 -0400, Tom Lane wrote:
>> How do you know that just adding items at the right will produce a
>> sorted array?
> Xids don't arrive in sequence, but "known assigned xids" are added in
> sequence because we infer the existence of the intermediate xids and
> assuming they are running for the snapshot.
Hm. Okay, maybe that will work.
>> ... and even without that issue, this seems like utter fantasy. How
>> are you going to do that "atomically"? Have you considered what will
>> happen on weak-memory-ordering machines like PPC, in particular?
> We search the array between tail and head. If the head moves by integer
> overwrite just as already happens for xid assignment, then we would use
> the new head for the search. The code is careful to fetch only once.
... but this will not. You need to use a lock, because there is
otherwise no guarantee that other processors see the write into the
array element before they see the change in the head pointer.
> I would freely admit I know absolutely nothing about details of
> weak-memory-ordering machines and have not considered them at all. How
> would what I have proposed fail to work, yet what we already rely on
> work correctly? Do the circumstances differ?
Yes. We have memory ordering instructions inserted in the lock
acquisition/release code. Trying to access and modify a shared-memory
data structure without any locking will not work.
There are some places where we suppose that a *single* write into shared
memory can safely be done without a lock, if we're not too concerned
about how soon other transactions will see the effects. But what you
are proposing here requires more than one related write.
I've been burnt by this myself:
http://archives.postgresql.org/pgsql-committers/2008-06/msg00228.php
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2010-04-17 21:44:58 | Re: master in standby mode croaks |
Previous Message | Simon Riggs | 2010-04-17 20:14:33 | Re: testing HS/SR - 1 vs 2 performance |