Re: Change GUC hashtable to use simplehash?
John Naylor <johncnaylorls@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Silence warning in older versions of Valgrind
- fde7c0164ea2 17.5 landed
- 0600d276d485 18.0 landed
-
Revert "Speed up tail processing when hashing aligned C strings, take two"
- 6555fe197914 17.3 landed
- 235328ee4ae4 18.0 landed
-
Speed up tail processing when hashing aligned C strings, take two
- a365d9e2e8c1 17.0 landed
-
Teach fasthash_accum to use platform endianness for bytewise loads
- 0c25fee35903 17.0 landed
-
Add macro to disable address safety instrumentation
- db17594ad73a 17.0 landed
-
Convert uses of hash_string_pointer to fasthash equivalent
- f956ecd0353b 17.0 landed
-
Speed up tail processing when hashing aligned C strings
- 07f0f6abfc7f 17.0 landed
-
Add helper functions for dshash tables with string keys.
- 42a1de3013ea 17.0 cited
-
Fix warnings in cpluspluscheck
- 257998508672 17.0 landed
-
Further cosmetic review of hashfn_unstable.h
- b83033c3cff5 17.0 landed
-
Simplify initialization of incremental hash state
- 9ed3ee5001b6 17.0 landed
-
Add optimized C string hashing
- 0aba2554409e 17.0 landed
-
Add inline incremental hash functions for in-memory use
- e97b672c88f6 17.0 landed
-
Make all Perl warnings fatal
- c5385929593d 17.0 cited
Attachments
- v15-0003-Use-fasthash-for-guc_name_hash.patch (text/x-patch) patch v15-0003
- v15-0004-WIP-comment-edits.patch (text/x-patch) patch v15-0004
- v15-0001-Initialization-of-incremental-hashing-no-longer-.patch (text/x-patch) patch v15-0001
- v15-0002-Use-fasthash-for-dynahash-s-default-string-hash.patch (text/x-patch) patch v15-0002
I wrote: > fasthash_init(&hs, sizeof(Datum), kind); > fasthash_accum(&hs, (char *) &value, sizeof(Datum)); > return fasthash_final32(&hs, 0); It occurred to me that it's strange to have two places that length can be passed. That was a side effect of the original, which used length to both know how many bytes to read, and to modify the internal seed. With the incremental API, it doesn't make sense to pass the length (or a dummy macro) up front -- with a compile-time fixed length, it can't possibly break a tie, so it's just noise. 0001 removes the length from initialization in the incremental interface. The standalone functions use length directly the same as before, but after initialization. Thoughts? Also, the fasthash_accum call is a bit verbose, because it's often used in a loop with varlen input. For register-sized values, I think it's simpler to say this, as done in the search path cache, so maybe a comment to that effect would be helpful: hs.accum = value; fasthash_combine(&hs); I noticed that we already have a more recent, stronger 64-bit mixer than murmur64: splitmix64, in pg_prng.c. We could put that, as well as a better 4-byte mixer [1] in hashfn_unstable.h, for in-memory use. Maybe with names like "hash_4bytes" etc. so it's not tied to a specific implementation. I see one simplehash case that can use it, even if the resowner hash table gets rid of it. 0002 and 0003 use fasthash for dynahash and GUC hash, respectively. These cannot use the existing cstring hashing directly because of truncation and case-folding, respectively. (Some simplehash uses can, but that can come later) On Sun, Jan 21, 2024 at 8:06 AM Jeff Davis <pgsql@j-davis.com> wrote: > > After having stepped away from this work for a couple weeks and > returning to it, I think the comments and/or naming could be more > clear. We first use the result of haszero64() as a boolean to break out > of the loop, but then later use it in a more interesting way to count > the number of remaining bytes. > > Perhaps you can take the comment out of the loop and just describe the > algorithm we're using, and make a note that we have to byteswap first. > "Indeterminate" could be explained briefly as well. v15-0004 is a stab at that. As an idea, it also renames zero_bytes_le to zero_byte_low to reflect the effect better. There might be some other comment edits needed to explain usage, so I plan to hold on to this for later. Let me know what you think. [1] Examples of both in https://www.boost.org/doc/libs/1_84_0/boost/container_hash/detail/hash_mix.hpp