mbox series

[00/14] Refactor SUNRPC svc thread code, and use llist

Message ID 168966227838.11075.2974227708495338626.stgit@noble.brown (mailing list archive)
Headers show
Series Refactor SUNRPC svc thread code, and use llist | expand

Message

NeilBrown July 18, 2023, 6:38 a.m. UTC
This code .... grew a bit since my previous pencil-sketch code.

The goal is really the final patch: using a llist without spinlocks to
handle dispatch of idle threads.  To get there I found it necessary - or
at least helpful - to do a lot of refactoring.

This code passes some basic tests, but I haven't push it hard yet.

Even if other aren't convinced that llists are the best solution, I
think a lot of the refactoring is this valuable.

Comments welcome,
Thanks,
NeilBrown

---

NeilBr own (14):
      lockd: remove SIGKILL handling.
      nfsd: don't allow nfsd threads to be signalled.
      SUNRPC: call svc_process() from svc_recv().
      SUNRPC: change svc_recv() to return void.
      SUNRPC: remove timeout arg from svc_recv()
      SUNRPC: change various server-side #defines to enum
      SUNRPC: refactor svc_recv()
      SUNRPC: integrate back-channel processing with svc_recv() and svc_process()
      SUNRPC: change how svc threads are asked to exit.
      SUNRPC: change svc_pool_wake_idle_thread() to return nothing.
      SUNRPC: add list of idle threads
      SUNRPC: discard SP_CONGESTED
      SUNRPC: change service idle list to be an llist
      SUNRPC: only have one thread waking up at a time


 fs/lockd/svc.c                    |  49 ++-----
 fs/lockd/svclock.c                |   9 +-
 fs/nfs/callback.c                 |  59 +-------
 fs/nfsd/nfs4proc.c                |  10 +-
 fs/nfsd/nfssvc.c                  |  22 +--
 include/linux/llist.h             |   2 +
 include/linux/lockd/lockd.h       |   4 +-
 include/linux/sunrpc/cache.h      |  11 +-
 include/linux/sunrpc/svc.h        |  87 +++++++++---
 include/linux/sunrpc/svc_xprt.h   |  39 +++---
 include/linux/sunrpc/svcauth.h    |  29 ++--
 include/linux/sunrpc/svcsock.h    |   2 +-
 include/linux/sunrpc/xprtsock.h   |  25 ++--
 include/trace/events/sunrpc.h     |   5 +-
 lib/llist.c                       |  27 ++++
 net/sunrpc/backchannel_rqst.c     |   8 +-
 net/sunrpc/svc.c                  |  71 ++++------
 net/sunrpc/svc_xprt.c             | 226 ++++++++++++++++--------------
 net/sunrpc/xprtrdma/backchannel.c |   2 +-
 19 files changed, 347 insertions(+), 340 deletions(-)

--
Signature

Comments

Chuck Lever July 18, 2023, 6:12 p.m. UTC | #1
> On Jul 18, 2023, at 2:38 AM, NeilBrown <neilb@suse.de> wrote:
> 
> This code .... grew a bit since my previous pencil-sketch code.
> 
> The goal is really the final patch: using a llist without spinlocks to
> handle dispatch of idle threads.  To get there I found it necessary - or
> at least helpful - to do a lot of refactoring.
> 
> This code passes some basic tests, but I haven't push it hard yet.
> 
> Even if other aren't convinced that llists are the best solution, I
> think a lot of the refactoring is this valuable.

Some of these are indeed immediately appealing. Let's work on getting
those into the code base before we decide on the scheduler changes.


> Comments welcome,
> Thanks,
> NeilBrown
> 
> ---
> 
> NeilBr own (14):
>      lockd: remove SIGKILL handling.
>      nfsd: don't allow nfsd threads to be signalled.
>      SUNRPC: call svc_process() from svc_recv().
>      SUNRPC: change svc_recv() to return void.
>      SUNRPC: remove timeout arg from svc_recv()
>      SUNRPC: change various server-side #defines to enum
>      SUNRPC: refactor svc_recv()
>      SUNRPC: integrate back-channel processing with svc_recv() and svc_process()
>      SUNRPC: change how svc threads are asked to exit.
>      SUNRPC: change svc_pool_wake_idle_thread() to return nothing.
>      SUNRPC: add list of idle threads
>      SUNRPC: discard SP_CONGESTED
>      SUNRPC: change service idle list to be an llist
>      SUNRPC: only have one thread waking up at a time
> 
> 
> fs/lockd/svc.c                    |  49 ++-----
> fs/lockd/svclock.c                |   9 +-
> fs/nfs/callback.c                 |  59 +-------
> fs/nfsd/nfs4proc.c                |  10 +-
> fs/nfsd/nfssvc.c                  |  22 +--
> include/linux/llist.h             |   2 +
> include/linux/lockd/lockd.h       |   4 +-
> include/linux/sunrpc/cache.h      |  11 +-
> include/linux/sunrpc/svc.h        |  87 +++++++++---
> include/linux/sunrpc/svc_xprt.h   |  39 +++---
> include/linux/sunrpc/svcauth.h    |  29 ++--
> include/linux/sunrpc/svcsock.h    |   2 +-
> include/linux/sunrpc/xprtsock.h   |  25 ++--
> include/trace/events/sunrpc.h     |   5 +-
> lib/llist.c                       |  27 ++++
> net/sunrpc/backchannel_rqst.c     |   8 +-
> net/sunrpc/svc.c                  |  71 ++++------
> net/sunrpc/svc_xprt.c             | 226 ++++++++++++++++--------------
> net/sunrpc/xprtrdma/backchannel.c |   2 +-
> 19 files changed, 347 insertions(+), 340 deletions(-)
> 
> --
> Signature
> 

--
Chuck Lever