Subject: [nfsv4] rpc_tasks in parallel

From: "Murty, Ravi" <[email-masked]>
Date: Thu, 27 Jun 2013 17:12:34 +0000

Hello,

I've been playing with parallelizing transmission and reception of nfs request/reply's to speed up our nfs client on our little core. While I can parallelize skb processing on the receive side before it hands off to rpciod/nfsiod, I've run into a problem on the transmit side.
Details:
I'm using the 2.6.38 kernel. The application sets up rpc requests to read pages from the server and these rpc_tasks and made runnable but end up serializing on the XPRT_LOCKED bit in the xprt structure (since there is one for each mounted client).
I've been thinking about ways to parallelize the completely independent rpc_tasks so they can be transmitted at the same time on multiple threads:

1)      Create multiple transport structures for a single mount point to allow multiple rpc_tasks to be transmitted at the same time.

2)      Split the processing of rpc_tasks into a "top" part and a "bottom" such that the top part can unlock (release) the transport and let the next rpc_task reserve the transport for send the next request while the bottom part is sending the skb to the driver.

Thanks
Ravi