On 07/23/2015 05:57 AM, Kyotaro HORIGUCHI wrote:
> At Wed, 22 Jul 2015 17:50:35 +0300, Ildus Kurbangaliev<[email protected]> wrote
in<[email protected]>
>> >On 07/22/2015 09:10 AM, Kyotaro HORIGUCHI wrote:
>>> > >Hello,
>>> > >
>>> > >At Tue, 21 Jul 2015 14:28:25 +0300, Ildus Kurbangaliev
>>> > ><[email protected]> wrote in
>>> > ><[email protected]>
>>>> > >>On 07/21/2015 01:18 PM, Andres Freund wrote:
>>>>> > >>>I'd very much like to avoid increasing the size of struct LWLock. We
>>>>> > >>>have a lot of those and I'd still like to inline them with the buffer
>>>>> > >>>descriptors. Why do we need a separate group and can't reuse the
>>>>> > >>>tranche? That might require creating a few more tranches, but ...?
>>>>> > >>>
>>>>> > >>>Andres
>>>> > >>Do you mean moving LWLocks defined by offsets and with dynamic sizes
>>>> > >>to separate tranches?
>>> > >I think it is too much for the purpose. Only two new tranches and
>>> > >maybe one or some new members (maybe representing the group) of
>>> > >trances will do, I suppose.
>> >
>> >Can you explain why only two new tranches?
>> >There is 13 types of lwlocks (besides individual), and we need
>> >separate them somehow.
> Sorry, I minunderstood about tranche.
>
> Currently tranches other than main are used by WALInsertLocks and
> ReplicationOrigins. Other "dynamic locks" are defined as parts of
> main LWLokcs since they have the same shape with individual
> lwlocks. Leaving the individual locks, every lock groups may have
> their own tranche if we allow lwlocks to have own tranche even if
> it is in MainLWLockArray. New 13-16 trances will be added but no
> need to register their name in LWLOCK_GROUPS[]. After all, this
> array would be renamed such as "IndividualLWLockNames" and the
> name-lookup can be done by the follwoing simple steps.
>
> - If the the lock is in main tranche, lookup the individual name
> array for its name.
>
> - Elsewise, use the name of its tranche.
>
> Does this make sense?
>
Yes, this is exactly how I see it too. We keep MainLWLockArray, and
create 16 tranches.
Only problem is here that dynamic lwlocks allocated with LWLockAssign,
and for some of cases
we need to pass `tranche_id` to place where it is called (for example
async.c -> slru.c)
--
Ildus Kurbangaliev
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company