From: "J. Bruce Fields" <bfields@fieldses.org>
To: Steve Dickson <SteveD@redhat.com>
Cc: Neil Brown <neilb@suse.de>, Chuck Lever <chuck.lever@oracle.com>,
Phil Endecott
<phil_bnaqb_endecott-wZDNlLIRyE5g9hUCZPvPmw@public.gmane.org>,
linux-nfs@vger.kernel.org
Subject: Re: Make sm-notify faster if there are no servers to notify
Date: Fri, 5 Dec 2008 12:29:13 -0500 [thread overview]
Message-ID: <20081205172913.GB29227@fieldses.org> (raw)
In-Reply-To: <20081205163824.GA29227@fieldses.org>
On Fri, Dec 05, 2008 at 11:38:24AM -0500, bfields wrote:
> On Fri, Dec 05, 2008 at 08:26:44AM -0500, Steve Dickson wrote:
> > J. Bruce Fields wrote:
> > >
> > >> I think it would still be valuable to replace the 'sync' with two
> > >> 'fsync's, one of the file, one on the directory.
> > >
> > > Sure, may as well.--b.
> > >
> > Something similar to this:
> >
> > diff -up nfs-utils/utils/statd/sm-notify.c.orig nfs-utils/utils/statd/sm-notify.c
> > --- nfs-utils/utils/statd/sm-notify.c.orig 2008-11-17 15:06:13.000000000 -0500
> > +++ nfs-utils/utils/statd/sm-notify.c 2008-12-05 08:21:52.000000000 -0500
> > @@ -211,12 +211,6 @@ usage: fprintf(stderr,
> > backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH);
> > get_hosts(_SM_BAK_PATH);
> >
> > - /* If there are not hosts to notify, just exit */
> > - if (!hosts) {
> > - nsm_log(LOG_DEBUG, "No hosts to notify; exiting");
> > - return 0;
> > - }
>
> This was still a huge boot-time win in the common case, so now that
> we've committed to it I'd rather not regress. Let's just skip the
> sync()s/fsncy()s in the !hosts case--that looks to me like the simplest
> correct solution for now.
My argument for correctness: if we don't sync in that case, then on
reboot the rename that updates the state will either have happened or
(if a crash comes too soon) not.
It is OK for that update to not happen as long as we're assured it
happens before the first lock request is made or replied to, or the
first monitor request completes, as, in the absence of any notifies,
those are the only points at which the new state will be exposed to the
outside world.
The first lock request will also require an upcall to statd. So we're
OK as long as any monitor requests (from either the local kernel or
remote peers) do a sync.
And statd should be doing a sync before responding to any monitor
request. As long as the SM_DIR is on the same filesystem as the state
file, that would do the job.... But now that I look, I see statd is
using an open with O_SYNC to ensure the new statd record hits stable
storage. Which we can't count on being enough.
How about adding an explicit fsync() of the state file (and parent
directory) to statd's first succesful creation of a statd record,
together with a comment explaining this? So around about line 194 in
utils/statd/monitor.c:sm_mon_1_svc()?
In fact, we could delete the sync entirely and do the same before the
first notification, and then we wouldn't have to wait for the sync in
the case host records are present either.... (statd would, but perhaps
we could still get other work done in the mean time).
(Am I missing something?
--b.
next prev parent reply other threads:[~2008-12-05 17:29 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-29 0:13 Make sm-notify faster if there are no servers to notify Phil Endecott
[not found] ` <1225239200402-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 17:18 ` J. Bruce Fields
2008-10-29 17:30 ` Phil Endecott
[not found] ` <1225301403729-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 17:37 ` J. Bruce Fields
2008-10-29 17:45 ` Phil Endecott
[not found] ` <1225302305994-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 18:41 ` J. Bruce Fields
2008-10-29 20:30 ` Chuck Lever
2008-10-29 21:11 ` J. Bruce Fields
2008-11-09 19:25 ` J. Bruce Fields
2008-11-10 0:52 ` Chuck Lever
2008-11-10 0:55 ` J. Bruce Fields
2008-11-10 1:00 ` Chuck Lever
2008-11-10 9:40 ` Phil Endecott
2008-11-10 13:41 ` Steve Dickson
[not found] ` <49183A12.7010707-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-04 21:10 ` J. Bruce Fields
2008-12-05 3:34 ` Neil Brown
[not found] ` <18744.41310.635618.148281-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-12-05 3:58 ` J. Bruce Fields
2008-12-05 13:26 ` Steve Dickson
[not found] ` <49392C14.7000709-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-05 16:38 ` J. Bruce Fields
2008-12-05 17:29 ` J. Bruce Fields [this message]
2008-12-05 18:41 ` Chuck Lever
2008-12-06 2:42 ` J. Bruce Fields
2008-12-08 19:50 ` Chuck Lever
2008-12-11 22:44 ` J. Bruce Fields
2008-12-05 19:12 ` Steve Dickson
[not found] ` <49397D1B.3000701-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-06 2:49 ` J. Bruce Fields
2008-12-05 18:42 ` Steve Dickson
[not found] ` <4939760A.9050304-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-06 3:08 ` J. Bruce Fields
2008-10-31 17:52 ` Steve Dickson
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=20081205172913.GB29227@fieldses.org \
--to=bfields@fieldses.org \
--cc=SteveD@redhat.com \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=phil_bnaqb_endecott-wZDNlLIRyE5g9hUCZPvPmw@public.gmane.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.