All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@kernel.org>
To: Trond Myklebust <trondmy@hammerspace.com>,
	"neilb@suse.com" <neilb@suse.com>,
	 "Chuck.Lever@oracle.com" <Chuck.Lever@oracle.com>
Cc: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: knfsd performance
Date: Tue, 18 Jun 2024 15:38:43 -0400	[thread overview]
Message-ID: <a59ede76404c0f38f684475f1fe44f895f6bda80.camel@kernel.org> (raw)
In-Reply-To: <313d317dc0ca136de106979add5695ef5e2101e7.camel@hammerspace.com>

On Tue, 2024-06-18 at 18:32 +0000, Trond Myklebust wrote:
> I recently back ported Neil's lwq code and sunrpc server changes to
> our
> 5.15.130 based kernel in the hope of improving the performance for
> our
> data servers.
> 
> Our performance team recently ran a fio workload on a client that was
> doing 100% NFSv3 reads in O_DIRECT mode over an RDMA connection
> (infiniband) against that resulting server. I've attached the
> resulting
> flame graph from a perf profile run on the server side.
> 
> Is anyone else seeing this massive contention for the spin lock in
> __lwq_dequeue? As you can see, it appears to be dwarfing all the
> other
> nfsd activity on the system in question here, being responsible for
> 45%
> of all the perf hits.
> 
> 

I haven't spent much time on performance testing since I keep getting
involved in bugs. It looks like that's just the way lwq works. From the
comments in lib/lwq.c:

 * Entries are dequeued using a spinlock to protect against multiple
 * access.  The llist is staged in reverse order, and refreshed
 * from the llist when it exhausts.
 *
 * This is particularly suitable when work items are queued in BH or
 * IRQ context, and where work items are handled one at a time by
 * dedicated threads.

...we have dedicated threads, but we usually have a lot of them, so
that lock ends up being pretty contended.

Is the box you're testing on NUMA-enabled? Setting the server for
pool_mode=pernode might be worth an experiment. At least you'd have
more than one lwq and less cross-node chatter. You could also try
pool_mode=percpu, but that's rumored to not be as helpful.

Maybe we need to consider some other lockless queueing mechanism longer
term, but I'm not sure how possible that is.
-- 
Jeff Layton <jlayton@kernel.org>

  parent reply	other threads:[~2024-06-18 19:38 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-18 18:32 knfsd performance Trond Myklebust
2024-06-18 18:40 ` Chuck Lever III
2024-06-18 19:29   ` Trond Myklebust
2024-06-18 19:39     ` Chuck Lever III
2024-06-18 19:50       ` Trond Myklebust
2024-06-18 19:54         ` Chuck Lever III
2024-06-18 20:16           ` Jeff Layton
2024-06-18 23:17             ` NeilBrown
2024-06-18 23:26               ` Chuck Lever III
2024-06-18 23:33                 ` Jeff Layton
2024-06-18 23:51                   ` Chuck Lever III
2024-06-19  2:56                 ` Dave Chinner
2024-06-19  5:47                   ` Christoph Hellwig
2024-06-19 13:44                   ` Chuck Lever III
2024-06-19 21:16                   ` NeilBrown
2024-06-19  0:42           ` Dave Chinner
2024-06-19  1:01             ` NeilBrown
2024-06-19 21:25               ` NeilBrown
2024-06-20  2:29                 ` Dave Chinner
2024-06-20 10:18                   ` Jeff Layton
2024-06-20 21:39                     ` NeilBrown
2024-06-20 18:33                   ` Chuck Lever III
2024-06-20 22:04                     ` NeilBrown
2024-06-20 23:57                       ` Trond Myklebust
2024-06-18 19:38 ` Jeff Layton [this message]
2024-06-18 23:12   ` NeilBrown

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=a59ede76404c0f38f684475f1fe44f895f6bda80.camel@kernel.org \
    --to=jlayton@kernel.org \
    --cc=Chuck.Lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.com \
    --cc=trondmy@hammerspace.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 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.