All of lore.kernel.org
 help / color / mirror / Atom feed
From: bfields@fieldses.org (J. Bruce Fields)
To: "J. Bruce Fields" <bfields@redhat.com>
Cc: NeilBrown <neilb@suse.de>, linux-nfs@vger.kernel.org
Subject: Re: [PATCH 2/2] nfsd: give out fewer session slots as limit approaches
Date: Thu, 19 Sep 2019 14:41:39 -0400	[thread overview]
Message-ID: <20190919184139.GG26654@fieldses.org> (raw)
In-Reply-To: <20190919171730.GB333@pick.fieldses.org>

On Thu, Sep 19, 2019 at 01:17:30PM -0400, J. Bruce Fields wrote:
> 	- Maybe we should just keep allowing small sessions (1 slot?)
> 	  even past the limit.  Worst case the subsequent kmalloc fails.

So to be clear, I think that's what I'd do for now instead of trying to
find a better error return.

And probably put the 1/3->1/16 change in a separate patch.

--b.

> 
> --b.
> 
> > 
> > >  Also, I'd like to suggest that the '1/3' heuristic be change to 1/16.
> > >  Assuming 30 slots get handed out normally (which my testing shows -
> > >  about 2k each, with an upper limit of 64k):
> > >    When 90 slots left, we hand out
> > >     30 (now 60 left)
> > >     20 (now 40 left)
> > >     13 (now 27 left)
> > >      9 (now 18 left)
> > >      6 (now 12 left)
> > >      4 (now 8 left)
> > >      2 (now 6 left)
> > >      2 (now 4 left)
> > >      1
> > >      1
> > >      1
> > >      1
> > >  which is a rapid decline as clients are added.
> > >  With 16, we hand out 30 at a time until 480 slots are left (30Meg)
> > >  then: 30 28 26 24 23 21 20 19 18 6 15 15 14 13 12 11 10 10 9 9 8 8 7 7
> > >     6 6 5 5 5 5 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1
> > >     1 1
> > >  slots per session
> > > 
> > >  Am I convincing?
> > > 
> > > To make it more concrete: this is what I'm thinking of.  Which bits do
> > > you like?
> > 
> > Except for the error return, it looks good to me.
> > 
> > --b.
> > 
> > > 
> > > Thanks,
> > > NeilBrown
> > > 
> > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > > index 7857942c5ca6..5d11ceaee998 100644
> > > --- a/fs/nfsd/nfs4state.c
> > > +++ b/fs/nfsd/nfs4state.c
> > > @@ -1573,11 +1573,15 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
> > >  	total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used;
> > >  	avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail);
> > >  	/*
> > > -	 * Never use more than a third of the remaining memory,
> > > +	 * Never use more than a 1/16 of the remaining memory,
> > >  	 * unless it's the only way to give this client a slot:
> > >  	 */
> > > -	avail = clamp_t(unsigned long, avail, slotsize, total_avail/3);
> > > +	avail = clamp_t(unsigned long, avail, slotsize, total_avail/16);
> > >  	num = min_t(int, num, avail / slotsize);
> > > +	if (nfsd_drc_mem_used + num * slotsize > nfsd_drc_max_mem)
> > > +		/* Completely out of space - sorry */
> > > +		num = 0;
> > > +
> > >  	nfsd_drc_mem_used += num * slotsize;
> > >  	spin_unlock(&nfsd_drc_lock);
> > >  
> > > @@ -3172,7 +3176,7 @@ static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfs
> > >  	 */
> > >  	ca->maxreqs = nfsd4_get_drc_mem(ca);
> > >  	if (!ca->maxreqs)
> > > -		return nfserr_jukebox;
> > > +		return nfserr_resource;
> > >  
> > >  	return nfs_ok;
> > >  }
> > 
> > 

  reply	other threads:[~2019-09-19 18:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-25 13:21 [PATCH 0/2] tweak knfsd session slot table sizing J. Bruce Fields
2017-09-25 13:21 ` [PATCH 1/2] nfsd: increase DRC cache limit J. Bruce Fields
2017-09-25 13:21 ` [PATCH 2/2] nfsd: give out fewer session slots as limit approaches J. Bruce Fields
2019-09-19  1:08   ` NeilBrown
2019-09-19 16:22     ` J. Bruce Fields
2019-09-19 17:17       ` J. Bruce Fields
2019-09-19 18:41         ` J. Bruce Fields [this message]
2019-09-20  6:15           ` [PATCH 1/2] nfsd: handle drc over-allocation gracefully NeilBrown
2019-09-20  6:33             ` [PATCH 1/2 - vers2] " NeilBrown
2019-09-20  6:36               ` [PATCH - 2/2] nfsd: degraded slot-count more gracefully as allocation nears exhaustion NeilBrown
2019-09-20 16:28               ` [PATCH 1/2 - vers2] nfsd: handle drc over-allocation gracefully J. Bruce Fields

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=20190919184139.GG26654@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=bfields@redhat.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    /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.