From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | "Mikheev, Vadim" <vmikheev(at)SECTORBASE(dot)COM>, "'pgsql-hackers(at)postgresql(dot)org'" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Assuming that TAS() will succeed the first time is verboten |
Date: | 2001-01-09 04:03:45 |
Message-ID: | 29518.979013025@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> writes:
>> After changing the checkpoint code to loop, rather than assuming TAS()
>> must succeed the first time, I noticed that it always looped exactly
>> once. This didn't make sense to me at the time, but after querying some
>> Alpha experts at DEC^H^H^HCompaq, it does now. If a new process's first
>> write to a shared memory page is a stq_c, that stq_c is guaranteed to
>> fail (at least on Tru64 Unix), because it will page fault. The shared
>> memory page is inherited read-only and is converted to read-write on
>> first fault. This doesn't seem really necessary, but I suppose it's
>> done to share code with the copy-on-write case for non-shared pages
>> that are inherited via fork().
> This seems quite bizarre. Why would the process fail on the write, and
> not just pause and wait for the fault to bring in the page?
An ordinary write would be re-executed and would succeed after the
page fault. stq_c is different, because it's only supposed to succeed
if the processor has managed to hold an access lock on the target
address continuously since the ldq_l. It would be very bad form to try
to hold the lock during a page fault. (stq_c will also fail if the
processor is interrupted between ldq_l and stq_c, so occasional failures
are to be expected. What was surprising me was the consistency of the
failure pattern.)
See the Alpha Architecture Manual if you really want to discuss this.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2001-01-09 04:17:04 | Re: Assuming that TAS() will succeed the first time is verboten |
Previous Message | Nathan Myers | 2001-01-09 03:41:46 | Re: Assuming that TAS() will succeed the first time is verboten |