Add support for the Google xxhash checksumming function
It's a lot faster than the other software defined ones, so will
be a useful alternative for the cases where crc32c-intel isn't
available.
Signed-off-by: Jens Axboe <axboe@fb.com>
diff --git a/crc/test.c b/crc/test.c
index 2f6d9ee..174bea3 100644
--- a/crc/test.c
+++ b/crc/test.c
@@ -16,6 +16,7 @@
#include "../crc/sha1.h"
#include "../crc/sha256.h"
#include "../crc/sha512.h"
+#include "../crc/xxhash.h"
#define CHUNK 131072U
#define NR_CHUNKS 2048U
@@ -36,6 +37,7 @@
T_SHA1 = 1U << 6,
T_SHA256 = 1U << 7,
T_SHA512 = 1U << 8,
+ T_XXHASH = 1U << 9,
};
static void randomize_buf(void *buf, unsigned int size, int seed)
@@ -233,6 +235,29 @@
return ret;
}
+static uint64_t t_xxhash(void)
+{
+ void *state;
+ struct timeval s;
+ uint64_t ret;
+ void *buf;
+ int i;
+
+ state = XXH32_init(0x8989);
+
+ buf = malloc(CHUNK);
+ randomize_buf(buf, CHUNK, 0x8989);
+
+ fio_gettime(&s, NULL);
+ for (i = 0; i < NR_CHUNKS; i++)
+ XXH32_update(state, buf, CHUNK);
+
+ XXH32_digest(state);
+ ret = utime_since_now(&s);
+ free(buf);
+ return ret;
+}
+
static struct test_type t[] = {
{
.name = "md5",
@@ -280,6 +305,11 @@
.fn = t_sha512,
},
{
+ .name = "xxhash",
+ .mask = T_XXHASH,
+ .fn = t_xxhash,
+ },
+ {
.name = NULL,
},
};