From: Dave Chinner <david@fromorbit.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: Eric Sandeen <sandeen@redhat.com>, xfs <linux-xfs@vger.kernel.org>
Subject: Re: [PATCH] libxfs: use crc32c slice-by-8 variant by default
Date: Sun, 14 May 2017 09:45:45 +1000 [thread overview]
Message-ID: <20170513234545.GL17542@dastard> (raw)
In-Reply-To: <20170513193344.GK4519@birch.djwong.org>
On Sat, May 13, 2017 at 12:33:44PM -0700, Darrick J. Wong wrote:
> The crc32c code used in xfsprogs was copied directly from the Linux
> kernel. However, that code selects slice-by-4 by default, which isn't
> the fastest -- that's slice-by-8, which trades table size for speed.
> Fix some makefile dependency problems and explicitly select the
> algorithm we want. With this patch applied, I see about a 10% drop in
> CPU time running xfs_repair.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
> libxfs/Makefile | 4 ++--
> libxfs/crc32defs.h | 3 +++
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/libxfs/Makefile b/libxfs/Makefile
> index 0f3759e..c5dc382 100644
> --- a/libxfs/Makefile
> +++ b/libxfs/Makefile
> @@ -124,7 +124,7 @@ LDIRT = gen_crc32table crc32table.h crc32selftest
>
> default: crc32selftest ltdepend $(LTLIBRARY)
>
> -crc32table.h: gen_crc32table.c
> +crc32table.h: gen_crc32table.c crc32defs.h
> @echo " [CC] gen_crc32table"
> $(Q) $(BUILD_CC) $(BUILD_CFLAGS) -o gen_crc32table $<
> @echo " [GENERATE] $@"
> @@ -135,7 +135,7 @@ crc32table.h: gen_crc32table.c
> # systems/architectures. Hence we make sure that xfsprogs will never use a
> # busted CRC calculation at build time and hence avoid putting bad CRCs down on
> # disk.
> -crc32selftest: gen_crc32table.c crc32table.h crc32.c
> +crc32selftest: gen_crc32table.c crc32table.h crc32.c crc32defs.h
> @echo " [TEST] CRC32"
> $(Q) $(BUILD_CC) $(BUILD_CFLAGS) -D CRC32_SELFTEST=1 crc32.c -o $@
> $(Q) ./$@
> diff --git a/libxfs/crc32defs.h b/libxfs/crc32defs.h
> index 64cba2c..153f44c 100644
> --- a/libxfs/crc32defs.h
> +++ b/libxfs/crc32defs.h
> @@ -1,3 +1,6 @@
> +/* Use slice-by-8, which is the fastest variant. */
> +# define CRC_LE_BITS 64
I'm not sure this works on all platforms and builds, whereas the
existing slice-by-4 default should work for them all, but may not
be the fastest.
This code in the crc32defs.h:
#ifndef CRC_LE_BITS
# ifdef CONFIG_64BIT
# define CRC_LE_BITS 64
# else
# define CRC_LE_BITS 32
# endif
#endif
kinda tells us what the "optimal" default should be.
And keep in mind that the kernel has arch-specific settings:
$ git grep CONFIG_CRC32_S
arch/mips/configs/bcm47xx_defconfig:CONFIG_CRC32_SARWATE=y
arch/mips/configs/db1xxx_defconfig:CONFIG_CRC32_SLICEBY4=y
arch/mips/configs/rt305x_defconfig:CONFIG_CRC32_SARWATE=y
arch/mips/configs/xway_defconfig:CONFIG_CRC32_SARWATE=y
arch/powerpc/configs/adder875_defconfig:CONFIG_CRC32_SLICEBY4=y
arch/powerpc/configs/ep88xc_defconfig:CONFIG_CRC32_SLICEBY4=y
arch/powerpc/configs/mpc866_ads_defconfig:CONFIG_CRC32_SLICEBY4=y
arch/powerpc/configs/mpc885_ads_defconfig:CONFIG_CRC32_SLICEBY4=y
arch/powerpc/configs/tqm8xx_defconfig:CONFIG_CRC32_SLICEBY4=y
....
Which says that certain mips and powerpc CPUs should be using
slice-by-4 or sarwate algorithms, not slice-by-8....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2017-05-13 23:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-13 19:33 [PATCH] libxfs: use crc32c slice-by-8 variant by default Darrick J. Wong
2017-05-13 23:45 ` Dave Chinner [this message]
2017-05-14 1:25 ` Darrick J. Wong
2017-05-14 22:26 ` Dave Chinner
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=20170513234545.GL17542@dastard \
--to=david@fromorbit.com \
--cc=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.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 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.