From: Tom Talpey <tom@talpey.com>
To: Rohith Surabattula <rohiths.msft@gmail.com>
Cc: "Shyam Prasad N" <nspmangalore@gmail.com>,
linux-cifs <linux-cifs@vger.kernel.org>,
"Steve French" <smfrench@gmail.com>,
"Pavel Shilovsky" <piastryyy@gmail.com>,
sribhat.msa@outlook.com,
"ronnie sahlberg" <ronniesahlberg@gmail.com>,
"Aurélien Aptel" <aaptel@suse.com>
Subject: Re: cifs: Deferred close for files
Date: Wed, 24 Mar 2021 10:20:30 -0400 [thread overview]
Message-ID: <49874720-dc76-2660-17e7-f7157a9725d4@talpey.com> (raw)
In-Reply-To: <CACdtm0agzeVRiQg1zZjm=jFrf-gSQ-+YGc1Zm1xN1Pd9tJia4Q@mail.gmail.com>
On 3/22/2021 1:07 PM, Rohith Surabattula wrote:
> On 3/11/2021 8:47 AM, Shyam Prasad N wrote:
>> Hi Rohith,
>>
>> The changes look good at a high level.
>>
>> Just a few points worth checking:
>> 1. In cifs_open(), should be perform deferred close for certain cases
>> like O_DIRECT? AFAIK, O_DIRECT is just a hint to the filesystem to
>> perform less data caching. By deferring close, aren't we delaying
>> flushing dirty pages? @Steve French ?
>
> With O_DIRECT flag, data is not cached locally and will be sent to
> server immediately.
>
>> 2. I see that you're maintaining a new list of files for deferred
>> closing. Since there could be a large number of such files for a big
>> share with sufficient I/O, maybe we should think of a structure with
>> faster lookups (rb trees?).
>> I know we already have a bunch of linked lists in cifs.ko, and we need
>> to review perf impact for all those lists. But this one sounds like a
>> candidate for faster lookups.
>
> Entries will be added into this list only once file is closed and will
> remain for acregmax amount interval.
I think you mean once the "file descriptor" is closed, right? But now
that you mention it, caching the attributes sounds a lot like the
NFS close-to-open semantic, which is itself optional with the "nocto"
mount option.
Because some applications use close() to perform flush, there may be
some silent side effects as well. I don't see anything special in the
patch regarding this. Have you considered it?
> So, Will this affect performance i.e during lookups ?
>
>> 3. Minor comment. Maybe change the field name oplock_deferred_close to
>> oplock_break_received?
>
> Addressed. Attached the patch.
>>
>> Regards,
>> Shyam
>
>> I wonder why the choice of 5 seconds? It seems to me a more natural
>> interval on the order of one or more of
>> - attribute cache timeout
>> - lease time
>> - echo_interval
>
> Yes, This sounds good. I modified the patch to defer by attribute
> cache timeout interval.
>
>> Also, this wording is rather confusing:
>
>>> When file is closed, SMB2 close request is not sent to server
>>> immediately and is deferred for 5 seconds interval. When file is
>>> reopened by same process for read or write, previous file handle
>>> can be used until oplock is held.
>
>> It's not a "previous" filehandle if it's open, and "can be used" is
>> a rather passive statement. A better wording may be "the filehandle
>> is reused".
>
>> And, "until oplock is held" is similarly awkward. Do you mean "*if*
>> an oplock is held", or "*provided" an oplock is held"?
>
>>> When same file is reopened by another client during 5 second
>>> interval, oplock break is sent by server and file is closed immediately
>>> if reference count is zero or else oplock is downgraded.
>
>> Only the second part of the sentence is relevant to the patch. Also,
>> what about lease break?
>
> Modified the patch.
The change to promptly close the handle on oplock or lease break looks
reasonable. The rewording in the patch description is better too.
>> What happens if the handle is durable or persistent, and the connection
>> to the server times out? Is the handle recovered, then closed?
>
> Do you mean when the session gets reconnected, the deferred handle
> will be recovered and closed?
Yes, because I expect the client to attempt to reclaim its handles upon
reconnection. I don't see any particular code change regarding this.
My question is, if there's a deferred close pending, should it do that,
or should it simply cut to the chase and close any such handle(s)?
Tom.
> Regards,
> Rohith
>
> On Thu, Mar 11, 2021 at 11:25 PM Tom Talpey <tom@talpey.com> wrote:
>>
>> On 3/11/2021 8:47 AM, Shyam Prasad N wrote:
>>> Hi Rohith,
>>>
>>> The changes look good at a high level.
>>>
>>> Just a few points worth checking:
>>> 1. In cifs_open(), should be perform deferred close for certain cases
>>> like O_DIRECT? AFAIK, O_DIRECT is just a hint to the filesystem to
>>> perform less data caching. By deferring close, aren't we delaying
>>> flushing dirty pages? @Steve French ?
>>> 2. I see that you're maintaining a new list of files for deferred
>>> closing. Since there could be a large number of such files for a big
>>> share with sufficient I/O, maybe we should think of a structure with
>>> faster lookups (rb trees?).
>>> I know we already have a bunch of linked lists in cifs.ko, and we need
>>> to review perf impact for all those lists. But this one sounds like a
>>> candidate for faster lookups.
>>> 3. Minor comment. Maybe change the field name oplock_deferred_close to
>>> oplock_break_received?
>>>
>>> Regards,
>>> Shyam
>>
>> I wonder why the choice of 5 seconds? It seems to me a more natural
>> interval on the order of one or more of
>> - attribute cache timeout
>> - lease time
>> - echo_interval
>>
>> Also, this wording is rather confusing:
>>
>>> When file is closed, SMB2 close request is not sent to server
>>> immediately and is deferred for 5 seconds interval. When file is
>>> reopened by same process for read or write, previous file handle
>>> can be used until oplock is held.
>>
>> It's not a "previous" filehandle if it's open, and "can be used" is
>> a rather passive statement. A better wording may be "the filehandle
>> is reused".
>>
>> And, "until oplock is held" is similarly awkward. Do you mean "*if*
>> an oplock is held", or "*provided" an oplock is held"?
>>
>>> When same file is reopened by another client during 5 second
>>> interval, oplock break is sent by server and file is closed immediately
>>> if reference count is zero or else oplock is downgraded.
>>
>> Only the second part of the sentence is relevant to the patch. Also,
>> what about lease break?
>>
>> What happens if the handle is durable or persistent, and the connection
>> to the server times out? Is the handle recovered, then closed?
>>
>> Tom.
>>
>>
>>> On Tue, Mar 9, 2021 at 2:41 PM Rohith Surabattula
>>> <rohiths.msft@gmail.com> wrote:
>>>>
>>>> Hi All,
>>>>
>>>> Please find the attached patch which will defer the close to server.
>>>> So, performance can be improved.
>>>>
>>>> i.e When file is open, write, close, open, read, close....
>>>> As close is deferred and oplock is held, cache will not be invalidated
>>>> and same handle can be used for second open.
>>>>
>>>> Please review the changes and let me know your thoughts.
>>>>
>>>> Regards,
>>>> Rohith
>>>
>>>
>>>
next prev parent reply other threads:[~2021-03-24 14:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-09 9:11 cifs: Deferred close for files Rohith Surabattula
2021-03-11 13:47 ` Shyam Prasad N
2021-03-11 17:55 ` Tom Talpey
2021-03-22 17:07 ` Rohith Surabattula
2021-03-24 14:20 ` Tom Talpey [this message]
2021-03-25 2:42 ` Rohith Surabattula
2021-04-07 14:57 ` Rohith Surabattula
2021-04-11 12:19 ` Rohith Surabattula
2021-04-11 18:49 ` Steve French
2021-04-12 3:43 ` Rohith Surabattula
2021-04-12 16:57 ` Aurélien Aptel
2021-04-12 17:23 ` Steve French
2021-04-12 17:24 ` Steve French
2021-04-12 19:35 ` Rohith Surabattula
2021-04-19 23:03 ` Steve French
2021-04-28 3:30 ` Rohith Surabattula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49874720-dc76-2660-17e7-f7157a9725d4@talpey.com \
--to=tom@talpey.com \
--cc=aaptel@suse.com \
--cc=linux-cifs@vger.kernel.org \
--cc=nspmangalore@gmail.com \
--cc=piastryyy@gmail.com \
--cc=rohiths.msft@gmail.com \
--cc=ronniesahlberg@gmail.com \
--cc=smfrench@gmail.com \
--cc=sribhat.msa@outlook.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).