From: "J. Bruce Fields" <bfields@fieldses.org>
To: Anna Schumaker <Anna.Schumaker@netapp.com>
Cc: Christoph Hellwig <hch@infradead.org>, linux-nfs@vger.kernel.org
Subject: Re: [PATCH v2 2/4] NFSD: Add READ_PLUS support for data segments
Date: Thu, 5 Feb 2015 11:47:01 -0500 [thread overview]
Message-ID: <20150205164701.GA4289@fieldses.org> (raw)
In-Reply-To: <54D394EC.9030902@Netapp.com>
On Thu, Feb 05, 2015 at 11:06:04AM -0500, Anna Schumaker wrote:
> On 02/05/2015 09:13 AM, Christoph Hellwig wrote:
> >> + p = xdr_reserve_space(xdr, 4 + 8 + 4); /* content type, offset, maxcount */
> >> + if (!p)
> >> + return nfserr_resource;
> >> + xdr_commit_encode(xdr);
> >> +
> >> + maxcount = svc_max_payload(resp->rqstp);
> >> + maxcount = min_t(unsigned long, maxcount, (xdr->buf->buflen - xdr->buf->len));
> >> + maxcount = min_t(unsigned long, maxcount, read->rd_length);
> >> +
> >> + err = nfsd4_encode_readv(resp, read, file, &maxcount);
> >
> > If the READ_PLUS implementation can't use the splice read path it's
> > probably a loss for most workloads.
> >
>
> I'll play around with the splice path, but I don't think it was designed for encoding multiple read segments.
The advantage of splice is it can hand us references to page cache pages
that already hold the read data, which we can in turn hand off to the
network layer when we send the reply, minimizing copying.
But then we need a data structure than can keep track of all the pieces
of the resulting reply, which consists of that the read data plus any
protocol xdr that surrounds the read data. The xdr_buf represents this
fine: head, (pages[], page_base, page_len), tail.
If you want to do zero-copy READ_PLUS then you need a data structure
that will represent a reply with multiple data segments.
I guess you could add more fields to the xdr_buf, or leave it alone and
keep a list of xdr_buf's instead.
The latter sounds better to me, and I imagine that would be doable but
tedious--but I haven't honestly thought it through.
There's also a tradeoff on the client side, isn't there? Worst case if
the data to be read is a small hole followed by a bunch of data, then a
READ_PLUS would end up needing to copy all the data in return for only a
small savings in data transferred.
I feel like READ_PLUS needs more of an argument.
--b.
next prev parent reply other threads:[~2015-02-05 16:47 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-28 20:42 [PATCH v2 0/4] NFSD: Add READ_PLUS support Anna.Schumaker
2015-01-28 20:42 ` [PATCH v2 1/4] NFSD: nfsd4_encode_read() should encode eof and maxcount Anna.Schumaker
2015-02-05 14:11 ` Christoph Hellwig
2015-02-05 16:04 ` Anna Schumaker
2015-01-28 20:42 ` [PATCH v2 2/4] NFSD: Add READ_PLUS support for data segments Anna.Schumaker
2015-02-05 14:13 ` Christoph Hellwig
2015-02-05 16:06 ` Anna Schumaker
2015-02-05 16:23 ` Christoph Hellwig
2015-02-05 16:43 ` Anna Schumaker
2015-02-05 16:48 ` J. Bruce Fields
2015-02-05 16:53 ` Anna Schumaker
2015-02-06 22:00 ` Anna Schumaker
2015-02-11 16:04 ` Anna Schumaker
2015-02-11 16:13 ` Trond Myklebust
2015-02-11 16:22 ` J. Bruce Fields
2015-02-11 16:31 ` Trond Myklebust
2015-02-11 16:42 ` J. Bruce Fields
2015-02-12 12:32 ` Christoph Hellwig
[not found] ` <OF7B254253.7A276767-ON88257DE9.005F1E53-88257DE9.0060F512@us.ibm.com>
2015-02-11 17:47 ` Trond Myklebust
2015-02-11 18:17 ` Tom Haynes
2015-02-11 18:49 ` Trond Myklebust
2015-02-11 19:01 ` Anna Schumaker
2015-02-11 19:22 ` Anna Schumaker
2015-02-12 19:59 ` Anna Schumaker
2015-02-13 13:24 ` Christoph Hellwig
2015-02-13 14:12 ` J. Bruce Fields
2015-02-12 12:29 ` Christoph Hellwig
2015-02-06 11:54 ` Christoph Hellwig
2015-02-06 16:08 ` J. Bruce Fields
2015-02-06 16:21 ` J. Bruce Fields
2015-02-06 16:46 ` Chuck Lever
2015-02-06 17:04 ` Chuck Lever
2015-02-06 17:59 ` J. Bruce Fields
2015-02-06 18:44 ` Chuck Lever
2015-02-06 19:35 ` J. Bruce Fields
2015-02-06 20:07 ` Chuck Lever
2015-02-06 20:28 ` J. Bruce Fields
2015-02-06 21:12 ` Chuck Lever
2015-02-06 22:01 ` J. Bruce Fields
2015-02-05 16:47 ` J. Bruce Fields [this message]
2015-01-28 20:42 ` [PATCH v2 3/4] NFSD: Add READ_PLUS support for hole segments Anna.Schumaker
2015-01-28 20:42 ` [PATCH v2 4/4] NFSD: Add support for encoding multiple segments Anna.Schumaker
2015-01-28 21:38 ` [PATCH v2 0/4] NFSD: Add READ_PLUS support Christoph Hellwig
2015-01-28 21:45 ` Anna Schumaker
2015-01-29 16:49 ` Anna Schumaker
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=20150205164701.GA4289@fieldses.org \
--to=bfields@fieldses.org \
--cc=Anna.Schumaker@netapp.com \
--cc=hch@infradead.org \
--cc=linux-nfs@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.