From: Mark Hills <mark.hills@framestore.com>
To: Benjamin Coddington <bcodding@redhat.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: NFS server QoS ideas
Date: Tue, 30 Sep 2014 17:30:04 +0100 (BST) [thread overview]
Message-ID: <alpine.LFD.2.01.1409301657470.11031@sys880.ldn.framestore.com> (raw)
In-Reply-To: <alpine.LRH.2.11.1409241958400.8059@sh-el6.eng.rdu2.redhat.com>
On Wed, 24 Sep 2014, Benjamin Coddington wrote:
> Hi Mark, I've often thought about working on a project like this -
> usually when I've been trying to keep a number of systems responsive
> when there's been one very aggressive client, which typically would be
> identified by a single uid, or a uid:ip pair. I think your second
> criteria would be the most useful.
Thanks Ben.
To do uid:ip paid would be similarly possible, but actually we're also
interested in uid only -- to balance load between users on a cluster.
> I've done absolutely no research on this, but I had thought offhandedly
> that a solution might integrate with cgroups somehow.
I'm not sure, as this is a server-side thing, there's no real processes to
partition in cgroups.
> That's not much (less than 2 cents), but I think this feature would be
> welcomed warmly by sysadmins running shared NFS systems.
Thanks, good to hear.
I'd appreciate any input or caveats from anyone on the ideas I posted for
implementing this.
Thanks
--
Mark
> On Wed, 24 Sep 2014, Mark Hills wrote:
>
> > I am looking at possibilities to implement QoS (quality of service) in an
> > NFS server -- for a multiuser HPC environment, on NFSv3.
> >
> > The desire is for a fully loaded server to process requests in some kind
> > of "fair share" (like round robin) or priorities based on some attribute;
> > eg. uid at the client, request type + origin, or even directory etc.
> >
> > Criteria could be fairly blunt and specific to our use case to begin with.
> >
> > I've looked at the code with the following ideas for where to start.
> >
> > It seems the implementation depends a lot on which attributes to
> > share/schedule on:
> >
> > 1) by client IP:
> >
> > make use the existing structures
> >
> > enhance the svc_xprt_enqueue/dequeue process to schedule svc_xprt
> > as these are already per-client
> >
> > 2) by client uid or other RPC attribute:
> >
> > have svc_recv make multiple calls to svc_handle_xprt
> >
> > buffer the requests into multiple queues held at svc_pool (re-use
> > xpt_deferred?)
> >
> > 3) by NFS operation, file handle etc.:
> >
> > most awkward, as there is not buffering of requests at the NFS level
> > or shared between threads
> >
> > perhaps do as (2) but with a function in svc_program to return
> > scheduling criteria
> >
> > It looks like I need to consider the behaviour when there are multiple
> > svc_pool (ie. NUMA)
> >
> > This is the first time I've looked into this code, I'm interested in any
> > comments/criticisms or alternatives.
> >
> > Thanks
> >
> > --
> > Mark
prev parent reply other threads:[~2014-09-30 16:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-24 14:56 NFS server QoS ideas Mark Hills
2014-09-25 0:12 ` Benjamin Coddington
2014-09-30 16:30 ` Mark Hills [this message]
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=alpine.LFD.2.01.1409301657470.11031@sys880.ldn.framestore.com \
--to=mark.hills@framestore.com \
--cc=bcodding@redhat.com \
--cc=linux-nfs@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox