Re: Wait free LW_SHARED acquisition - v0.2

Поиск
Список
Период
Сортировка
От Amit Kapila
Тема Re: Wait free LW_SHARED acquisition - v0.2
Дата
Msg-id CAA4eK1+5YwXrm-vKXY=gYr2jnFqeJCp0WybzM6Jni69Yb4rN+g@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Wait free LW_SHARED acquisition - v0.2  (Amit Kapila <amit.kapila16@gmail.com>)
Ответы Re: Wait free LW_SHARED acquisition - v0.2
Список pgsql-hackers
On Tue, Oct 21, 2014 at 7:56 PM, Amit Kapila <amit.kapila16@gmail.com> wrote:
> On Wed, Oct 8, 2014 at 6:17 PM, Andres Freund <andres@2ndquadrant.com> wrote:
> >
> > On 2014-06-25 19:06:32 +0530, Amit Kapila wrote:

Today, I have verified all previous comments raised by
me and looked at new code and below are my findings:

>>
>> 4.
>> LWLockAcquireCommon()
>> {
>> ..
>> if (!LWLockDequeueSelf(l))
>> {
>>  for (;;)
>> {
>> PGSemaphoreLock(&proc->sem, false);
>>  if (!proc->lwWaiting)
>> break;
>> extraWaits++;
>>  }
>> lock->releaseOK = true;
>> ..
>> }
>>
>> Setting releaseOK in above context might not be required  because if the
>> control comes in this part of code, it will not retry to acquire another
>> time.

> Hm. You're probably right.

You have agreed to fix this comment, but it seems you have forgot
to change it.

>> 11.
>> LWLockRelease()
>> {
>> ..
>> PRINT_LWDEBUG("LWLockRelease", lock, mode);
>> }
>>
>> Shouldn't this be in begining of LWLockRelease function rather than
>> after processing held_lwlocks array?

> Ok.

You have agreed to fix this comment, but it seems you have forgot
to change it.

Below comment doesn't seem to be adressed?

> LWLockAcquireOrWait()
> {
> ..
> LOG_LWDEBUG("LWLockAcquireOrWait", lockid, mode, "succeeded"); 
> ..
> }

> a. such a log is not there in any other LWLock.. variants,
>  if we want to introduce it, then shouldn't it be done at
>  other places as well.


Below point is yet to be resolved.

> > 12.
> > #ifdef LWLOCK_DEBUG
> > lock->owner = MyProc;
> > #endif
> >
> > Shouldn't it be reset in LWLockRelease?
>
> That's actually intentional. It's quite useful to know the last owner
> when debugging lwlock code.

Won't it cause any problem if the last owner process exits?


Can you explain how pg_read_barrier() in below code makes this
access safe?

LWLockWakeup()
{
..
+ pg_read_barrier(); /* pairs with nwaiters-- */
+ if (!BOOL_ACCESS_ONCE(lock->releaseOK))
..
}



With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

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

Предыдущее
От: Andreas Karlsson
Дата:
Сообщение: Reducing lock strength of adding foreign keys
Следующее
От: David Rowley
Дата:
Сообщение: Re: [Windows,PATCH] Use faster, higher precision timer API