From: "J. Bruce Fields" <bfields@fieldses.org>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: Jeff Layton <jlayton@redhat.com>, linux-nfs@vger.kernel.org
Subject: Re: [PATCH v3 2/2] nfsd: keep a checksum of the first 256 bytes of request
Date: Thu, 7 Feb 2013 11:37:08 -0500 [thread overview]
Message-ID: <20130207163708.GJ3222@fieldses.org> (raw)
In-Reply-To: <7AE3520E-0F1E-4BDF-9977-B110180E99E3@oracle.com>
On Thu, Feb 07, 2013 at 11:23:17AM -0500, Chuck Lever wrote:
>
> On Feb 7, 2013, at 11:00 AM, "J. Bruce Fields" <bfields@fieldses.org> wrote:
>
> > On Thu, Feb 07, 2013 at 10:51:02AM -0500, Chuck Lever wrote:
> >>
> >> On Feb 7, 2013, at 9:51 AM, Jeff Layton <jlayton@redhat.com> wrote:
> >>
> >>> Now that we're allowing more DRC entries, it becomes a lot easier to
> >>> hit problems with XID collisions. In order to mitigate those,
> >>> calculate the crc32 of up to the first 256 bytes of each request
> >>> coming in and store that in the cache entry, along with the total
> >>> length of the request.
> >>
> >> I'm happy to see a checksummed DRC finally become reality for the
> >> Linux NFS server.
> >>
> >> Have you measured the CPU utilization impact and CPU cache footprint
> >> of performing a CRC computation for every incoming RPC?
> >
> > Note this is over the first 256 bytes of the request--which we're
> > probably just about to read for xdr decoding anyway.
>
> XDR decoding is copying and branching. Computing a CRC involves real math, which tends to be significantly more expensive than successfully predicted branches, especially on low-power CPUs that might be found in SOHO NAS products.
OK, I wouldn't know.
(I was just responding to the "cache footprint" question--I thought you
were concerned about reading in a bunch of the request.) Looks like the
biggest piece of the crc32 code is a 1k lookup table?
> >> I'm wondering if a simpler checksum might be just as useful but less
> >> costly to compute.
> >
> > What would be an example of a simpler checksum?
>
> The same one TCP uses, like a simple additive sum, or an XOR. Is a heavyweight checksum needed because checksums generated with a simple function are more likely to collide?
>
> Not that this should hold up merging Jeff's work! We can easily tweak or replace the checksum algorithm after it's upstream. It's not kABI.
>
> But someone should assess the impact of the additional checksum computation. CRC seems to me heavier than is needed here.
OK, sure, may be worth looking into.
> Possible tweaks:
>
> Why 256 bytes? Is that too much? Or not enough for some NFSv4
> compounds that might often start with the same data? Could we, for
> instance, use fewer bytes for NFSv2 and NFSv3? Or even a variable
> checksum length depending on the NFS operation? Is 256 bytes enough
> for NFSv4.1, whose compounds always start with the same operation?
NFSv4.1 has the drc turned completely off.
> If integrity or privacy is in play, can we use that information in
> place of a separate DRC checksum?
There's a gss sequence number that's incremented even on resends of the
same rpc, so this doesn't work. (By design: you don't want an attacker
to be able to replay an old rpc.)
--b.
next prev parent reply other threads:[~2013-02-07 16:37 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-07 14:51 [PATCH v3 0/2] nfsd: checksum first 256 bytes of request to guard against XID collisions in the DRC Jeff Layton
2013-02-07 14:51 ` [PATCH v3 1/2] sunrpc: trim off trailing checksum before returning decrypted or integrity authenticated buffer Jeff Layton
2013-02-07 14:51 ` [PATCH v3 2/2] nfsd: keep a checksum of the first 256 bytes of request Jeff Layton
2013-02-07 15:51 ` Chuck Lever
2013-02-07 16:00 ` J. Bruce Fields
2013-02-07 16:23 ` Chuck Lever
2013-02-07 16:37 ` J. Bruce Fields [this message]
2013-02-07 16:41 ` Jim Rees
2013-02-07 16:32 ` Myklebust, Trond
2013-02-07 18:35 ` Jeff Layton
2013-02-08 15:41 ` Jeff Layton
2013-02-07 18:03 ` Jeff Layton
2013-02-08 13:27 ` Jeff Layton
2013-02-08 15:42 ` Chuck Lever
2013-02-08 15:57 ` Jeff Layton
2013-02-08 20:55 ` J. Bruce Fields
2013-02-08 20:59 ` Chuck Lever
2013-02-08 21:02 ` J. Bruce Fields
2013-02-09 11:36 ` Jeff Layton
2013-02-07 15:11 ` [PATCH v3 0/2] nfsd: checksum first 256 bytes of request to guard against XID collisions in the DRC J. Bruce Fields
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=20130207163708.GJ3222@fieldses.org \
--to=bfields@fieldses.org \
--cc=chuck.lever@oracle.com \
--cc=jlayton@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox