Optimizing open_file_ntcreate()
Jeremy Allison
jra at samba.org
Tue Jul 25 15:36:13 GMT 2006
On Tue, Jul 25, 2006 at 01:35:19PM +0200, Volker Lendecke wrote:
> Hi, Jeremy!
>
> To tune open_file_ntcreate() I would like to reduce the time
> spent under the lock. In particular with cluster stuff this
> might become a major bottleneck, there locking/messaging is
> slower and we want to scale to much bigger server setups :-)
"might" become worries me :-). But I tend to agree, I'm sure
you could get the numbers to prove it :-).
> There is one case that can be optimized I think: When there
> is exactly one opener of the file. If we figure out that the
> share_lock we just fetched and locked is fresh, we enter our
> share mode and release it again.
>
> We open the file, possibly truncate it and set the ACL and
> so on, all without the lock being held. To get rid of all
> the races that you might think of, and idea would be to
> initially create the share mode as an exclusive one,
> functioning similar to an oplock on the share mode as such.
> The share_mode_lock would then look like:
>
> struct share_mode_lock {
> const char *servicepath; /* canonicalized. */
> const char *filename;
> SMB_DEV_T dev;
> SMB_INO_T ino;
> int num_share_modes;
> struct share_mode_entry *share_modes;
> UNIX_USER_TOKEN *delete_token;
> BOOL exclusive_share_mode; /* The holder of the only share mode entry
> * can assume it is
> * alone. */
> BOOL delete_on_close;
> BOOL initial_delete_on_close;
> BOOL fresh;
> BOOL modified;
> };
>
> A second opener of the file would detect the
> exclusive_share_mode flag and send a message to the only
> share mode entry owner, deferring the open.
>
> The only thing that the exclusive owner has to do is to get
> the share mode, reset that flag and reply. The reply
> triggers an open retry.
>
> I need to think more about whether we can combine the
> "exclusive_share_mode" flag with the oplock code, maybe
> adding a special oplock type.
>
> I think this might not only help the cluster case, it might
> also reduce contention on the share mode db on a normal
> setup. In the cluster case we could implement tridge's
> suggestion that we implement acquiring the initial exclusive
> lock in a central lockd, working with a single round-trip
> instead of two ones.
>
> Comments?
This is subtle code, difficult to modify. Can we have a call
about this ? I'm on calls etc. until 11am today. After that ?
(or sometime tomorrow).
Jeremy.
More information about the samba-technical
mailing list