• Greg Banks's avatar
    [PATCH] knfsd: move tempsock aging to a timer · 36bdfc8b
    Greg Banks authored
    Following are 11 patches from Greg Banks which combine to make knfsd more
    Numa-aware.  They reduce hitting on 'global' data structures, and create some
    data-structures that can be node-local.
    
    knfsd threads are bound to a particular node, and the thread to handle a new
    request is chosen from the threads that are attach to the node that received
    the interrupt.
    
    The distribution of threads across nodes can be controlled by a new file in
    the 'nfsd' filesystem, though the default approach of an even spread is
    probably fine for most sites.
    
    Some (old) numbers that show the efficacy of these patches: N == number of
    NICs == number of CPUs == nmber of clients.  Number of NUMA nodes == N/2
    
    N	Throughput, MiB/s	CPU usage, % (max=N*100)
    	Before	After		Before	After
    	---	------	----		-----	-----
    	4	312	435		350	228
    	6	500	656		501	418
    	8	562	804		690	589
    
    This patch:
    
    Move the aging of RPC/TCP connection sockets from the main svc_recv() loop to
    a timer which uses a mark-and-sweep algorithm every 6 minutes.  This reduces
    the amount of work that needs to be done in the main RPC loop and the length
    of time we need to hold the (effectively global) svc_serv->sv_lock.
    
    [akpm@osdl.org: cleanup]
    Signed-off-by: default avatarGreg Banks <gnb@melbourne.sgi.com>
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    36bdfc8b
svcsock.c 42.5 KB