> On Jan 26, 2024, at 8:01 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote: > > On Thu, 2024-01-25 at 16:56 -0500, Josef Bacik wrote: >> On Thu, Jan 25, 2024 at 04:01:27PM -0500, Chuck Lever wrote: >>> On Thu, Jan 25, 2024 at 02:53:20PM -0500, Josef Bacik wrote: >>>> This is the last global stat, move it into nfsd_net and adjust all the >>>> users to use that variant instead of the global one. >>> >>> Hm. I thought nfsd threads were a global resource -- they service >>> all network namespaces. So, shouldn't the same thread count be >>> surfaced to all containers? Won't they all see all of the nfsd >>> processes? > > Each container is going to start /proc/fs/nfsd/threads number of threads > regardless. I hadn't actually grokked that they just get tossed onto the > pile of threads that service requests. > > Is is possible for one container to start a small number of threads but > have its client load be such that it spills over and ends up stealing > threads from other containers? I haven't seen any code that manages resources based on namespace, except in filecache.c to restrict writeback per namespace. My impression is that any nfsd thread can serve any namespace. I'm not sure it is currently meaningful for a particular net namespace to "create" more threads. If someone would like that level of control, we could implement a cgroup mechanism and have one or more separate svc_pools per net namespace, maybe? </hand wave> >> I don't think we want the network namespaces seeing how many threads exist in >> the entire system right? If someone in a non-init net namespace does a "pgrep -c nfsd" don't they see the total nfsd thread count for the host? >> Additionally it appears that we can have multiple threads per network namespace, >> so it's not like this will just show 1 for each individual nn, it'll show >> however many threads have been configured for that nfsd in that network >> namespace. I've never tried this, so I'm speculating. But it seems like for now, because all nfsd threads can serve all namespaces, they should all see the global thread count stat. Then later we can refine it. >> I'm good either way, but it makes sense to me to only surface the network >> namespace related thread count. I could probably have a global counter and only >> surface the global counter if net == &init_net. Let me know what you prefer. -- Chuck Lever