All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: George Spelvin <linux@sciencehorizons.net>
Cc: bfields@redhat.com, linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org
Subject: Re: [PATCH v3 06/10] fs/namei.c: Improve dcache hash function
Date: Mon, 30 May 2016 18:27:21 +0200	[thread overview]
Message-ID: <20160530162721.GG3193@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20160530160618.22150.qmail@ns.sciencehorizons.net>

On Mon, May 30, 2016 at 12:06:18PM -0400, George Spelvin wrote:
> Not quite.  The fold_hash() you quote is used only on 64-bit systems,
> which can be assumed to have a reasonable 64-bit multiply.  On 32-bit
> platforms, I avoid using GOLDEN_RATIO_64 at all, since 64x64-bit
> multiplies are so expensive.

Right; as stated performance really isn't a goal here.

> You actually have only 96 bits of input.  The correct prototype is:
> 
> static inline u64 iterate_chain_key(u64 key, u32 idx)

Indeed, although I conveniently ignored that because I didn't think it'd
matter :-)

> If performance mattered, I'd be inclined to use one or two iterations
> of the 32-bit HASH_MIX() function, which is specifically designed
> to add 32 bits to a 64-bit hash value.

Ah, I missed that HASH_MIX() had 64 bit state, so much for being able to
read it seems. Also; should we not move that entire section of
fs/namei.c into linux/hash.h ?

These two primitives seem generally useful.

> A more thorough mixing would be achieved by __jhash_mix().  Basically:
> 
> static inline u64 iterate_chain_key(u64 key, u32 idx)
> {
> 	u32 k0 = key, k1 = key >> 32;
> 
> 	__jhash_mix(idx, k0, k1)	/* Macro that modifies arguments! */
> 
> 	return k0 | (u64)k1 << 32;
> }
> 
> (The order of arguments is chosen to perserve the two "most-hashed" values.)

(I'd never have managed to deduce that property given the information in
jhash.h)

OK, that looks good to me, thanks! I'll go use that then.

> Also, I just had contact from the hppa folks who have brought to my
> attention that it's an example of an out-of-order superscalar CPU that
> *doesn't* have a good integer multiplier.  For general multiplies,
> you have to move values to the FPU and the code is a pain.

Egads, that's horrible, but sounds exactly like the thing you 'like'
given these patches :-) Good luck with that.

  reply	other threads:[~2016-05-30 16:27 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CA+55aFxPSW+84KfQ1N_WmND-wtvgj2zQm8nFPkRcc+gyU=uing@mail.gmail.com>
2016-05-25  7:20 ` [PATCH 00/10] String hash improvements George Spelvin
2016-05-25  7:20   ` George Spelvin
2016-05-25  8:00   ` Geert Uytterhoeven
2016-05-25  8:11     ` George Spelvin
2016-05-25  8:11       ` George Spelvin
2016-05-25  8:50       ` Geert Uytterhoeven
2016-05-25  8:50       ` Geert Uytterhoeven
2016-05-25  9:07         ` George Spelvin
2016-05-25  9:07           ` George Spelvin
2016-05-25  8:00   ` Geert Uytterhoeven
2016-05-25 16:08   ` Linus Torvalds
2016-05-25 16:08   ` Linus Torvalds
2016-05-28 19:57     ` [PATCH v3 " George Spelvin
2016-05-28 19:57       ` [PATCH v3 01/10] Pull out string hash to <linux/stringhash.h> George Spelvin
2016-05-28 19:57       ` [PATCH v3 02/10] fs/namei.c: Add hashlen_string() function George Spelvin
2016-05-28 19:57       ` [PATCH v3 03/10] <linux/sunrpc/svcauth.h>: Define hash_str() in terms of hashlen_string() George Spelvin
2016-05-28 19:57       ` [PATCH v3 04/10] Change hash_64() return value to 32 bits George Spelvin
2016-05-28 19:57       ` [PATCH v3 05/10] Eliminate bad hash multipliers from hash_32() and hash_64() George Spelvin
2016-05-28 19:57       ` [PATCH v3 06/10] fs/namei.c: Improve dcache hash function George Spelvin
2016-05-30 15:11         ` Peter Zijlstra
2016-05-30 16:06           ` George Spelvin
2016-05-30 16:27             ` Peter Zijlstra [this message]
2016-05-30 18:10               ` George Spelvin
2016-06-02  1:18                 ` Linus Torvalds
2016-06-02  2:31                   ` George Spelvin
2016-06-02 16:35                     ` Linus Torvalds
2016-06-02 18:23                       ` George Spelvin
2016-05-28 19:57       ` [PATCH v3 07/10] <linux/hash.h>: Add support for architecture-specific functions George Spelvin
2016-05-28 19:57       ` George Spelvin
2016-05-29  7:57         ` Geert Uytterhoeven
2016-05-29  7:57           ` Geert Uytterhoeven
2016-05-28 19:57       ` [PATCH v3 08/10] m68k: Add <asm/hash.h> George Spelvin
2016-05-28 19:57       ` George Spelvin
2016-05-28 19:57       ` [PATCH v3 09/10] microblaze: " George Spelvin
2016-05-28 19:57       ` [PATCH v3 10/10] h8300: " George Spelvin
2016-05-28 20:47       ` [PATCH v3 00/10] String hash improvements Linus Torvalds
2016-05-28 20:54         ` George Spelvin
2016-06-02 22:59     ` [PATCH " Fubo Chen
2016-06-02 22:59       ` Fubo Chen
2016-05-26 17:09   ` [PATCH v2 " George Spelvin
2016-05-26 17:09   ` George Spelvin
2016-05-25  7:21 ` [PATCH 01/10] Pull out string hash to <linux/stringhash.h> George Spelvin
2016-05-25  7:22 ` [PATCH 02/10] fs/namei.c: Add hash_string() function George Spelvin
2016-05-25  7:26 ` [PATCH 03/10] <linux/sunrpc/svcauth.h>: Define hash_str() in terms of hash_string() George Spelvin
2016-05-26 18:39   ` [PATCH RESEND " George Spelvin
2016-05-26 18:45     ` J. Bruce Fields
2016-05-25  7:28 ` [PATCH 04/10] Change hash_64() return value to 32 bits George Spelvin
2016-05-25  7:29 ` [PATCH 05/10] Eliminate bad hash multipliers from hash_32() and hash_64() George Spelvin
2016-05-25  7:31 ` [PATCH 06/10] fs/namei.c: Improve dcache hash function George Spelvin
2016-05-25  7:33 ` [PATCH 07/10] <linux/hash.h>: Add support for architecture-specific functions George Spelvin
2016-05-25  7:33   ` George Spelvin
2016-05-26 17:16   ` [PATCH v2 " George Spelvin
2016-05-26 17:16     ` George Spelvin
2016-05-25  7:34 ` [PATCH 08/10] m68k: Add <asm/archhash.h> George Spelvin
2016-05-25  7:34 ` George Spelvin
2016-05-25  7:34   ` George Spelvin
2016-05-25  8:07   ` Geert Uytterhoeven
2016-05-25  8:07     ` Geert Uytterhoeven
2016-05-25  8:19     ` George Spelvin
2016-05-25  8:19     ` George Spelvin
2016-05-25  8:24     ` [PATCH 08v2/10] " George Spelvin
2016-05-25  8:24       ` George Spelvin
2016-05-25  8:48       ` Geert Uytterhoeven
2016-05-25  8:48       ` Geert Uytterhoeven
2016-05-25  8:56   ` [PATCH 08/10] " Philippe De Muyter
2016-05-25  8:56     ` Philippe De Muyter
2016-05-25  9:14     ` George Spelvin
2016-05-25  9:14       ` George Spelvin
2016-05-25  9:31       ` Andreas Schwab
2016-05-25  9:31       ` Andreas Schwab
2016-05-25  9:51       ` Philippe De Muyter
2016-05-25  9:51       ` Philippe De Muyter
2016-05-25 13:24   ` Philippe De Muyter
2016-05-25 13:24     ` Philippe De Muyter
2016-05-25 13:42     ` George Spelvin
2016-05-25 13:42       ` George Spelvin
2016-05-26 17:19   ` [PATCH v2 08/10] m68k: Add <asm/hash.h> George Spelvin
2016-05-26 17:19     ` George Spelvin
2016-05-25  7:37 ` [PATCH 09/10] microblaze: Add <asm/archhash.h> George Spelvin
2016-05-26 17:21   ` [PATCH v2 09/10] microblaze: Add <asm/hash.h> George Spelvin
2016-05-26 17:21   ` George Spelvin
2016-05-25  7:38 ` [PATCH 10/10] h8300: Add <asm/archhash.h> George Spelvin
2016-05-26 17:23   ` [PATCH v2 10/10] h8300: Add <asm/hash.h> George Spelvin
2016-05-26 17:23     ` George Spelvin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160530162721.GG3193@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bfields@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@sciencehorizons.net \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.