From: Chuck Lever <cel@kernel.org>
To: NeilBrown <neil@brown.name>
Cc: Jeff Layton <jlayton@kernel.org>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <dai.ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
Anna Schumaker <anna@kernel.org>,
linux-nfs@vger.kernel.org, linux-rdma@vger.kernel.org,
Chuck Lever <chuck.lever@oracle.com>
Subject: Re: [PATCH v4 00/14] Allocate payload arrays dynamically
Date: Wed, 30 Apr 2025 08:45:49 -0400 [thread overview]
Message-ID: <d523b381-1343-472b-b913-80b942aa9d7f@kernel.org> (raw)
In-Reply-To: <174598987938.500591.3903811314689386843@noble.neil.brown.name>
On 4/30/25 1:11 AM, NeilBrown wrote:
> On Tue, 29 Apr 2025, cel@kernel.org wrote:
>> From: Chuck Lever <chuck.lever@oracle.com>
>>
>> In order to make RPCSVC_MAXPAYLOAD larger (or variable in size), we
>> need to do something clever with the payload arrays embedded in
>> struct svc_rqst and elsewhere.
>>
>> My preference is to keep these arrays allocated all the time because
>> allocating them on demand increases the risk of a memory allocation
>> failure during a large I/O. This is a quick-and-dirty approach that
>> might be replaced once NFSD is converted to use large folios.
>>
>> The downside of this design choice is that it pins a few pages per
>> NFSD thread (and that's the current situation already). But note
>> that because RPCSVC_MAXPAGES is 259, each array is just over a page
>> in size, making the allocation waste quite a bit of memory beyond
>> the end of the array due to power-of-2 allocator round up. This gets
>> worse as the MAXPAGES value is doubled or quadrupled.
>
> I wonder if we should special-case those 3 extra.
> We don't need any for rq_vec and only need 2 (I think) for rq_bvec.
For rq_vec, I believe we need one extra entry in case part of the
payload is in the xdr_buf's head iovec.
For rq_bvec, we need one for the transport header, and one each for
the xdr_buf's head and tail iovecs.
But, I agree, the rationales for the size of each of these arrays are
slightly different.
> We could use the arrays only for payload and have dedicated
> page/vec/bvec for request, reply, read-padding.
I might not fully understand what you are suggesting, but it has
occurred to me that for NFSv4, both Call and Reply can be large for
one RPC transaction (though that is going to be quite infrequent). A
separate rq_pages[] array each for receive and send is possibly in
NFSD's future.
> Or maybe we could not allow read requests that result in the extra page
> due to alignment needs. Would that be much cost?
>
> Apart from the one issue I noted separately, I think the series looks
> good.
>
> Reviewed-by: NeilBrown <neil@brown.name>
Thanks for having a look.
--
Chuck Lever
prev parent reply other threads:[~2025-04-30 12:45 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-28 19:36 [PATCH v4 00/14] Allocate payload arrays dynamically cel
2025-04-28 19:36 ` [PATCH v4 01/14] svcrdma: Reduce the number of rdma_rw contexts per-QP cel
2025-05-06 13:08 ` Christoph Hellwig
2025-05-06 13:17 ` Jason Gunthorpe
2025-05-06 13:40 ` Christoph Hellwig
2025-05-06 13:55 ` Jason Gunthorpe
2025-05-06 14:13 ` Chuck Lever
2025-05-06 14:17 ` Jason Gunthorpe
2025-05-06 14:19 ` Chuck Lever
2025-05-06 14:22 ` Jason Gunthorpe
2025-05-08 8:41 ` Edward Srouji
2025-05-08 12:43 ` Jason Gunthorpe
2025-05-10 23:12 ` Edward Srouji
2025-04-28 19:36 ` [PATCH v4 02/14] sunrpc: Add a helper to derive maxpages from sv_max_mesg cel
2025-05-06 13:10 ` Christoph Hellwig
2025-04-28 19:36 ` [PATCH v4 03/14] sunrpc: Remove backchannel check in svc_init_buffer() cel
2025-05-06 13:11 ` Christoph Hellwig
2025-04-28 19:36 ` [PATCH v4 04/14] sunrpc: Replace the rq_pages array with dynamically-allocated memory cel
2025-04-30 4:53 ` NeilBrown
2025-04-28 19:36 ` [PATCH v4 05/14] sunrpc: Replace the rq_vec " cel
2025-05-06 13:29 ` Christoph Hellwig
2025-05-06 16:31 ` Chuck Lever
2025-05-07 7:34 ` Christoph Hellwig
2025-04-28 19:36 ` [PATCH v4 06/14] sunrpc: Replace the rq_bvec " cel
2025-04-28 19:36 ` [PATCH v4 07/14] sunrpc: Adjust size of socket's receive page array dynamically cel
2025-04-28 19:36 ` [PATCH v4 08/14] svcrdma: Adjust the number of entries in svc_rdma_recv_ctxt::rc_pages cel
2025-05-06 13:31 ` Christoph Hellwig
2025-05-06 15:20 ` Chuck Lever
2025-05-07 7:40 ` Christoph Hellwig
2025-04-28 19:36 ` [PATCH v4 09/14] svcrdma: Adjust the number of entries in svc_rdma_send_ctxt::sc_pages cel
2025-04-28 19:36 ` [PATCH v4 10/14] sunrpc: Remove the RPCSVC_MAXPAGES macro cel
2025-04-28 19:36 ` [PATCH v4 11/14] NFSD: Remove NFSD_BUFSIZE cel
2025-04-28 21:03 ` Jeff Layton
2025-05-06 13:32 ` Christoph Hellwig
2025-04-28 19:37 ` [PATCH v4 12/14] NFSD: Remove NFSSVC_MAXBLKSIZE_V2 macro cel
2025-05-06 13:33 ` Christoph Hellwig
2025-04-28 19:37 ` [PATCH v4 13/14] NFSD: Add a "default" block size cel
2025-04-28 21:07 ` Jeff Layton
2025-04-28 19:37 ` [PATCH v4 14/14] SUNRPC: Bump the maximum payload size for the server cel
2025-04-28 21:08 ` Jeff Layton
2025-04-29 15:44 ` Chuck Lever
2025-05-06 13:34 ` Christoph Hellwig
2025-05-06 13:52 ` Chuck Lever
2025-05-06 13:54 ` Jeff Layton
2025-05-06 13:59 ` Chuck Lever
2025-05-07 7:42 ` Christoph Hellwig
2025-05-07 14:25 ` Chuck Lever
2025-04-29 13:06 ` [PATCH v4 00/14] Allocate payload arrays dynamically Zhu Yanjun
2025-04-29 13:41 ` Chuck Lever
2025-04-29 13:52 ` Zhu Yanjun
2025-04-30 5:11 ` NeilBrown
2025-04-30 12:45 ` Chuck Lever [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d523b381-1343-472b-b913-80b942aa9d7f@kernel.org \
--to=cel@kernel.org \
--cc=anna@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=dai.ngo@oracle.com \
--cc=jlayton@kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=neil@brown.name \
--cc=okorniev@redhat.com \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox