From: Isaac Huang Date: Thu, 19 Aug 2010 17:11:46 +0000 (+0400) Subject: b=23179 MDS node unresponsive X-Git-Tag: 2.0.51.0~55 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=9b25c27a3e1ffb1781d6c4a80564c2217020de83 b=23179 MDS node unresponsive Better hash distribution, doubled hash size for the lnet cookie hash. i=zhen.liang i=andreas.dilger --- diff --git a/lnet/include/lnet/lib-types.h b/lnet/include/lnet/lib-types.h index 8f69c18..57454bc 100644 --- a/lnet/include/lnet/lib-types.h +++ b/lnet/include/lnet/lib-types.h @@ -304,7 +304,8 @@ typedef struct { #define LNET_COOKIE_TYPE_MD 1 #define LNET_COOKIE_TYPE_ME 2 #define LNET_COOKIE_TYPE_EQ 3 -#define LNET_COOKIE_TYPES 4 +#define LNET_COOKIE_TYPE_BITS 2 +#define LNET_COOKIE_TYPES (1 << LNET_COOKIE_TYPE_BITS) /* LNET_COOKIE_TYPES must be a power of 2, so the cookie type can be * extracted by masking with (LNET_COOKIE_TYPES - 1) */ diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c index 07069db..3b97ea5 100644 --- a/lnet/lnet/api-ni.c +++ b/lnet/lnet/api-ni.c @@ -482,7 +482,7 @@ lnet_setup_handle_hash (void) /* Arbitrary choice of hash table size */ #ifdef __KERNEL__ the_lnet.ln_lh_hash_size = - CFS_PAGE_SIZE / sizeof (cfs_list_t); + (2 * CFS_PAGE_SIZE) / sizeof (cfs_list_t); #else the_lnet.ln_lh_hash_size = (MAX_MES + MAX_MDS + MAX_EQS)/4; #endif @@ -520,7 +520,7 @@ lnet_lookup_cookie (__u64 cookie, int type) if ((cookie & (LNET_COOKIE_TYPES - 1)) != type) return (NULL); - hash = ((unsigned int)cookie) % the_lnet.ln_lh_hash_size; + hash = ((unsigned int)(cookie >> LNET_COOKIE_TYPE_BITS)) % the_lnet.ln_lh_hash_size; list = &the_lnet.ln_lh_hash_table[hash]; cfs_list_for_each (el, list) { @@ -544,7 +544,7 @@ lnet_initialise_handle (lnet_libhandle_t *lh, int type) lh->lh_cookie = the_lnet.ln_next_object_cookie | type; the_lnet.ln_next_object_cookie += LNET_COOKIE_TYPES; - hash = ((unsigned int)lh->lh_cookie) % the_lnet.ln_lh_hash_size; + hash = ((unsigned int)(lh->lh_cookie >> LNET_COOKIE_TYPE_BITS)) % the_lnet.ln_lh_hash_size; cfs_list_add (&lh->lh_hash_chain, &the_lnet.ln_lh_hash_table[hash]); }