linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Btrfs: do not async metadata csums if we have hardware crc32c
@ 2012-09-24 18:11 Josef Bacik
  2012-09-24 18:19 ` Arne Jansen
  2012-09-24 21:03 ` David Sterba
  0 siblings, 2 replies; 9+ messages in thread
From: Josef Bacik @ 2012-09-24 18:11 UTC (permalink / raw)
  To: linux-btrfs

The reason we offload csumming is because it is CPU intensive, except it is
not on modern intel CPUs.  So check to see if we support hardware crc32c,
and if we do just do the csumming in our current threads context.  Otherwise
we can farm it off.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
---
 fs/btrfs/disk-io.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index dcaf556..830b9af 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -31,6 +31,7 @@
 #include <linux/migrate.h>
 #include <linux/ratelimit.h>
 #include <asm/unaligned.h>
+#include <asm/cpufeature.h>
 #include "compat.h"
 #include "ctree.h"
 #include "disk-io.h"
@@ -880,6 +881,22 @@ static int btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
 	}
 
 	/*
+	 * Pretty sure I'm going to hell for this.  If our CPU can do crc32cs in
+	 * the hardware then there is no reason to do the csum stuff
+	 * asynchronously, it will be faster to do it inline, so test to see if
+	 * our CPU can do hardware crc32c and if it can just do the csum in our
+	 * threads context.
+	 */
+#ifdef CONFIG_X86
+	if (cpu_has_xmm4_2) {
+		printk(KERN_ERR "doing it the fast way\n");
+		ret = btree_csum_one_bio(bio);
+		if (ret)
+			return ret;
+		return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, mirror_num, 0);
+	}
+#endif
+	/*
 	 * kthread helpers are used to submit writes so that checksumming
 	 * can happen in parallel across all CPUs
 	 */
-- 
1.7.7.6


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-09-25 12:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-24 18:11 [PATCH] Btrfs: do not async metadata csums if we have hardware crc32c Josef Bacik
2012-09-24 18:19 ` Arne Jansen
2012-09-24 18:33   ` Josef Bacik
2012-09-24 18:58   ` Chris Mason
2012-09-24 21:03 ` David Sterba
2012-09-25 10:51   ` David Sterba
2012-09-25 11:40     ` ching
2012-09-25 12:55       ` David Sterba
2012-09-25 11:54     ` ching

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).