Please don't reply to lustre-devel. Instead, comment in Bugzilla by using the 
following link:
https://bugzilla.lustre.org/show_bug.cgi?id=10902



Hi

I still think this doesn't answer the question I asked.

Vitaly Fertman wrote:
> Hi Peter
>
> On Thursday 14 December 2006 16:21, Peter Braam wrote:
>   
>> Hi
>>
>> We are promising this deliverable to Cray soon, so I mark the discussion 
>> urgent.
>>
>> The DLD is good, but I have a question at the HLD level.
>>
>> Without list heads for each skip list in the resource, I believe you 
>> will often be walking enormous amounts of locks still to find the 
>> beginning of the skip list.  Please explain why this is not the case OR 
>> introduce list heads in the resource.  If you have a good answer, please 
>> implement.
>>     
>
> First of all, you need to know what lock modes you conflict with.
> Then you check every group of locks if it conflicts to your lock modes.
> If not, you skip the whole group. This is done as the following:
> 1) Locks are kept in the granted list and are grouped by modes.
> 2) the first lock of every group has the mode skip list initialized.
>   


> 3) you have a look at the first lock in the list and if its mode does
> not conflict, you skip all the group.
> 4) you do (3) for the first lock of every group as well.
>   
Hmm - there are two things that are not explained here:

1.  Clearly a simple algorithm can give you a list of lock modes that you
conflict with.  For lock enqueues you now need to check the list and send
blocking callbacks.

Key question (asked several times now, no answer yet!!!): how is the first
element of a group that conflicts with the enqueue found without  walking  over
all locks until that list head is "found"? 

I assume that the locks of a particular mode are in a list called a skiplist,
but how to find the beginning of that list isn't well documented, and should be
done preferably by embedding a list head for that skip list in the resource OR
by having pointers point to the first element.  Neither are stated or documented
in the DLD.

2. When other lock changes occur, such as a cancellation or conversion,
different scan needs to happen to send completion callbacks. Please explain.

- Peter -

> When you see the current group conflicts by mode you need to
> check every lock of this group if it conflicts by policy. However,
> if you know it does not, you would like to skip all the locks with
> the same policy. This is done as the following:
> 1) Locks are kept in the granted list, grouped by modes and
> sub-grouped by policy.
> 2) the first lock of every sub-group has the policy skip list initialized.
> 3) you have a look at the first lock in the sub-group and if its policy
> does not conflict, you skip all the sub-group with the same policy.
>
>

_______________________________________________
Lustre-devel mailing list
[email protected]
https://mail.clusterfs.com/mailman/listinfo/lustre-devel

Reply via email to