From 14962ce3e69e452a2447c12cde3369759365fda9 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 28 Oct 2009 04:46:25 +0000 Subject: performance/io-cache: change the hash function used for rbtree based hash table. - the earlier hash function does not distribute pages uniformly for offsets that fit into 32 bits. The reason is that the hash function just xors the contents of the key 4 bytes at a time with the current value of hash. Hence for keys that fit into 32 bits, the hash will be the key itself. Since we are using the rounded_offset (which is a multiple of 128KB) as the key, the key will be exactly divisible by the number of buckets configured (4096) resolving all the pages into the first bucket. Signed-off-by: Anand V. Avati BUG: 335 (Io-cache optimization) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=335 --- xlators/performance/io-cache/src/io-cache.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'xlators/performance/io-cache/src/io-cache.c') diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 5c1f74db12f..da3f4f15da3 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -30,6 +30,8 @@ #include #include +extern int ioc_log2_page_size; + uint32_t ioc_get_priority (ioc_table_t *table, const char *path); @@ -1234,11 +1236,12 @@ out: int32_t init (xlator_t *this) { - ioc_table_t *table = NULL; - dict_t *options = this->options; - uint32_t index = 0; - char *cache_size_string = NULL; - int32_t ret = -1; + ioc_table_t *table = NULL; + dict_t *options = this->options; + uint32_t index = 0; + char *cache_size_string = NULL; + int32_t ret = -1; + glusterfs_ctx_t *ctx = NULL; if (!this->children || this->children->next) { gf_log (this->name, GF_LOG_ERROR, @@ -1320,6 +1323,9 @@ init (xlator_t *this) this->private = table; ret = 0; + ctx = this->ctx; + ioc_log2_page_size = gf_log2 (ctx->page_size); + out: if (ret == -1) { if (table != NULL) { -- cgit