Hi Neil- The clean-up of NFSD thread management has been merged into v5.17-rc. I'm wondering if you have thought more about how to implement dynamic management. One thing that occurred to me was that there was a changeset that attempted to convert NFSD threads into work queues. We merged some of that but stopped when it was found that work queue scheduling seems to have some worst case behavior that sometimes impacts the performance of the Linux NFS server. The part of that work that was merged is now vestigial, and might need to be reverted before proceeding with dynamic NFSD thread management. For example: 476 void svc_xprt_enqueue(struct svc_xprt *xprt) 477 { 478 if (test_bit(XPT_BUSY, &xprt->xpt_flags)) 479 return; 480 xprt->xpt_server->sv_ops->svo_enqueue_xprt(xprt); 481 } 482 EXPORT_SYMBOL_GPL(svc_xprt_enqueue); The svo_enqueue_xprt method was to be different for the different scheduling mechanisms. But to this day there is only one method defined: svc_xprt_do_enqueue() Do you have plans to use this or discard it? If not, I'd like to see that it is removed eventually, as virtual functions are more costly than they used to be thanks to Spectre/Meltdown, and this one is invoked multiple times per RPC. -- Chuck Lever