>From b82e7a3b936b3950b296514f6ee0542132f11e4a Mon Sep 17 00:00:00 2001 From: Jim Nasby Date: Tue, 23 Dec 2014 23:00:20 -0600 Subject: [PATCH] Fugly hack to test out XXHash (https://code.google.com/p/xxhash/) --- src/backend/storage/buffer/buf_table.c | 5 +- src/backend/utils/hash/Makefile | 2 +- src/backend/utils/hash/hashfn.c | 12 + src/backend/utils/hash/xxhash.c | 928 +++++++++++++++++++++++++++++++++ src/include/utils/hsearch.h | 5 + src/include/utils/xxhash.h | 158 ++++++ 6 files changed, 1107 insertions(+), 3 deletions(-) create mode 100644 src/backend/utils/hash/xxhash.c create mode 100644 src/include/utils/xxhash.h diff --git a/src/backend/storage/buffer/buf_table.c b/src/backend/storage/buffer/buf_table.c index 0750b63..7592bd9 100644 --- a/src/backend/storage/buffer/buf_table.c +++ b/src/backend/storage/buffer/buf_table.c @@ -23,7 +23,7 @@ #include "storage/bufmgr.h" #include "storage/buf_internals.h" - +#include "utils/hsearch.h" /* For XXHash stuff */ /* entry for buffer lookup hashtable */ typedef struct @@ -60,11 +60,12 @@ InitBufTable(int size) info.keysize = sizeof(BufferTag); info.entrysize = sizeof(BufferLookupEnt); info.num_partitions = NUM_BUFFER_PARTITIONS; + info.hash = PGH32; SharedBufHash = ShmemInitHash("Shared Buffer Lookup Table", size, size, &info, - HASH_ELEM | HASH_BLOBS | HASH_PARTITION); + HASH_ELEM | HASH_FUNCTION | HASH_PARTITION); } /* diff --git a/src/backend/utils/hash/Makefile b/src/backend/utils/hash/Makefile index 05d347c..c04f971 100644 --- a/src/backend/utils/hash/Makefile +++ b/src/backend/utils/hash/Makefile @@ -12,6 +12,6 @@ subdir = src/backend/utils/hash top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global -OBJS = dynahash.o hashfn.o +OBJS = dynahash.o hashfn.o xxhash.o include $(top_srcdir)/src/backend/common.mk diff --git a/src/backend/utils/hash/hashfn.c b/src/backend/utils/hash/hashfn.c index adb0bd9..0bdc23b 100644 --- a/src/backend/utils/hash/hashfn.c +++ b/src/backend/utils/hash/hashfn.c @@ -22,6 +22,7 @@ #include "postgres.h" #include "access/hash.h" +#include "utils/xxhash.h" /* @@ -67,6 +68,17 @@ uint32_hash(const void *key, Size keysize) } /* + * XXhash hackery + */ +// #define PGH32(input, length) ((uint32 *) XXH32_no_seed(input, (size_t) length)); +uint32 +PGH32(const void *key, Size keysize) +{ + return (uint32) XXH32_no_seed(key, (size_t) keysize); +} + + +/* * bitmap_hash: hash function for keys that are (pointers to) Bitmapsets * * Note: don't forget to specify bitmap_match as the match function! diff --git a/src/include/utils/hsearch.h b/src/include/utils/hsearch.h index dfdf658..bc531c7 100644 --- a/src/include/utils/hsearch.h +++ b/src/include/utils/hsearch.h @@ -157,4 +157,9 @@ extern int bitmap_match(const void *key1, const void *key2, Size keysize); #define oid_hash uint32_hash /* Remove me eventually */ +/* + * XXHash hackery + */ +extern uint32 PGH32(const void *key, Size keysize); + #endif /* HSEARCH_H */ -- 2.1.2